import pandas as pd, pathlib
%matplotlib inline
data_path = pathlib.Path('../testdata/bmkg/data_jawa_barat_1980_2018.xlsx')
raw_data_jabar = pd.read_excel(data_path, skiprows=6)
raw_data_jabar.head()
data_jabar = raw_data_jabar.iloc[:,:-2]
data_jabar.head(10)
data_jabar.info()
nama_kolom_asli = data_jabar.columns.tolist()
nama_kolom_asli
nama_baru = [
'name_stat', 'id_stat', 'date', 'suhu_min', 'suhu_max', 'suhu_mean',
'lembab_mean', 'curah_hujan', 'lama_sinar', 'cepat_angin_mean',
'arah_angin_mode', 'cepat_angin_max', 'arah_cepat_angin_max'
]
# Simpan informasi satuan
satuan_kolom = dict(suhu_min='Celcius', suhu_max='Celcius', suhu_mean='Celcius',
lembab_mean='%', curah_hujan='mm', lama_sinar='jam', cepat_angin_mean='knot',
arah_angin_mode='deg', cepat_angin_max='knot', arah_cepat_angin_max='deg')
data_jabar.columns = nama_baru
data_jabar.head()
data_jabar.info()
id_stat
diubah menjadi object
; date
jadi TimeStamp
;
data_jabar.id_stat = data_jabar.id_stat.apply(str)
data_jabar.date = pd.to_datetime(data_jabar.date, format='%d/%m/%Y')
# cek jumlah stasiun
data_jabar = data_jabar.sort_values(['id_stat','date']).reset_index(drop=True)
data_jabar.head()
# Cek jumlah stasiun yang ada berdasarkan id_stat
data_jabar.id_stat.unique()
# Ada 5 stasiun, lihat juga jumlah data yang dimiliki
data_jabar.groupby('id_stat').count()
# buat dictionary id dan nama stasiun (hal ini bisa menggunakan database dalam metadata_station)
info_stat_jabar = dict()
for i, j in zip(data_jabar.id_stat.unique().tolist(), data_jabar.name_stat.unique().tolist()):
info_stat_jabar[i] = j
info_stat_jabar
Diketahui bahwa untuk
11934
hari12330
hari13817
hari13807
hari488
haricatatan: angka tersebut masih memiliki nilai 9999
dan 8888
stat_citeko = data_jabar[data_jabar.id_stat == '96751'].drop(['name_stat', 'id_stat'], axis=1).copy()
stat_citeko = stat_citeko.set_index('date')
stat_citeko.head()
# Hitung jumlah data curah hujan yang memiliki nilai 9999 dan 8888
stat_citeko_ch = stat_citeko.curah_hujan
mask = (stat_citeko_ch == 9999) | (stat_citeko_ch == 8888)
mask.sum()
# Pada tanggal berapa saja datanya memiliki nilai 8888 atau 9999
mask.index
# Coba plot curah hujan dengan mengabaikan nilai 8888/9999 pada durasi tertentu
stat_citeko_ch[~mask].plot(figsize=(15,10))
# Periode tertentu
ch_citeko_00_05 = stat_citeko_ch[~mask].loc['20000101':'20051231']
ch_citeko_00_05.plot(figsize=(15,10))
ch_citeko_00_05.plot.hist(figsize=(15,10), bins=50)
stat_citeko_ch[~mask & (stat_citeko_ch > 0)].plot.hist(figsize=(15,10), bins=50)