Menurut Azizah et al. (2022), bencana yang terjadi di Indonesia didominasi oleh bencana hidrometeorologi. Bencana hidrometeorologi ini merupakan bencana yang disebabkan faktor iklim, seperti curah hujan ekstrem. Curah hujan ekstrem disinyalir terjadi karena adanya faktor perubahan iklim yang terus terjadi sepanjang tahun. Oleh karena itu, topik ini menjadi menarik untuk dibahas terkait kondisi cuaca dan bencana alam yang terjadi di Kota/Kab. Bogor dan tren perubahan iklim yang terjadi di daerah ini.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats
Pada project kali ini, saya memiliki 3 dataset berbeda sesuai dengan objektif yang telah ditentukan pada bagian berikutnya.
Untuk lebih memahami kondisi cuaca di Bogor selama periode Desember 2022 hingga Februari 2023, akan digunakan dataset unsur iklim yang diperoleh melalui situs dataonline.bmkg.go.id. Data ini merupakan data yang diperoleh melalui pengamatan atau observasi langsung di Stasiun Klimatologi Jawa Barat yang terletak di Kecamatan Bogor Barat, Kota Bogor. Dataset ini mencakup 11 kolom/fitur dengan 90 baris. Variabel-variabel yang terdapat dalam dataset ini, meliputi suhu minimum, suhu maksimum, suhu rata-rata, kelembapan rata-rata, curah hujan, lama penyinaran matahari, kecepatan angin maksimum, arah angin saat kecepatan angin maksimum, kecepatan angin rata-rata, dan arah angin terbanyak.
Untuk memudahkan, berikut penjelasan tiap kolom beserta variabel yang dimaksud.
Agar lebih mengenal dataset ini, berikut cuplikan dataset yang digunakan. Dataset ini disimpan dengan nama iklim_desja.
iklim_desja = pd.read_excel('DJF22-23.xlsx', parse_dates=['Tanggal'])
## Tanggal Tn Tx Tavg RH_avg RR ss ff_x ddd_x ff_avg ddd_car
## 0 2022-12-01 22.0 NaN 26.3 85.0 NaN 4.4 7.0 77.0 1.0 C
## 1 2022-12-02 21.8 NaN 25.8 86.0 0.6 5.9 3.0 180.0 1.0 C
## 2 2022-12-03 21.6 32.8 26.7 81.0 NaN 1.8 3.0 340.0 1.0 C
## 3 2022-12-04 21.6 31.6 25.9 86.0 1.3 6.2 5.0 180.0 1.0 C
## 4 2022-12-05 21.0 31.8 25.7 88.0 35.5 5.0 4.0 322.0 0.0 C
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 90 entries, 0 to 89
## Data columns (total 11 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 90 non-null datetime64[ns]
## 1 Tn 85 non-null float64
## 2 Tx 85 non-null float64
## 3 Tavg 85 non-null float64
## 4 RH_avg 85 non-null float64
## 5 RR 73 non-null float64
## 6 ss 89 non-null float64
## 7 ff_x 89 non-null float64
## 8 ddd_x 89 non-null float64
## 9 ff_avg 89 non-null float64
## 10 ddd_car 89 non-null object
## dtypes: datetime64[ns](1), float64(9), object(1)
## memory usage: 7.9+ KB
## None
Untuk mengetahui kejadian bencana alam yang terjadi di wilayah Bogor, maka diperlukan dataset bencana dan dataset ini diperoleh dari situs gis.bnpb.go.id. Dataset ini mencakup 13 kolom dengan 39 baris data. Detail kolom dalam dataset ini, antara lain:
Berikut cuplikan dataset bencana di Kota/Kab Bogor.
bencana_desja = pd.read_excel('Data Bencana Bogor DJF22-23.xlsx', parse_dates=['Tanggal'])
## Tanggal Kejadian ... RumahTerendam FasumRusak
## 0 2022-12-02 PUTING BELIUNG ... NaN 0
## 1 2022-12-06 TANAH LONGSOR ... NaN 0
## 2 2022-12-07 PUTING BELIUNG ... NaN 0
## 3 2022-12-08 PUTING BELIUNG ... NaN 0
## 4 2022-12-10 PUTING BELIUNG ... NaN 0
##
## [5 rows x 13 columns]
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 39 entries, 0 to 38
## Data columns (total 13 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 39 non-null datetime64[ns]
## 1 Kejadian 39 non-null object
## 2 Lokasi 39 non-null object
## 3 Kabupaten 39 non-null object
## 4 Provinsi 39 non-null object
## 5 Kronologi_Dokumentasi 39 non-null object
## 6 Penyebab 39 non-null object
## 7 Meninggal 0 non-null float64
## 8 Hilang 0 non-null float64
## 9 Terluka 2 non-null float64
## 10 RumahRusak 39 non-null int64
## 11 RumahTerendam 0 non-null float64
## 12 FasumRusak 39 non-null int64
## dtypes: datetime64[ns](1), float64(4), int64(2), object(6)
## memory usage: 4.1+ KB
## None
Untuk lebih memahami kondisi cuaca di Bogor selama periode Desember 2022 hingga Februari 2023, akan digunakan dataset unsur iklim yang diperoleh melalui situs dataonline.bmkg.go.id. Data ini merupakan data yang diperoleh melalui pengamatan atau observasi langsung di Stasiun Klimatologi Jawa Barat yang terletak di Kecamatan Bogor Barat, Kota Bogor. Dataset ini mencakup 4 kolom dan 14245 baris yang merepresentasikan jumlah hari selama 39 tahun. Kolom yang terdapat dalam dataset ini, meliputi:
Berikut cuplikan dari dataset yang ketiga.
suhu_bogor = pd.read_excel('laporan_iklim_harian84-22.xlsx', parse_dates=['Tanggal'])
## Tanggal Tn Tx Tavg
## 0 1984-01-01 21.0 28.6 24.4
## 1 1984-01-02 21.0 29.0 24.0
## 2 1984-01-03 22.0 29.2 25.6
## 3 1984-01-04 22.0 27.3 24.3
## 4 1984-01-05 22.0 26.6 25.1
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 14245 entries, 0 to 14244
## Data columns (total 4 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 14245 non-null datetime64[ns]
## 1 Tn 13916 non-null float64
## 2 Tx 13986 non-null float64
## 3 Tavg 14044 non-null float64
## dtypes: datetime64[ns](1), float64(3)
## memory usage: 445.3 KB
## None
Berdasarkan dataset yang digunakan, dirumuskan beberapa objektif, antara lain.
Analisis variabel-variabel yang berkaitan dengan kejadian bencana puting beliung dan tanah longsor di Bogor dan efeknya terhadap kerusakan rumah atau fasilitas umum.
Analisis variabel suhu sebagai salah satu faktor perubahan iklim di Bogor.
Dari dataset ini, setiap kolom telah memiliki format yang sesuai sehingga tidak perlu ada yang diubah. Namun, kolom ‘ddd_car’ dapat diubah menjadi ‘category’.
iklim_desja['ddd_car'] = iklim_desja['ddd_car'].astype('category')
iklim_desja.duplicated().sum()
## 0
#Cek Jumlah Data Kosong
iklim_desja.isna().sum()
## Tanggal 0
## Tn 5
## Tx 5
## Tavg 5
## RH_avg 5
## RR 17
## ss 1
## ff_x 1
## ddd_x 1
## ff_avg 1
## ddd_car 1
## dtype: int64
Cek sebaran data.
Setelah mengetahui sebaran, kita dapat mengatasi missing value dalam dataset ini. Namun, data curah hujan tidak dapt diisi
# Dengan Rata-Rata
iklim_desja['Tn'] = iklim_desja['Tn'].fillna(iklim_desja['Tn'].mean())
iklim_desja['Tx'] = iklim_desja['Tx'].fillna(iklim_desja['Tx'].mean())
iklim_desja['Tavg'] = iklim_desja['Tavg'].fillna(iklim_desja['Tavg'].mean())
# Dengan median
iklim_desja['RH_avg'] = iklim_desja['RH_avg'].fillna(iklim_desja['RH_avg'].median())
iklim_desja['ss'] = iklim_desja['ss'].fillna(iklim_desja['ss'].median())
iklim_desja['ff_x'] = iklim_desja['ff_x'].fillna(iklim_desja['ff_x'].median())
iklim_desja['ff_avg'] = iklim_desja['ff_avg'].fillna(iklim_desja['ff_avg'].median())
iklim_desja['ddd_x'] = iklim_desja['ddd_x'].fillna(iklim_desja['ddd_x'].median())
# Cek Data Kosong
iklim_desja.info()
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 90 entries, 0 to 89
## Data columns (total 11 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 90 non-null datetime64[ns]
## 1 Tn 90 non-null float64
## 2 Tx 90 non-null float64
## 3 Tavg 90 non-null float64
## 4 RH_avg 90 non-null float64
## 5 RR 73 non-null float64
## 6 ss 90 non-null float64
## 7 ff_x 90 non-null float64
## 8 ddd_x 90 non-null float64
## 9 ff_avg 90 non-null float64
## 10 ddd_car 89 non-null category
## dtypes: category(1), datetime64[ns](1), float64(9)
## memory usage: 7.4 KB
kejadian akan diubah menjadi kategori, serta mengubah kolom dengan tipe data ‘float’ menjadi ‘integer’.
#ubah format kategori
bencana_desja['Kejadian']=bencana_desja['Kejadian'].astype('category')
#ubah format float menjadi int
bencana_desja[['Meninggal','Hilang','Terluka','RumahRusak','RumahTerendam','FasumRusak']]=bencana_desja[['Meninggal','Hilang','Terluka','RumahRusak','RumahTerendam','FasumRusak']].astype('Int64')
bencana_desja.duplicated().sum()
## 0
Untuk dataset ini, tidak ada missing value yang perlu diatasi.
Dari dataset ini, setiap kolom telah memiliki format yang sesuai sehingga tidak ada format yang perlu diubah.
suhu_bogor.duplicated().sum()
## 0
Hitung jumlah data kosong
suhu_bogor.isna().sum()
## Tanggal 0
## Tn 329
## Tx 259
## Tavg 201
## dtype: int64
Cek sebaran data
Penanganan missing value.
suhu_bogor['Tn'] = suhu_bogor['Tn'].fillna(suhu_bogor['Tn'].mean())
suhu_bogor['Tx'] = suhu_bogor['Tx'].fillna(suhu_bogor['Tx'].median())
suhu_bogor['Tavg'] = suhu_bogor['Tavg'].fillna(suhu_bogor['Tavg'].mean())
# Cek Data Kosong
suhu_bogor.info()
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 14245 entries, 0 to 14244
## Data columns (total 4 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 14245 non-null datetime64[ns]
## 1 Tn 14245 non-null float64
## 2 Tx 14245 non-null float64
## 3 Tavg 14245 non-null float64
## dtypes: datetime64[ns](1), float64(3)
## memory usage: 445.3 KB
Sebelum itu, kita akan melihat summary dari setiap variabel.
## Tn Tx Tavg ... ff_x ddd_x ff_avg
## count 90.000000 90.000000 90.000000 ... 90.000000 90.000000 90.000000
## mean 21.542353 30.225882 25.534118 ... 4.722222 253.222222 1.000000
## std 0.712075 1.700241 0.888826 ... 2.341745 81.291234 0.580585
## min 20.000000 26.700000 23.300000 ... 2.000000 20.000000 0.000000
## 25% 21.000000 29.000000 25.000000 ... 3.000000 232.500000 1.000000
## 50% 21.542353 30.200000 25.600000 ... 4.000000 270.000000 1.000000
## 75% 22.000000 31.600000 26.000000 ... 5.000000 318.750000 1.000000
## max 23.500000 33.800000 28.200000 ... 15.000000 350.000000 2.000000
##
## [8 rows x 9 columns]
Selama periode Desember 2022 hingga Februari 2023, kita dapat menemukan informasi-informasi penting, antara lain:
Selain ini, kita juga bisa melihat rekapitulasi per bulannya.
## RH_avg RR
## max min sum mean max min sum mean
## year month
## 2022 12 93.0 74.0 2662.0 85.870968 35.5 0.0 226.0 9.416667
## 2023 1 93.0 80.0 2684.0 86.580645 41.3 0.0 211.1 8.444000
## 2 94.0 73.0 2415.0 86.250000 51.6 0.0 258.3 10.762500
Dari pivot tabel di atas, dapat diketahui curah hujan bulanan tertinggi tercatat pada bulan Februari 2023 sebesar 258.3 mm, sedangkan pada bulan Desember 2022 dan Januari 2023 sebesar 226 mm dan 211.1 mm. Kemudian, bulan Januari 2023 memiliki kelembapan yang tinggi dengan rentang nilai antara 80-93% selama satu bulan penuh.
## Terluka RumahRusak FasumRusak
## sum sum sum
## year month Kejadian
## 2022 1 PUTING BELIUNG 0 0 0
## TANAH LONGSOR 0 0 0
## 2 PUTING BELIUNG 0 0 0
## TANAH LONGSOR 0 0 0
## 12 PUTING BELIUNG 0 20 1
## TANAH LONGSOR 0 5 1
## 2023 1 PUTING BELIUNG 1 6 0
## TANAH LONGSOR 1 4 0
## 2 PUTING BELIUNG 0 42 1
## TANAH LONGSOR 0 18 0
## 12 PUTING BELIUNG 0 0 0
## TANAH LONGSOR 0 0 0
Dari pivot tersebut, dapat diketahui bahwa bencana Puting Beling yang terjadi di Bogor mengakibatkan banyak lebih kerusakan setiap bulannya dibandingkan dengan kerusakan akibat tanah longsor. Kerusakan terbanyak terjadi pada bulan Februari 2023 dengan 42 rumah rusak akibat puting beliung dan 18 rumah rusak akibat tanah longsor. Korban jiwa hanya tercatat ada pada bulan Januari 2023 akibat puting beliung maupun tanah longsor. Padahal, jumlah kerusakan di bulan ini jauh lebih sedikit dibandingkan pada bulan sebelum dan sesudahnya.
## Tn Tx Tavg
## count 14245.000000 14245.000000 14245.000000
## mean 22.389041 31.371730 25.755184
## std 1.100041 1.620926 0.866584
## min 9.000000 22.100000 20.100000
## 25% 22.000000 30.600000 25.200000
## 50% 22.389041 31.600000 25.800000
## 75% 23.000000 32.400000 26.300000
## max 32.000000 36.600000 29.400000
Dari hasil di atas, dapat kita ketahui bahwa simpangan baku suhu minimum, suhu maksimum, dan suhu udara rata-rata sebesar 1.11°C, 1.63°C, dan 0.87°C. Suhu minimum dan suhu maksimum di Bogor pun tercatat memiliki range nilai yang tinggi antara 9-32°C dan 22.1-36.6°C dalam kurun waktu 39 tahun. Namun, angka ini perlu diperhatikan secara hati-hati, sebab bila diplotkan secara time series akan menunjukkan hasil seperti ini.
Dari grafik tersebut, terlihat bahwa suhu minimum sebesar 9°C merupakan bentuk anomali yang mungkin saja terjadi akibat pengaruh fenomena ENSO pada tahun tersebut atau adanya faktor kesalahan pengamatan oleh observer di lapangan.
Sebelum melakukan analisis peluang, data 1 akan di-merge terlebih dahulu dengan data 2 berdasarkan kolom Tanggal, month, dan year. Data hasil merge akan dinamakan sebagai data12.
data12 = pd.merge(iklim_desja, bencana_desja,on=['Tanggal','month','year'],how='left')
Karena kolom data meninggal, hilang, dan RumahTerpendam memiliki nilai nol semua, maka tidak akan digunakan sehingga akan dihapus saja.
data12.drop(data12[['Meninggal','Hilang','RumahTerendam']],axis=1,inplace=True)
## <class 'pandas.core.frame.DataFrame'>
## Int64Index: 101 entries, 0 to 100
## Data columns (total 22 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Tanggal 101 non-null datetime64[ns]
## 1 Tn 101 non-null float64
## 2 Tx 101 non-null float64
## 3 Tavg 101 non-null float64
## 4 RH_avg 101 non-null float64
## 5 RR 82 non-null float64
## 6 ss 101 non-null float64
## 7 ff_x 101 non-null float64
## 8 ddd_x 101 non-null float64
## 9 ff_avg 101 non-null float64
## 10 ddd_car 100 non-null category
## 11 month 101 non-null int64
## 12 year 101 non-null int64
## 13 Kejadian 39 non-null category
## 14 Lokasi 39 non-null object
## 15 Kabupaten 39 non-null object
## 16 Provinsi 39 non-null object
## 17 Kronologi_Dokumentasi 39 non-null object
## 18 Penyebab 39 non-null object
## 19 Terluka 2 non-null Int64
## 20 RumahRusak 39 non-null Int64
## 21 FasumRusak 39 non-null Int64
## dtypes: Int64(3), category(2), datetime64[ns](1), float64(9), int64(2), object(5)
## memory usage: 17.3+ KB
Pada analisis peluang diskrit ini, ada beberapa analisis yang dapat kita cari tahu. Pertama, bagaimana peluang kejadian tidak terjadi hujan ketika diketahui terjadi puting beliung?
# P(RR=0 | Terjadi Puting Beliung)
pb = data12[data12['Kejadian']=='PUTING BELIUNG']
na = len(pb[pb['RR']==0])
ns = len(pb)
na/ns
## 0.037037037037037035
Hasil ini mengindikasikan bahwa ada kemungkinan kejadian puting beliung sebesar selama 3.7 hari dari 100 hari di Bogor dan peristiwa ini terjadi saat sedang tidak hujan.
Kemudian, bagaimana peluang adanya kerusakan rumah atau fasilitas umum jika diketahui terjadi puting beliung?
ns = len(pb)
# Peluang ada rumah rusak, fasilitas umum tidak rusak
na1 = len(pb[(pb['RumahRusak']!=0) & (pb['FasumRusak']==0)])
pa1 = na1/ns
# Peluang ada fasilitas umum rusak, rumah tidak rusak
na2 = len(pb[(pb['RumahRusak']==0) & (pb['FasumRusak']!=0)])
pa2 = na2/ns
# Peluang ada kerusakan pada rumah dan fasilitas umum
na3 = len(pb[(pb['RumahRusak']!=0) & (pb['FasumRusak']!=0)])
pa3 = na3/ns
# Peluang ada kerusakan pada rumah atau fasilitas umum
pa1 + pa2 + pa3
## 0.7777777777777778
Dapat diketahui, bahwa peluang adanya kerusakan pada rumah atau fasilitas umum jika diketahui terjadi puting beliung cukuplah tinggi sekitar 77.78%. Oleh karena itu, perlu ada upaya mitigasi kepada warga Bogor dalam menghadapi peristiwa puting beliung yang dapat terjadi kapan saja.
Pada poin kedua ini, kita akan mencari tahu juga, bagaimana peluang kejadian tidak terjadi hujan ketika diketahui terjadi tanah longsor?
# P(RR=0 | Terjadi Puting Beliung)
tlo = data12[data12['Kejadian']=='TANAH LONGSOR']
na = len(tlo[tlo['RR']==0])
ns = len(tlo)
na/ns
## 0.08333333333333333
Hasil ini menunjukkan bahwa terdapat 8.3 dari 100 kejadian tidak terjadi hujan ketika tanah longsor terjadi.
Kemudian, bagaimana peluang adanya kerusakan rumah atau fasilitas umum jika diketahui terjadi tanah longsor?
ns = len(tlo)
# Peluang ada rumah rusak, fasilitas umum tidak rusak
na1 = len(tlo[(tlo['RumahRusak']!=0) & (tlo['FasumRusak']==0)])
pa1 = na1/ns
# Peluang ada fasilitas umum rusak, rumah tidak rusak
na2 = len(tlo[(tlo['RumahRusak']==0) & (tlo['FasumRusak']!=0)])
pa2 = na2/ns
# Peluang ada kerusakan pada rumah dan fasilitas umum
na3 = len(tlo[(tlo['RumahRusak']!=0) & (tlo['FasumRusak']!=0)])
pa3 = na3/ns
# Peluang ada kerusakan pada rumah atau fasilitas umum
pa1 + pa2 + pa3
## 0.6666666666666667
Dari hasil ini, diketahui peluang adanya kerusakan pada rumah atau fasilitas umum jika diketahui terjadi tanah longsor cukup tinggi, yaitu sekitar 66.67%. Oleh karena itu, perlu ada pertimbangan yang baik ketika membangun suatu rumah atau gedung di lahan miring karena adanya risiko longsor di wilayah itu. Sebab, kerugian yang akan dialami jika longsor benar terjadi cukup besar, dan peluang terjadinya kerusakan akibat longsor pun besar di atas 50%.
Pertama, kita bisa melihat peluang kejadian puting beliung selama periode Desember 2022 - Februari 2023 di Bogor.
na = len(data12[data12['Kejadian']=='PUTING BELIUNG'])
ns = len(data12['Tanggal'])
na/ns
## 0.26732673267326734
Pada menu ini, selanjutnya kita akan mengidentifikasi dan mengalisis variabel-variabel penyebab bencana puting beliung. Sebelum itu, kita akan melihat kondisi ketika bencana ini terjadi.
## Tanggal Tn Tx ... Terluka RumahRusak FasumRusak
## 1 2022-12-02 21.8 30.225882 ... <NA> 1 0
## 6 2022-12-07 20.4 30.800000 ... <NA> 1 0
## 7 2022-12-08 23.5 31.600000 ... <NA> 2 0
## 9 2022-12-10 20.0 31.500000 ... <NA> 7 0
## 15 2022-12-16 23.3 32.600000 ... <NA> 0 0
##
## [5 rows x 17 columns]
Analisis peluang kejadian puting beliung terhadap kondisi hujan
Menurut Badan Meteorologi, Klimatologi, dan Geofisika (BMKG), hujan diklasifikasi berdasarkan intensitas curah hujannya, antara lain hujan ringan (0.5-20 mm/hari), hujan sedang (20-50 mm/hari), hujan lebat (50-100 mm/hari), dan hujan sangat lebat (100-150 mm/hari).
Bagaimana peluang kejadian puting beliung jika diketahui intensitasnya kurang dari hujan lebat?
#Peluang terjadi puting beliung saat tidak ada hujan + Peluang terjadi puting beliung saat terjadi hujan ringan + Peluang terjadi puting beliung saat terjadi hujan sedang
#P(CH < 0.5) + P(0.5 <= CH < 20) + P(20 <= CH < 50) = P(CH < 50)
ttl = data12[data12['RR']<50] #tidak hujan lebat
na = len(ttl[ttl['Kejadian']=='PUTING BELIUNG'])
ns = len(ttl)
na/ns
## 0.26582278481012656
Namun, bagaimana peluang terjadi puting beliung jika diketahui intensitas hujan tinggi (setidaknya hujan lebat)?
#Peluang terjadi puting beliung saat CH >= 50 mm
hl = data12[data12['RR'] >= 50] #hujan lebat
na = len(hl[hl['Kejadian']=='PUTING BELIUNG'])
ns = len(hl)
na/ns
## 1.0
Dari hasil di atas, dapat kita ketahui bahwa pada periode Desember 2022 hingga Februari 2023, kejadian hujan lebat dan tingkatan di atasnya selalu diikuti oleh peristiwa puting beliung.
Tanah longsor merupakan salah satu bencana yang sering terjadi di Bogor sebagaimana dalam eksplorasi yang pernah saya lakukan di link berikut https://medium.com/@adisuwarno/eksplorasi-kejadian-longsor-di-kabupaten-bogor-71a8dac1f13b
Sebelum berlanjut, kita akan melihat proporsi kejadian tanah longsor selama periode Desember 2022 hingga Februari 2023.
na = len(data12[data12['Kejadian']=='TANAH LONGSOR'])
ns = len(data12)
na/ns
## 0.1188118811881188
Angka tersebut, bila dibulatkan memiliki proporsi sebesar 12%. Artinya, di antara 100 kejadian, terdapat 12 peristiwa tanah longsor terjadi di Bogor. Tentunya, angka ini tidak dapat dibilang sedikit dan harus diwaspadai terus ke depannya.
Umumnya, tanah longsor akibat faktor hidrometeorologi ini sering terjadi ketika kondisi hujan lebat. Sebelum itu, mari kita lihat peluang kejadian tanah longsor jika diketahui kondisi hujan lebih rendah dari hujan lebat?
#Peluang terjadi tanah longsor saat tidak ada hujan + Peluang terjadi tanah longsor saat terjadi hujan ringan + Peluang terjadi tanah longsor saat terjadi hujan sedang
#P(CH < 0.5) + P(0.5 <= CH < 20) + P(20 <= CH < 50) = P(CH < 50)
na = len(ttl[ttl['Kejadian']=='TANAH LONGSOR'])
ns = len(ttl)
na/ns
## 0.11392405063291139
Peluang kejadian saat kondisi kurang dari hujan lebat ternyata tidak jauh berbeda dengan kondisi secara umum dengan peluang kejadian sebesar 11.39%. Lalu, bagaimana peluang kejadian tanah longsor jika diketahui setidaknya terjadi hujan lebat?
na = len(hl[hl['Kejadian']=='TANAH LONGSOR'])
ns = len(hl)
na/ns
## 0.0
Ternyata, cenderung tidak ada kejadian tanah longsor dalam periode Desember 2022 - Februari 2023 ketika setidaknya terjadi hujan lebat. Namun, hal ini tidak mengindikasikan bahwa hujan lebat tidak menyebabkan tanah longsor, karena bisa saja tanah longsor terjadi setelah hujan lebat dan kejadian itu terjadi di hari berikutnya atau karena hujan yang terjadi secara berturut-turut dalam kurun waktu tertentu.
Sebelum berlanjut, kita akan menghapus kolom ‘Terluka’ karena hanya berisi dua data saja. Kolom ‘Tn’ dan ‘Tx’ juga akan dihapus dan cukup diwakilkan dengan kolom ‘Tavg’. Kolom ‘Tanggal’, ‘month’, ‘year’ juga akan dihapus. Kolom ‘FasumRusak’ yang hanya memiliki nilai 0 atau 1 juga akan dihapus.
data12.drop(data12[['Terluka','Tn','Tx','month','year','Tanggal','FasumRusak']], axis=1, inplace=True)
Selanjutnya, kita dapat menggabungkan pairplot dan heatmap untuk bisa melihat besaran korelasi dan pola plotnya secara bersamaan.
## <Axes:>
## []
## []
Dari grafik gabungan matriks plot dan heat map di atas, dapat kita ketahui beberapa hal, antara lain:
Pada uji hipotesis ini, kita akan menguji ada atau tidaknya perubahan iklim di Bogor dengan melihat unsur suhu dan diuji dengan t-student. Dalam uji T ini, data suhu_bogor akan dikelompokkan menjadi 2 kelompok. Kelompok 1 merupakan suhu pada 30 tahun terakhir, sedangan kelompok 2 berisi suhu pada 30 tahun pertama sejak tahun 1984. Selain faktor keterbatasan data, pemilihan 30 tahun ini dianggap telah merepresentasikan kondisi klimatologi suatu wilayah (Prasetyo et al. 2021).
data_tahunan = suhu_bogor[['Tavg','year']].groupby('year').agg('mean')
# Pengelompokkan
kelsuhu1 = data_tahunan[len(data_tahunan)-30:len(data_tahunan)]
kelsuhu2 = data_tahunan[0:30]
Dengan data ini, kita memiliki hipotesisi sebagai berikut.
H0 : µ1 = µ2 #hipotesis nol
H1 : µ1 ≠ µ2 #hipotesis alternatif
dengan µ1 merepresentasikan rata-rata suhu kelompok 1 dan µ2 merepresentasikan rata-rata suhu kelompok 2. Adapun perhitungan statistik uji T akan ditunjukkan sebagai berikut dengan bantuan library scipy dan memiliki taraf nyata alpha 0.05 dengan kepercayaan sebesar 95%.
#ragam dianggap sama
stats.ttest_ind(
a = kelsuhu1,
b = kelsuhu2,
equal_var=True,
alternative='two-sided')
## Ttest_indResult(statistic=array([3.07688622]), pvalue=array([0.00319045]))
#ragam dianggap tidak sama
stats.ttest_ind(
a = kelsuhu1,
b = kelsuhu2,
equal_var=False,
alternative='two-sided')
## Ttest_indResult(statistic=array([3.07688622]), pvalue=array([0.003193]))
Dari hasil di atas, baik dengan ragam dianggap sama atau tidak, menghasilkan nilai uji T statistik sebesar 3.0769 dan p-value sebesar 0.0032. Nilai p-value kurang dari 0.05 menunjukkan bahwa terdapat perbedaan nilai yang signifikan antara suhu udara pada kelompok 1 dan kelompok 2 sehingga dapat diperoleh bahwa tolak H0.
Selain dengan uji statistik, kita pun dapat melihat tren perubahan suhu dari tahun ke tahun.
Peristiwa bencana, seperti puting beliung dan tanah longsor dipengaruhi oleh faktor-faktor iklim, seperti curah hujan. Dari analisis dengan sampel yang ada, diketahui 100% pasti terjadi puting beliung dengan setidaknya pada saat itu terjadi hujan lebat. Sementara pada kondisi hujan lebat ke atas, tidak tercatat terjadi peristiwa tanah longsor. Namun, ini perlu diteliti lebih lanjut lagi, seperti dengan melihat pola atau tren antara kejadian hujan dengan kejadian tanah longsor.
Kemudian, berdasarkan uji statistik yang dilakukan, kita dapat mengetahui bahwa terdapat perbedaan nilai rataan suhu yang signifikan antara suhu pada 30 tahun pertama sejak tahun 1984 dengan suhu pada 30 tahun terakhir (hingga 2022). Perbedaan ini pun didukung dengan visualisasi grafik time series yang menunjukkan adanya tren kenaikan suhu. Tren ini menandakan bahwa perubahan iklim terjadi di Bogor.
Azizah M, Subiyanto A, Triutomo S, Wahyuni D. 2022. Pengaruh perubahan iklim terhadap bencana hidrometeorologi di Kecamatan Cisarua Kabupaten Bogor. Journal of Science Education. 6(2):541-546. doi:10.33369/pendipa.6.2.541-546.
Prasetyo S, Hidayat U, Haryanto YD, Riama NF. 2021. Variasi dan trend suhu udara permukaan di Pulau Jawa. Jurnal Geografi. 18(1):60-68. doi:10.15294/jg.v18i1.27622.
dataonline.bmkg.go.id
gis.bnpb.go.id