#!/usr/bin/env python # coding: utf-8 # In[1]: import pandas as pd, pathlib get_ipython().run_line_magic('matplotlib', 'inline') # In[2]: data_path = pathlib.Path('../testdata/bmkg/data_jawa_barat_1980_2018.xlsx') # In[3]: raw_data_jabar = pd.read_excel(data_path, skiprows=6) raw_data_jabar.head() # In[4]: data_jabar = raw_data_jabar.iloc[:,:-2] data_jabar.head(10) # In[5]: data_jabar.info() # ## Ubah nama kolom, untuk lebih mudah digunakan # In[6]: nama_kolom_asli = data_jabar.columns.tolist() nama_kolom_asli # In[7]: 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') # In[8]: data_jabar.columns = nama_baru # In[9]: data_jabar.head() # ## Ubah tipe data # In[10]: data_jabar.info() # `id_stat` diubah menjadi `object`; `date` jadi `TimeStamp`; # In[11]: data_jabar.id_stat = data_jabar.id_stat.apply(str) data_jabar.date = pd.to_datetime(data_jabar.date, format='%d/%m/%Y') # ## Ambil data Per stasiun # In[12]: # cek jumlah stasiun data_jabar = data_jabar.sort_values(['id_stat','date']).reset_index(drop=True) # In[13]: data_jabar.head() # In[14]: # Cek jumlah stasiun yang ada berdasarkan id_stat data_jabar.id_stat.unique() # In[15]: # Ada 5 stasiun, lihat juga jumlah data yang dimiliki data_jabar.groupby('id_stat').count() # In[16]: # 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 # - 96751: Stasiun Meteorologi Citeko - `11934` hari # - 96753: Stasiun Klimatologi Bogor - `12330` hari # - 96783: Stasiun Geofisika Bandung - `13817` hari # - 96791: Stasiun Meteorologi Jatiwangi - `13807` hari # - 96793: Pos Meteorologi Penggung - `488` hari # # __catatan: angka tersebut masih memiliki nilai `9999` dan `8888`__ # In[17]: 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() # In[18]: # 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() # In[19]: # Pada tanggal berapa saja datanya memiliki nilai 8888 atau 9999 mask.index # In[20]: # Coba plot curah hujan dengan mengabaikan nilai 8888/9999 pada durasi tertentu stat_citeko_ch[~mask].plot(figsize=(15,10)) # In[21]: # Periode tertentu ch_citeko_00_05 = stat_citeko_ch[~mask].loc['20000101':'20051231'] ch_citeko_00_05.plot(figsize=(15,10)) # In[22]: ch_citeko_00_05.plot.hist(figsize=(15,10), bins=50) # In[23]: stat_citeko_ch[~mask & (stat_citeko_ch > 0)].plot.hist(figsize=(15,10), bins=50) # In[ ]: # In[ ]: