Report R Markdown ini dubuat untuk tujuan pembelajaran self learning materi Programming for Data Science dengan menggunakan Software R. Pada LBB ini saya menggunakan data Bencana Alam yang saya ambil dari website https://gis.bnpb.go.id/ dalam bentuk file excel. Data tersebut saya tarik dari rentang waktu 1 januari 2023 hingga 28 Mei 2023. Pada LBB ini bertujuan untuk mendapatkan insgiht mengenai dataset kejadian Bencana Alam di Indonesia.
Tahap pertama dalam melakukan pengolahan data adalah dengan melakukan import data set kemudian assign ke dalam objek yang bernama teacher.
Dikarenakan dataset dalam format excel sehingga perlu library yang dapat membaca data format xlsx
#
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
#read data
disaster <- read_excel("Data Bencana.xlsx")
head(disaster)
## # A tibble: 6 × 16
## No. Kode_Identi…¹ ID_Ka…² Tanggal_Kejadian Kejad…³ Lokasi Kabup…⁴ Provi…⁵
## <dbl> <chr> <dbl> <dttm> <chr> <chr> <chr> <chr>
## 1 1 3319 102 202… 3319 2023-05-28 00:00:00 TANAH … Kec. … KUDUS JAWA T…
## 2 2 6301 107 202… 6301 2023-05-28 00:00:00 KEBAKA… Kec. … TANAH … KALIMA…
## 3 3 1804 105 202… 1804 2023-05-28 00:00:00 PUTING… Kec. … LAMPUN… LAMPUNG
## 4 4 6504 107 202… 6504 2023-05-28 00:00:00 KEBAKA… Kec. … NUNUKAN KALIMA…
## 5 5 1172 107 202… 1172 2023-05-28 00:00:00 KEBAKA… Kec. … KOTA S… ACEH
## 6 6 1606 107 202… 1606 2023-05-28 00:00:00 KEBAKA… Kec. … MUSI B… SUMATE…
## # … with 8 more variables: `Kronologi & Dokumentasi` <chr>, Penyebab <chr>,
## # Meninggal <dbl>, Hilang <dbl>, Terluka <dbl>, Rumah_Rusak <dbl>,
## # Rumah_Terendam <dbl>, Fasum_Rusak <dbl>, and abbreviated variable names
## # ¹Kode_Identitas_Bencana, ²ID_Kabupaten, ³Kejadian, ⁴Kabupaten, ⁵Provinsi
Tahap selanjutnya setelah berhasil melakukan read data maka agar dapat menganalisis dan menemukan insight terlebih dahulu kita harus faham mengenai informasi, struktur, isi, dan gambaran umum yang terdapat di dataset kita.
# Mengetahui kolom-kolom apa saja yang ada di data
colnames(disaster)
## [1] "No." "Kode_Identitas_Bencana"
## [3] "ID_Kabupaten" "Tanggal_Kejadian"
## [5] "Kejadian" "Lokasi"
## [7] "Kabupaten" "Provinsi"
## [9] "Kronologi & Dokumentasi" "Penyebab"
## [11] "Meninggal" "Hilang"
## [13] "Terluka" "Rumah_Rusak"
## [15] "Rumah_Terendam" "Fasum_Rusak"
Dari output di atas dapat diketahui bahwa terdapat 16 kolom. Setelah dilihat lagi bahwa diperlukan seleksi kolom mana yang akan dipake dalam tahapan selanjutnya. Kolom yang tidak dipakai No, Kode Identitas Bencana, Kronologi & Dokumentasi.
kolom yang dipakai: ID Kabupaten, Tanggal Kejadian, Kejadian, Lokasi, Kejadian, Lokasi, Kabupaten, Provinsi, Penyebab, Meninggal, Hilang, Terluka, Rumah Rusak, Rumah Terendam, Fasum Rusak
# melakukan subsetting
disaster <- disaster[ , c("ID_Kabupaten", "Tanggal_Kejadian", "Kejadian", "Lokasi", "Kejadian", "Lokasi", "Kabupaten", "Provinsi", "Penyebab", "Meninggal", "Hilang", "Terluka", "Rumah_Rusak", "Rumah_Terendam", "Fasum_Rusak")]
head(disaster)
## # A tibble: 6 × 15
## ID_Kabupaten Tanggal_Kejadian Kejad…¹ Lokasi Kejad…² Lokasi Kabup…³ Provi…⁴
## <dbl> <dttm> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 3319 2023-05-28 00:00:00 TANAH … Kec. … TANAH … Kec. … KUDUS JAWA T…
## 2 6301 2023-05-28 00:00:00 KEBAKA… Kec. … KEBAKA… Kec. … TANAH … KALIMA…
## 3 1804 2023-05-28 00:00:00 PUTING… Kec. … PUTING… Kec. … LAMPUN… LAMPUNG
## 4 6504 2023-05-28 00:00:00 KEBAKA… Kec. … KEBAKA… Kec. … NUNUKAN KALIMA…
## 5 1172 2023-05-28 00:00:00 KEBAKA… Kec. … KEBAKA… Kec. … KOTA S… ACEH
## 6 1606 2023-05-28 00:00:00 KEBAKA… Kec. … KEBAKA… Kec. … MUSI B… SUMATE…
## # … with 7 more variables: Penyebab <chr>, Meninggal <dbl>, Hilang <dbl>,
## # Terluka <dbl>, Rumah_Rusak <dbl>, Rumah_Terendam <dbl>, Fasum_Rusak <dbl>,
## # and abbreviated variable names ¹Kejadian, ²Kejadian, ³Kabupaten, ⁴Provinsi
# mengecek struktur data
str(disaster)
## tibble [1,146 × 15] (S3: tbl_df/tbl/data.frame)
## $ ID_Kabupaten : num [1:1146] 3319 6301 1804 6504 1172 ...
## $ Tanggal_Kejadian: POSIXct[1:1146], format: "2023-05-28" "2023-05-28" ...
## $ Kejadian : chr [1:1146] "TANAH LONGSOR" "KEBAKARAN HUTAN DAN LAHAN" "PUTING BELIUNG" "KEBAKARAN HUTAN DAN LAHAN" ...
## $ Lokasi : chr [1:1146] "Kec. Dawe Ds. Dukuh Waringin" "Kec. Bati-Bati Ds. Ujung" "Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten" "Kec. Nunukan Ds. Binusan" ...
## $ Kejadian : chr [1:1146] "TANAH LONGSOR" "KEBAKARAN HUTAN DAN LAHAN" "PUTING BELIUNG" "KEBAKARAN HUTAN DAN LAHAN" ...
## $ Lokasi : chr [1:1146] "Kec. Dawe Ds. Dukuh Waringin" "Kec. Bati-Bati Ds. Ujung" "Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten" "Kec. Nunukan Ds. Binusan" ...
## $ Kabupaten : chr [1:1146] "KUDUS" "TANAH LAUT" "LAMPUNG TIMUR" "NUNUKAN" ...
## $ Provinsi : chr [1:1146] "JAWA TENGAH" "KALIMANTAN SELATAN" "LAMPUNG" "KALIMANTAN UTARA" ...
## $ Penyebab : chr [1:1146] "Sejumlah 8 pekerja melakukan aktifitas pembenahan talud setinggi ± 12 meter untuk penyangga jalan, namun dikare"| __truncated__ "Masih dalam proses penyelidikan" "Dipicu oleh intensitas curah hujan yang cukup tinggi disertai angin kencang" "Masih dalam proses penyelidikan" ...
## $ Meninggal : num [1:1146] 3 NA NA NA NA NA NA NA NA NA ...
## $ Hilang : num [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Terluka : num [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Rumah_Rusak : num [1:1146] 0 0 157 0 0 0 0 0 0 0 ...
## $ Rumah_Terendam : num [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Fasum_Rusak : num [1:1146] 0 0 0 0 0 0 0 0 0 0 ...
Mengubah tipe data Tipe data yang belum sesuai diantaranya adalah:
ID Kabupaten : factor Tanggal Kejadian: YMD kejadian : factor Kabupaten : factor Provinsi : factor Meninggal, Hilang, Terluka, Rumah Rusak, Rumah Terendam, Fasum Rusak : integer
disaster$ID_Kabupaten <- as.factor(disaster$ID_Kabupaten)
disaster$Kejadian <- as.factor(disaster$Kejadian)
disaster$Kabupaten <- as.factor(disaster$Kabupaten)
disaster$Provinsi <- as.factor(disaster$Provinsi)
disaster$Meninggal <- as.integer(disaster$Meninggal)
disaster$Hilang <- as.integer(disaster$Hilang)
disaster$Terluka <- as.integer(disaster$Terluka)
disaster$Rumah_Rusak <- as.integer(disaster$Rumah_Rusak)
disaster$Rumah_Terendam <- as.integer(disaster$Rumah_Terendam)
disaster$Fasum_Rusak <- as.integer(disaster$Fasum_Rusak)
sekarang, mari kita sesuaikan tipe data tanggal terlebih dahulu cek bentuk format nya seperti apa
# melakukan pengecekan data pada kolom Tanggal_Kejadian
head(disaster$Tanggal_Kejadian)
## [1] "2023-05-28 UTC" "2023-05-28 UTC" "2023-05-28 UTC" "2023-05-28 UTC"
## [5] "2023-05-28 UTC" "2023-05-28 UTC"
disaster$Tanggal_Kejadian <- as.Date(disaster$Tanggal_Kejadian, format = "%Y/%m/%d")
Setelah data dilakukan pengubahan tipe data maka cek kembali apakah sudah sesuai
str(disaster)
## tibble [1,146 × 15] (S3: tbl_df/tbl/data.frame)
## $ ID_Kabupaten : Factor w/ 320 levels "1101","1102",..: 144 233 82 250 18 64 69 232 232 36 ...
## $ Tanggal_Kejadian: Date[1:1146], format: "2023-05-28" "2023-05-28" ...
## $ Kejadian : Factor w/ 8 levels "BANJIR","GELOMBANG PASANG / ABRASI",..: 8 4 7 4 4 4 4 4 4 4 ...
## $ Lokasi : chr [1:1146] "Kec. Dawe Ds. Dukuh Waringin" "Kec. Bati-Bati Ds. Ujung" "Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten" "Kec. Nunukan Ds. Binusan" ...
## $ Kejadian : chr [1:1146] "TANAH LONGSOR" "KEBAKARAN HUTAN DAN LAHAN" "PUTING BELIUNG" "KEBAKARAN HUTAN DAN LAHAN" ...
## $ Lokasi : chr [1:1146] "Kec. Dawe Ds. Dukuh Waringin" "Kec. Bati-Bati Ds. Ujung" "Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten" "Kec. Nunukan Ds. Binusan" ...
## $ Kabupaten : Factor w/ 320 levels "ACEH BARAT","ACEH BARAT DAYA",..: 173 298 182 227 152 219 248 142 142 250 ...
## $ Provinsi : Factor w/ 34 levels "ACEH","BALI",..: 10 13 19 16 1 33 33 14 14 32 ...
## $ Penyebab : chr [1:1146] "Sejumlah 8 pekerja melakukan aktifitas pembenahan talud setinggi ± 12 meter untuk penyangga jalan, namun dikare"| __truncated__ "Masih dalam proses penyelidikan" "Dipicu oleh intensitas curah hujan yang cukup tinggi disertai angin kencang" "Masih dalam proses penyelidikan" ...
## $ Meninggal : int [1:1146] 3 NA NA NA NA NA NA NA NA NA ...
## $ Hilang : int [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Terluka : int [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Rumah_Rusak : int [1:1146] 0 0 157 0 0 0 0 0 0 0 ...
## $ Rumah_Terendam : int [1:1146] NA NA NA NA NA NA NA NA NA NA ...
## $ Fasum_Rusak : int [1:1146] 0 0 0 0 0 0 0 0 0 0 ...
Setelah semua kolom sudah sesuai dengan tipe datanya masing-masing maka langkah selanjutnya adalah mengecek apakah terdapat missing value pada dataset tersebut degan menggunakan anyNA
colSums(is.na(disaster))
## ID_Kabupaten Tanggal_Kejadian Kejadian Lokasi
## 0 0 0 11
## Kejadian Lokasi Kabupaten Provinsi
## 0 11 0 0
## Penyebab Meninggal Hilang Terluka
## 16 1094 1141 1092
## Rumah_Rusak Rumah_Terendam Fasum_Rusak
## 0 717 0
Karena pada data ditemukan banyak NA pada bagian meninggal, Hilang, Terluka, Rumah_Rusak, Rumah_Terendam artinya bahwa tidak ada sehingga diganti dengan 0
disaster <- data.frame(disaster) %>%
mutate(Meninggal = coalesce(Meninggal,0)) %>%
mutate(Hilang = coalesce(Hilang,0)) %>%
mutate(Terluka = coalesce(Terluka,0)) %>%
mutate(Rumah_Rusak = coalesce(Rumah_Rusak,0)) %>%
mutate(Rumah_Terendam = coalesce(Rumah_Terendam,0))
# melakukan pengecekan missing value lagi setelah data direplace
disaster %>%
is.na() %>%
colSums()
## ID_Kabupaten Tanggal_Kejadian Kejadian Lokasi
## 0 0 0 11
## Kejadian.1 Lokasi.1 Kabupaten Provinsi
## 0 11 0 0
## Penyebab Meninggal Hilang Terluka
## 16 0 0 0
## Rumah_Rusak Rumah_Terendam Fasum_Rusak
## 0 0 0
Kolom kosong NA sudah terisi dengan 0 karena memang tidak ada jumlah yang meninggal/terluka tinggal kolom Lokasi dan Penyebab yang tidak diketahui sehingga kita drop baris nya yang kosong menggunakan na.omit
disaster_clean <- disaster %>%
na.omit(Lokasi, Penyebab)
Data sudah bersih tidak ada missing value / NA
Setelah data sudah bersih dan dilakukan pengenalan data pada tahap EDA. maka langkah selanjutnya adalah menentukan study kasus untuk memperoleh insight apa yang mau diambil dari dataset tersebut.
head(disaster_clean)
## ID_Kabupaten Tanggal_Kejadian Kejadian
## 1 3319 2023-05-28 TANAH LONGSOR
## 2 6301 2023-05-28 KEBAKARAN HUTAN DAN LAHAN
## 3 1804 2023-05-28 PUTING BELIUNG
## 4 6504 2023-05-28 KEBAKARAN HUTAN DAN LAHAN
## 5 1172 2023-05-28 KEBAKARAN HUTAN DAN LAHAN
## 6 1606 2023-05-28 KEBAKARAN HUTAN DAN LAHAN
## Lokasi
## 1 Kec. Dawe Ds. Dukuh Waringin
## 2 Kec. Bati-Bati Ds. Ujung
## 3 Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten
## 4 Kec. Nunukan Ds. Binusan
## 5 Kec. Jurong Mulia Ds. Cot Ba'u
## 6 Kec. Plakat Tinggi Ds. Air Putih Kec. Sungai Keruh Ds. Keramat Jaya
## Kejadian.1
## 1 TANAH LONGSOR
## 2 KEBAKARAN HUTAN DAN LAHAN
## 3 PUTING BELIUNG
## 4 KEBAKARAN HUTAN DAN LAHAN
## 5 KEBAKARAN HUTAN DAN LAHAN
## 6 KEBAKARAN HUTAN DAN LAHAN
## Lokasi.1
## 1 Kec. Dawe Ds. Dukuh Waringin
## 2 Kec. Bati-Bati Ds. Ujung
## 3 Kec. Raman Utara Ds. Rukti Sedyo Kec. Purbolinggo Ds. Tanjung Inten
## 4 Kec. Nunukan Ds. Binusan
## 5 Kec. Jurong Mulia Ds. Cot Ba'u
## 6 Kec. Plakat Tinggi Ds. Air Putih Kec. Sungai Keruh Ds. Keramat Jaya
## Kabupaten Provinsi
## 1 KUDUS JAWA TENGAH
## 2 TANAH LAUT KALIMANTAN SELATAN
## 3 LAMPUNG TIMUR LAMPUNG
## 4 NUNUKAN KALIMANTAN UTARA
## 5 KOTA SABANG ACEH
## 6 MUSI BANYU ASIN SUMATERA SELATAN
## Penyebab
## 1 Sejumlah 8 pekerja melakukan aktifitas pembenahan talud setinggi ± 12 meter untuk penyangga jalan, namun dikarenakan kontur tanah yang labil & tidak adanya penyangga darurat, seketika pada pkl. 13:30 WIB tanah senderan tebing mengalami longsor dan menimpa para pekerja yang berada dibawahnya
## 2 Masih dalam proses penyelidikan
## 3 Dipicu oleh intensitas curah hujan yang cukup tinggi disertai angin kencang
## 4 Masih dalam proses penyelidikan
## 5 Masih dalam proses penyelidikan
## 6 ●masih dalam penyelidikan .
## Meninggal Hilang Terluka Rumah_Rusak Rumah_Terendam Fasum_Rusak
## 1 3 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 157 0 0
## 4 0 0 0 0 0 0
## 5 0 0 0 0 0 0
## 6 0 0 0 0 0 0
1. Ada berapa banyak jumlah Kejadian Bencana Alam menurut jenis kejadiannya selama 5 bulan terakhir?
table(disaster_clean$Kejadian)
##
## BANJIR GELOMBANG PASANG / ABRASI GEMPA BUMI
## 468 12 11
## KEBAKARAN HUTAN DAN LAHAN KEKERINGAN LETUSAN GUNUNG API
## 82 1 2
## PUTING BELIUNG TANAH LONGSOR
## 330 213
barplot(sort(table(disaster_clean$Kejadian),decreasing = TRUE))
### Interpretation - Bencana banjir adalah yang paling sering terjadi di Indonesia selama lima bulan terakhir, yaitu total sebanyak 468 kejadian di seluruh provinsi Indonesia - Kekeringan adalah kejadian paling jarang terjadi di Indonesia, yaitu hanya terjadi satu kali selama lima bulan terakhir.
2. Provinsi mana yang paling sering terjadi bencana?
quest2 <- as.data.frame(sort(table(disaster_clean$Provinsi), decreasing = TRUE))
names(quest2) <- c("Provinsi","Freq")
quest2[1:10,]
## Provinsi Freq
## 1 JAWA BARAT 254
## 2 JAWA TENGAH 140
## 3 JAWA TIMUR 97
## 4 ACEH 68
## 5 SULAWESI SELATAN 57
## 6 NUSA TENGGARA BARAT 41
## 7 SULAWESI TENGAH 41
## 8 KALIMANTAN SELATAN 39
## 9 KALIMANTAN TENGAH 33
## 10 SUMATERA UTARA 32
barplot(head((sort(table(disaster_clean$Provinsi), decreasing = TRUE)),10))
3. Provinsi mana saja yang jarang terjadi bencana?
quest2 <- as.data.frame(sort(table(disaster_clean$Provinsi), decreasing = TRUE))
names(quest2) <- c("Provinsi","Freq")
tail(quest2, 10)
## Provinsi Freq
## 25 BALI 9
## 26 KEPULAUAN BANGKA BELITUNG 9
## 27 BENGKULU 8
## 28 PAPUA 7
## 29 SULAWESI TENGGARA 7
## 30 SULAWESI BARAT 6
## 31 PAPUA BARAT 4
## 32 DI YOGYAKARTA 3
## 33 DKI JAKARTA 3
## 34 JAMBI 2
barplot(tail((sort(table(disaster_clean$Provinsi), decreasing = TRUE)),10))
4. Berapa Jumlah korban manusia yang diakibatkan oleh bencana di bulan Januari hingga Mei 2023?
sum(disaster_clean$Meninggal)
## [1] 145
sum(disaster_clean$Terluka)
## [1] 203
sum(disaster_clean$Hilang)
## [1] 7
barplot(sort(c(Meninggal = sum(disaster_clean$Meninggal),Terluka = sum(disaster_clean$Terluka),Hilang = sum(disaster_clean$Hilang)),decreasing = TRUE))
### Interpretation: - Korban terluka adalah yang paling banyak yaitu berjumlah 203 orang yang terluka akibat bencana alam. - terdapat sebanyak 145 orang yang meninggal diakbiatkan oleh kejadian bencana selama bulan Januari hingga Mei 2023 di Provinsi Indonesia. - terdapat sebanyak 7 orang yang hilang diakbiatkan oleh kejadian bencana selama bulan Januari hingga Mei 2023 di Provinsi Indonesia.
5. Berapa Jumlah total kerusakan bangunan yang diakibatkan oleh bencana di bulan Januari hingga Mei 2023?
sum(disaster_clean$Rumah_Rusak)
## [1] 10909
sum(disaster_clean$Rumah_Terendam)
## [1] 457338
sum(disaster_clean$Fasum_Rusak)
## [1] 293
barplot(sort(c(Rumah_Rusak = sum(disaster_clean$Rumah_Rusak),Rumah_Terendam = sum(disaster_clean$Rumah_Terendam),Fasum_Rusak = sum(disaster_clean$Fasum_Rusak)),decreasing = TRUE))
### Interpretation: - Kerusakan bangunan akibat bencana yang paling banyak adalah Rumah Terendam yaitu berjumlah 457338 rumah yang rusak akibat bencana alam. Jumlah ini selaras dengan jumlah kejadian bencana yang paling banyak yaitu banjir. - terdapat sebanyak 10909 rumah yang rusak diakbiatkan oleh kejadian bencana selama bulan Januari hingga Mei 2023 di Provinsi Indonesia. - terdapat sebanyak 293 failitas umum yang rusak diakbiatkan oleh kejadian bencana selama bulan Januari hingga Mei 2023 di Provinsi Indonesia.
6. Kapan kejadian bencana paling banyak terjadi di Indonesia selama bulan Januari hingga Mei 2023?
head(sort(table(disaster_clean$Tanggal_Kejadian), decreasing = TRUE),10)
##
## 2023-03-17 2023-03-02 2023-02-19 2023-03-01 2023-01-31 2023-02-25 2023-04-30
## 20 18 17 17 16 16 16
## 2023-01-03 2023-02-13 2023-02-24
## 15 15 15
max(table(disaster_clean$Tanggal_Kejadian))
## [1] 20
barplot(head(sort(table(disaster_clean$Tanggal_Kejadian), decreasing = TRUE),10))
### Interpretation: - Kejadian bencana paling banyak terjadi di Indonesia di bulan Januari hingga Mei 2023 adalah pada tanggal 17 Maret 2023 yaitu terdapat 20 kejadian bencana. - Kemudian pada tanggal 2 Maret 2023 terdapat 18 kejadian bencana di Seluruh Indonesia selama bulan Januari hingga Mei 2023.
7. Berapa paling sedikit kejadian bencana yang terjadi?
min(table(disaster_clean$Tanggal_Kejadian))
## [1] 1
8. Berapa rata-rata kejadian bencana yang terjadi tiap harinya?
mean(table(disaster_clean$Tanggal_Kejadian))
## [1] 7.560811
Dari yang awalnya data tidak bisa terbaca dan masih dalam bentuk yang tidak terstrukttur ketika dilakukan EDA, data cleansing, wrangling data didapatkan sebuah informasi yang berguna yang dapat dijadikan sebuah insigiht dalam pengambilak keputusan selanjutnya. Adapun kesimpulan yang diporolh dari semua proses di atas adalah , bahwa di selama bulan Januari hingga Mei 2023 di Indonesia:
dataset : https://gis.bnpb.go.id/