Curah hujan merupakan salah satu unsur iklim yang penting dalam kajian lingkungan karena berpengaruh terhadap ketersediaan air, potensi banjir, serta kondisi ekosistem. Data curah hujan dapat digunakan untuk mengetahui pola perubahan kondisi lingkungan berdasarkan waktu dan lokasi pengamatan.
Analisis ini menggunakan data curah hujan bulanan dari beberapa stasiun BMKG wilayah Tangerang dan Serang pada periode Januari 2023 hingga Desember 2024. Data dianalisis menggunakan pendekatan statistik deskriptif, visualisasi, analisis pola waktu, serta identifikasi nilai ekstrem.
library(readxl)
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
library(tidyr)
library(ggplot2)
library(knitr)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
data <- read_excel("~/Documents/intan/SL/TUGAS_SL_2.xlsx")
head(data)
## # A tibble: 6 × 6
## Tahun Bulan `Stasiun Klimatologi Tangerang Selatan` Stasiun Meteorologi S…¹
## <dbl> <chr> <chr> <chr>
## 1 2024 Januari 430.5 368
## 2 2024 Februari 212.4 197.3
## 3 2024 Maret 447 310.5
## 4 2024 April 377.4 163.7
## 5 2024 Mei 57 305.2
## 6 2024 Juni 133.6 129.5
## # ℹ abbreviated name: ¹`Stasiun Meteorologi Serang`
## # ℹ 2 more variables: `Stasiun Meteorologi Curug` <chr>,
## # `Stasiun Geofisika Tangerang` <chr>
str(data)
## tibble [24 × 6] (S3: tbl_df/tbl/data.frame)
## $ Tahun : num [1:24] 2024 2024 2024 2024 2024 ...
## $ Bulan : chr [1:24] "Januari" "Februari" "Maret" "April" ...
## $ Stasiun Klimatologi Tangerang Selatan: chr [1:24] "430.5" "212.4" "447" "377.4" ...
## $ Stasiun Meteorologi Serang : chr [1:24] "368" "197.3" "310.5" "163.7" ...
## $ Stasiun Meteorologi Curug : chr [1:24] "322.6" "191" "149.5" "483.6" ...
## $ Stasiun Geofisika Tangerang : chr [1:24] "309.7" "160.6" "320.8" "337.3" ...
summary(data)
## Tahun Bulan Stasiun Klimatologi Tangerang Selatan
## Min. :2023 Length:24 Length:24
## 1st Qu.:2023 Class :character Class :character
## Median :2024 Mode :character Mode :character
## Mean :2024
## 3rd Qu.:2024
## Max. :2024
## Stasiun Meteorologi Serang Stasiun Meteorologi Curug
## Length:24 Length:24
## Class :character Class :character
## Mode :character Mode :character
##
##
##
## Stasiun Geofisika Tangerang
## Length:24
## Class :character
## Mode :character
##
##
##
Mengubah data menjadi format panjang agar mudah dilakukan analisis dan visualisasi.
data_long <- data %>%
select(-Tahun) %>%
pivot_longer(
cols = -Bulan,
names_to = "Stasiun",
values_to = "Curah_Hujan"
) %>%
mutate(
Curah_Hujan = as.numeric(Curah_Hujan)
) %>%
filter(!is.na(Curah_Hujan))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Curah_Hujan = as.numeric(Curah_Hujan)`.
## Caused by warning:
## ! NAs introduced by coercion
head(data_long)
## # A tibble: 6 × 3
## Bulan Stasiun Curah_Hujan
## <chr> <chr> <dbl>
## 1 Januari Stasiun Klimatologi Tangerang Selatan 430.
## 2 Januari Stasiun Meteorologi Serang 368
## 3 Januari Stasiun Meteorologi Curug 323.
## 4 Januari Stasiun Geofisika Tangerang 310.
## 5 Februari Stasiun Klimatologi Tangerang Selatan 212.
## 6 Februari Stasiun Meteorologi Serang 197.
str(data_long)
## tibble [93 × 3] (S3: tbl_df/tbl/data.frame)
## $ Bulan : chr [1:93] "Januari" "Januari" "Januari" "Januari" ...
## $ Stasiun : chr [1:93] "Stasiun Klimatologi Tangerang Selatan" "Stasiun Meteorologi Serang" "Stasiun Meteorologi Curug" "Stasiun Geofisika Tangerang" ...
## $ Curah_Hujan: num [1:93] 430 368 323 310 212 ...
statistik <- data_long %>%
group_by(Stasiun) %>%
summarise(
Rata_rata = mean(Curah_Hujan, na.rm = TRUE),
Minimum = min(Curah_Hujan, na.rm = TRUE),
Maksimum = max(Curah_Hujan, na.rm = TRUE),
Standar_deviasi = sd(Curah_Hujan, na.rm = TRUE)
)
kable(statistik)
| Stasiun | Rata_rata | Minimum | Maksimum | Standar_deviasi |
|---|---|---|---|---|
| Stasiun Geofisika Tangerang | 148.6500 | 2.0 | 396.4 | 115.2897 |
| Stasiun Klimatologi Tangerang Selatan | 182.1542 | 3.6 | 464.3 | 149.9027 |
| Stasiun Meteorologi Curug | 192.6652 | 12.9 | 613.0 | 138.9975 |
| Stasiun Meteorologi Serang | 163.4318 | 0.5 | 368.0 | 108.9175 |
ggplot(data_long, aes(x = Curah_Hujan)) +
geom_histogram(
bins = 12,
fill = "skyblue",
color = "black"
) +
labs(
title = "Distribusi Curah Hujan Bulanan",
x = "Curah Hujan (mm)",
y = "Frekuensi"
) +
theme_minimal()
ggplot(data_long,
aes(
x = Stasiun,
y = Curah_Hujan
)) +
geom_boxplot(fill="lightgreen") +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 45,
hjust = 1
)
) +
labs(
title="Boxplot Curah Hujan Berdasarkan Stasiun",
x="Stasiun",
y="Curah Hujan (mm)"
)
data_time <- data %>%
select(-Tahun) %>%
pivot_longer(
cols = -Bulan,
names_to = "Stasiun",
values_to = "Curah_Hujan"
) %>%
mutate(
Curah_Hujan = as.numeric(Curah_Hujan)
) %>%
filter(!is.na(Curah_Hujan))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Curah_Hujan = as.numeric(Curah_Hujan)`.
## Caused by warning:
## ! NAs introduced by coercion
head(data_time)
## # A tibble: 6 × 3
## Bulan Stasiun Curah_Hujan
## <chr> <chr> <dbl>
## 1 Januari Stasiun Klimatologi Tangerang Selatan 430.
## 2 Januari Stasiun Meteorologi Serang 368
## 3 Januari Stasiun Meteorologi Curug 323.
## 4 Januari Stasiun Geofisika Tangerang 310.
## 5 Februari Stasiun Klimatologi Tangerang Selatan 212.
## 6 Februari Stasiun Meteorologi Serang 197.
Menggunakan metode Interquartile Range (IQR).
outlier <- data_long %>%
group_by(Stasiun) %>%
mutate(
Q1 = quantile(Curah_Hujan,0.25,na.rm=TRUE),
Q3 = quantile(Curah_Hujan,0.75,na.rm=TRUE),
IQR = Q3-Q1
) %>%
filter(
Curah_Hujan < Q1-1.5*IQR |
Curah_Hujan > Q3+1.5*IQR
)
kable(outlier)
| Bulan | Stasiun | Curah_Hujan | Q1 | Q3 | IQR |
|---|---|---|---|---|---|
| April | Stasiun Meteorologi Curug | 483.6 | 95.65 | 234.750 | 139.100 |
| November | Stasiun Meteorologi Curug | 613.0 | 95.65 | 234.750 | 139.100 |
| Februari | Stasiun Geofisika Tangerang | 396.4 | 75.85 | 198.075 | 122.225 |
Analisis dilakukan untuk melihat pola hubungan curah hujan berdasarkan waktu.
contoh_ts <- ts(
data_long$Curah_Hujan,
frequency = 12
)
acf(
contoh_ts,
main="Autokorelasi Curah Hujan Bulanan"
)
Berdasarkan hasil eksplorasi data curah hujan wilayah Tangerang Selatan dan Serang tahun 2023–2024 dapat diketahui bahwa curah hujan memiliki variasi antar bulan maupun antar stasiun pengamatan.
Analisis statistik menunjukkan adanya perbedaan nilai rata-rata, nilai minimum, maksimum, dan tingkat penyebaran curah hujan pada masing-masing stasiun. Visualisasi histogram dan boxplot menunjukkan distribusi serta kemungkinan adanya nilai ekstrem.
Analisis deret waktu memperlihatkan perubahan curah hujan sepanjang periode pengamatan, sedangkan analisis autokorelasi digunakan untuk melihat adanya pola hubungan berdasarkan waktu.