#!/usr/bin/env python # coding: utf-8 # # eksplorasi metadata bmkg # # _notebook_ ini akan digunakan sebagai acuan pengembangan module `bmkgkit`, berupa pembacaan excel dari bmkg online. # Berhubung untuk data metadata stasiun sudah disertakan dalam `.bmkgkit`, akan langsung dipakai. # In[1]: import numpy as np, pandas as pd, pathlib, matplotlib.pyplot as plt, seaborn as sns # In[2]: get_ipython().run_line_magic('load_ext', 'autoreload') get_ipython().run_line_magic('autoreload', '2') get_ipython().run_line_magic('aimport', 'hidrokit') # In[3]: from hidrokit.bmkgkit import metadata_station # In[4]: metadata_station.head() # rasanya tidak perlu digunakan kolom `ketinggian.mdpl soil exposure land.use time.zone` # In[5]: metadata_station = metadata_station.drop(['ketinggian_mdpl', 'soil', 'exposure', 'land_use', 'time_zone'], axis=1) # In[6]: metadata_station.head() # Mari kita cek, data yang ada di bmkgonline # In[7]: print(metadata_station.info()) # In[8]: print('Jumlah baris yang terdapat dalam metadata: ', metadata_station.shape[0]) # In[9]: print('Jumlah stasiun yang terdata di bmkg (berdasarkan id): ', metadata_station.id_stat.nunique()) print('Jumlah stasiun yang terdata di bmkg (berdasarkan nama): ', metadata_station.name_stat.nunique()) # Angkanya berbeda, yang seharusnya sama. Dugaan saya adalah, ada stasiun yang tidak memiliki `id`. Atau ada beberapa stasiun yang memiliki `id` serupa (mungkin kah itu?). Tidak mungkin ada nilai `null` / `nan`, karena dari info, diketahui bahwa semua kolom merupakan `non-null`. # In[10]: print('Check id stasiun yang sama') print(metadata_station.id_stat.value_counts(ascending=False).head(5)) id_stasiun_sama = metadata_station.id_stat.value_counts(ascending=False).iloc[:3].index.tolist() # Ternyata ada 3 `id` stasiun yang menyimpan dua informasi stasiun. Stasiun tersebut # In[11]: stasiun_sama_id = metadata_station.loc[metadata_station['id_stat'].isin(id_stasiun_sama),:] stasiun_sama_id # In[12]: def sama_atau_tidak(posisi1): posisi2 = posisi1+1 mask = (~(stasiun_sama_id.iloc[posisi1] == stasiun_sama_id.iloc[posisi2])) id_stat = stasiun_sama_id.iloc[posisi1,0] total_yang_tidak_sama = mask.sum() if total_yang_tidak_sama: return (f'stasiun {id_stat} sama dengan stasiun berikutnya? \n\t' f'tidak, pada kolom {(mask[mask == True]).index.tolist()}') else: return (f'stasiun {id_stat} sama dengan stasiun berikutnya? \n\t' f'iya') print(sama_atau_tidak(0)) print(sama_atau_tidak(2)) print(sama_atau_tidak(4)) # Stasiun yang memiliki informasi yang sama akan dihapus dalam tabel # In[13]: metadata_station = metadata_station.drop_duplicates(subset='id_stat', keep='first').reset_index(drop=True) # In[14]: metadata_station.head(5) # Bagaimana dengan kolom `nama`? # In[15]: nama_stasiun_sama = metadata_station.name_stat.value_counts() print(nama_stasiun_sama.head(5),'\n') print('25 stasiun yang muncul lebih dari satu kali: \n\t', ', '.join(nama_stasiun_sama[nama_stasiun_sama != 1].index.tolist()[:25])) print() print('Jumlah nama yang memiliki id stasiun lebih dari 1: \n\t', (nama_stasiun_sama != 1).sum()) # Ternyata ada beberapa stasiun yang memiliki nama yang sama, meski memiliki `id` yang berbeda. Karena `id` merupakan identitas utama dari stasiun, maka untuk `nama` yang sama diabaikan. # Data akan disimpan dalam `.csv` dengan nama `clean_metadata_station` # In[16]: metadata_station.to_csv('out/clean_metadata_station.csv', index=False) # In[17]: metadata_station.groupby('type_stat').count() # Dari perintah diatas dapat diketahui jumlah tipe stasiun di Indonesia berdasarkan data BMKG: # - 6993 stasiun Pos Hujan Kerjasama # - 179 stasiun UPT # - 853 stasiun aws # ## Bedah Jawa Barat # --- # Pada pembedahan berikutnya akan lebih fokus dengan lokasi Jawa Barat. # In[18]: stasiun_jabar = metadata_station[metadata_station.provinsi == 'Jawa Barat'] print('Banyaknya stasiun di Jawa Barat:', stasiun_jabar.shape[0]) stasiun_jabar.head() # Diketahui bahwa ada __884__ stasiun yang berlokasikan di Jawa Barat # In[19]: stasiun_jabar.kabupaten.value_counts() # Dari informasi diatas diketahui bahwa Kabupaten Bogor memiliki stasiun terbanyak dibandingkan daerah kabupaten lainnya. # In[20]: stasiun_jabar[stasiun_jabar.kabupaten == 'Kota Bandung'] # In[21]: stasiun_jabar[['id_stat', 'lintang_derajat', 'bujur_derajat']] # In[ ]: