<jupyter_start><jupyter_text>Template untuk relayout tabel sarana untuk dashboard Microstrategy- mengubah id_jenis, id_pemilik, id_daop- menambahkan usia sarana- format akhir tabel (kode_sarana, jenis_sarana, nama_pemilik, nama_daop, lokasi, tahun_pembuatan, umur, range_usia, asal_pabrikan)<jupyter_code>import pandas as pd
colnames=['id', 'kode_sarana', 'kode_sarana_lama', 'id_kartu', 'id_jenis', 'id_sub_jenis', 'seri', 'tahun_dinas', 'id_daops', 'id_depo', 'status', 'negara_asal', 'tgl_uji_pertama', 'tgl_masa_uji', 'tgl_masa_perawatan', 'pabrikan', 'id_pemilik', 'created_at', 'last_update' ] 
df_sarana1 = pd.read_csv('tblsarana_080721.csv', sep=',', names=colnames)
df_sarana1.head()

df_sarana1.shape<jupyter_output><empty_output><jupyter_text>skip perintah 8-16 jika dataset sudah memuat seluruh sarana, sintaks 8-16 menambahkan data smn karena dataset sebelum nya belum memuat<jupyter_code>df_sarana1 = df_sarana1[(df_sarana1["id_pemilik"] != 1)]
df_sarana1
df_smn = pd.read_csv('../data_source/datsar/smn_update.csv', sep=';', index_col=0)
df_smn.head()
df_smn.shape
df_sarana = pd.concat([df_smn,df_sarana1], ignore_index=True)
df_sarana.shape
df_sarana = df_sarana.sort_values(by="id")

df_sarana
col_pemilik=['id', 'nama_pemilik', 'alamat'] 
df_pemilik = pd.read_csv('tblpemiliksaranas.csv', names=col_pemilik, usecols=['id', 'nama_pemilik', 'alamat'])
df_pemilik.head()
df_pemilik.drop(columns =['alamat'], inplace=True)
df_pemilik.head()
col_daop =['id', 'nama_daop'] 
df_daop = pd.read_csv('tbldaops_updatebtp.csv', names=col_daop, usecols=['id', 'nama_daop'])
df_daop.head()<jupyter_output><empty_output><jupyter_text>join untuk mengasilkan nama daop dan kepemilikan dari id masing2<jupyter_code>join_df = df_sarana.set_index('id_pemilik').join(df_pemilik.set_index('id'), how='left')
join_df2 = join_df.set_index('id_daops').join(df_daop.set_index('id'), how='left')
print(join_df2.head())
print(join_df2.tail())<jupyter_output>id kode_sarana   kode_sarana_lama  id_kartu  id_jenis  id_sub_jenis  seri  \
7  11     SN01501    NR 19 / EX. GGW         0         9            19   169   
7  12     SN02101           GGR 2429         0         9            19   147   
7  50     SN06401  NR 8505 / SN01002         0         9            19   179   
7  53     SN31001           NW 87201         0         9            19   185   
7  97     SI37801  K237802/KD2 78202         0         9            23     0   

   tahun_dinas  id_depo       status negara_asal tgl_uji_pertama tgl_masa_uji  \
7         1915       57        Aktiv         NaN      0000-00-00   0000-00-00   
7         1921       14        Aktiv         NaN      0000-00-00   0000-00-00   
7         2010       15        Aktiv         NaN      0000-00-00   2019-10-20   
7         2010       17  Tidak Aktiv         NaN      0000-00-00   0000-00-00   
7         1978       14        Aktiv         NaN      2009-12-28   0000-00-00   

  tgl_masa_perawatan            [...]<jupyter_text>fungsi untuk mengganti id jenis ke nama jenis sarana<jupyter_code>def transform_data(jenis_sarana):
    if jenis_sarana == 1 :
        jenis_sarana = 'Lokomotif'
    elif jenis_sarana == 2 :
        jenis_sarana = 'KRL'
    elif jenis_sarana == 3 :
        jenis_sarana = 'KRD'
    elif jenis_sarana == 4 :
        jenis_sarana = 'Gerbong'
    elif jenis_sarana == 9 :
        jenis_sarana = 'Peralatan Khusus'
    elif jenis_sarana == 11 :
        jenis_sarana = 'Kereta'
    elif jenis_sarana == 19 :
        jenis_sarana = 'RailBus'
    else :
        jenis_sara = 'undefined'
        
    return jenis_sarana 
