Latar Belakang

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

Pengenalan Dataset

Pada project kali ini, saya memiliki 3 dataset berbeda sesuai dengan objektif yang telah ditentukan pada bagian berikutnya.

1. Data Iklim Des 2022 - Feb 2023

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.

  1. Tanggal : tanggal observasi/pengamatan.
  2. Tn : suhu minimum (°C)
  3. Tx : suhu maksimum (°C)
  4. Tavg : suhu rata-rata (°C)
  5. RH_avg : kelembapan rata-rata (%)
  6. RR : Curah hujan (mm)
  7. ss : lama penyinaran matahari (jam)
  8. ff_x : kecepatan angin maksimum (m/s)
  9. ddd_x : arah angin saat ff_x (°)
  10. ff_avg : kecepatan angin rata-rata (m/s)
  11. ddd_car : arah angin terbanyak (°)

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

2. Data Bencana Des 2022 - Feb 2023 di Kota/Kab. Bogor

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:

  1. Tanggal : tanggal kejadian
  2. Kejadian : jenis bencana yang terjadi
  3. Lokasi : lokasi kejadian
  4. Kabupaten : kabupaten lokasi kejadian
  5. Provinsi : provinsi lokasi kejadian
  6. Kronologi_Dokumentasi : kronologi dan dokumentasi kejadian
  7. Penyebab : detail informasi penyebab bencana
  8. Meninggal : jumlah orang meninggal
  9. Hilang : jumlah orang hilang
  10. Terluka : jumlah orang terluka
  11. RumahRusak : jumlah rumah rusak
  12. RumahTerendam : jumlah rumah terendam
  13. FasumRusak : jumlah fasilitas umum yang rusak

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

3. Data Suhu Harian Bogor Periode 1984 - 2022

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:

  1. Tanggal : tanggal pengamatan
  2. Tn : suhu minimum (°C)
  3. Tx : suhu maksimum (°C)
  4. Tavg : suhu udara rata-rata (°C)

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

Objektif

Berdasarkan dataset yang digunakan, dirumuskan beberapa objektif, antara lain.

  1. Analisis variabel-variabel yang berkaitan dengan kejadian bencana puting beliung dan tanah longsor di Bogor dan efeknya terhadap kerusakan rumah atau fasilitas umum.

  2. Analisis variabel suhu sebagai salah satu faktor perubahan iklim di Bogor.

Pre-processing Data

Data 1

Ubah Format

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')

Cek Data Duplikat

iklim_desja.duplicated().sum()
## 0

Identifying and Handling Missing Value

#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

Data 2

Ubah Format

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')

Cek Data Duplikat

bencana_desja.duplicated().sum()
## 0

Untuk dataset ini, tidak ada missing value yang perlu diatasi.

Data 3

Dari dataset ini, setiap kolom telah memiliki format yang sesuai sehingga tidak ada format yang perlu diubah.

Cek Data Duplikat

suhu_bogor.duplicated().sum()
## 0

Identifying and Handling Missing Value

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

Analisis Statistika Deskriptif

Data 1

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:

  1. suhu minimum hanya berkisar antara 20-23.5°C dengan penyimpangan sekitar 0.71°C.
  2. suhu maksimum berkisar antara 26.7-33.8°C dengan penyimpangan mencapai 1.70°C.
  3. suhu rata-rata memiliki rentang nilai 23.3-28°C dengan penyimpangan 0.89°C.
  4. kelembapan yang cukup tinggi sekitar 73-94%.
  5. masih terdapat beberapa hari tidak hujan dan hujan dengan intensitas tertinggi mencapai 51.6 mm.

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.

Data 2

##                           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.

Data 3

##                  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.

Analisis Peluang

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

Diskrit

Puting Beliung

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.

Tanah Longsor

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%.

Kontinu

Puting Beliung

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

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.

Analisis Korelasi

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:

  1. suhu udara rata-rata berkorelasi positif dengan lama penyinaran matahari (r=0.41), tetapi berkorelasi negatif lemah dengan curah hujan (r=-0.4) dan negatif kuat dengan kelembapan (r=-0.8). Sementara itu, hubungan dengan variabel yang lain sangat lemah mendekati nol.
  2. kelembapan memiliki hubungan korelasi positif lemah dengan curah hujan sebesar r = 0.29 dan berkorelasi negatif lemah dengan lama penyinaran surya sebesar r = -0.32.
  3. variabel kecepatan angin maksimum berkorelasi positif sedang dengan variabel rumah rusak dengan r = 0.4. Meski begitu, bilsa dilihat dari sebarannya, tidak tampak seperti garis lurus. Namun, tentu keduanya berkaitan meski tidak secara linear dan angin merupakan faktor utama dalam peristiwa puting beliung sehingga berisiko terhadap kerusakan rumah.

Pengujian Hipotesis

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.

Simpulan

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.

Referensi

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.

Sumber Data

dataonline.bmkg.go.id

gis.bnpb.go.id