join_df2['id_jenis'] = join_df2['id_jenis'].apply(lambda x: transform_data(x))
join_df2 = join_df2.rename(columns={"id_jenis": "jenis_sarana"})
print(join_df2.head())
print(join_df2.tail())
data_sarana = join_df2[(join_df2["status"] == "Aktiv")]
data_sarana.shape
data_sarana = data_sarana[['kode_sarana', 'jenis_sarana', 'nama_pemilik', 'nama_daop', 'pabrikan']]
data_sarana['nama_daop'].unique()<jupyter_output><empty_output><jupyter_text>fungsi untuk membuat kategori jawa/sumatera berdasarkan nama_Daop (lihat hasil sebelumnya)<jupyter_code>import re
def func(col) :
    if re.match(r'\w+', col['nama_daop'])[0] == "DIVRE" :
        area = "SUMATERA"
    elif col['nama_daop'] == "BTP Sumut" or col['nama_daop'] == "BTP Sumbar" or col['nama_daop'] == "BTP Sumsel" :
        area = "SUMATERA"
    elif col['nama_daop'] == "BTP Sulsel" :
        area = "SULAWESI"
    else :
        area = "JAWA"
    return area
data_sarana['lokasi'] = data_sarana.apply(func, axis=1)
data_sarana.lokasi.unique()
data_sarana[data_sarana['nama_daop'].str.contains('^BT.*')==True]
import re
def tahun(tahun) :
    tahun2 = re.findall(r'(0\d{2})', tahun)
    tahun = tahun2[0]
    return tahun

def ambiltahun(col) :
    if col['jenis_sarana'] == "Kereta" :
        x = col['kode_sarana']
        tahun2 = re.findall(r'(0\d{2})', x)
        tahun = tahun2[0]
    elif col['jenis_sarana']=='Lokomotif' :
        tahun = col['kode_sarana'][5:7]
    elif col['jenis_sarana']=='Gerbong' :
        tahun = col['kode_sarana'][4:6]
    else :
        tahun = col['kode_sarana'][3:5]
        
    return  tahun
data_sarana['tahun'] = data_sarana.apply(ambiltahun, axis=1)
data_sarana[data_sarana['jenis_sarana'] == 'Gerbong']
data_sarana['tahun'] = data_sarana['tahun'].astype('int64')
#fungsi untuk mengubah 2 digit tahun menjadi 4 digit
def func(row):
	if row['tahun'] <= 21:
		val = 2000 + row['tahun']
	else:
		val = 1900 + row['tahun']
	return val
# Tambahkan kolom baru
data_sarana['tahun_pembuatan'] = data_sarana.apply(func, axis=1)
data_sarana
import datetime
now = datetime.datetime.now().year
print(now)
#digunakan untuk menghitung umur rumus tahun sekarang - tahun pembuatan/dinas
data_sarana['umur'] = data_sarana['tahun_pembuatan'].apply(lambda x : datetime.datetime.now().year - x)
data_sarana
#membuat kategori range usia
def func_rangeusia(row):
	if row['umur'] <= 10:
		val = '<=10 th'
	elif (row['umur'] > 10 and row['umur'] <= 20):
		val ='11-20 th'
	elif (row['umur'] > 20 and row['umur'] <= 30):
		val ='21-30 th'
	else:
		val ='>30 th'
	return val
# Tambahkan kolom baru
data_sarana['range_usia'] = data_sarana.apply(func_rangeusia, axis=1)
data_sarana
data_sarana['pabrikan'] = data_sarana['pabrikan'].str.lower()
data_sarana[data_sarana['pabrikan'] == 'pt inka']
#membuat kategori range usia
def func_pabrikan(row):
	if row['pabrikan'] =='pt inka':
		val = 'ID'
	elif row['pabrikan'] =='':
		val ='ND'
	else:
		val ='LN'
	return val
# Tambahkan kolom baru
data_sarana['asal_pabrikan'] = data_sarana.apply(func_pabrikan, axis=1)
data_sarana
data_sarana[data_sarana['pabrikan'] == 'pt inka']
data_sarana.drop(columns =['tahun', 'pabrikan'], inplace=True)
data_sarana
data_sarana.to_csv('data_statistik_sarana.csv', sep=';')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13601756954612007, 'fraction_numerical': 0.04699853587115666, 'mean_word_length': 3.691620879120879, 'pattern_counts': {'":': 1, '<': 25, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 7, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '397537', 'license': 'MIT', 'n_tokens_mistral': 3179, 'n_tokens_neox': 2858, 'n_words': 524, 'path': 'Latihan/DataStatistik/DataSaranaMicrostrategy.ipynb', 'repo_name': 'cktheone/DQLab', 'size': '6830'}