Situs web yang digunakan untuk scraping data cuaca adalah Weather.com. Situs ini menyediakan informasi cuaca yang sangat rinci, termasuk prediksi cuaca per jam untuk berbagai lokasi di seluruh dunia. Informasi yang biasanya disediakan meliputi suhu, kelembaban, kecepatan angin, arah angin, kondisi cuaca, dan banyak lagi.
Tujuan dari scraping data cuaca dari situs web ini adalah untuk mengumpulkan data cuaca yang akurat dan terbaru untuk analisis lebih lanjut.
Scraping data cuaca dari situs web seperti Weather.com penting karena beberapa alasan: Akses ke Data Terperinci dan Real-Time: Situs seperti Weather.com menyediakan data cuaca secara real-time yang sangat terperinci. Dengan scraping, kita bisa mendapatkan data ini secara otomatis dan terus-menerus tanpa harus mengunduhnya secara manual. Analisis Data Historis dan Tren: Dengan mengumpulkan data cuaca dari waktu ke waktu, kita dapat menganalisis tren jangka panjang dan membuat model prediksi yang lebih akurat. Personalisasi dan Penggunaan Spesifik: Data cuaca yang dikumpulkan bisa disesuaikan dengan kebutuhan spesifik pengguna atau aplikasi, seperti pengembangan aplikasi cuaca yang personal, analisis risiko bisnis, dan penelitian ilmiah. Penghematan Biaya: Mengandalkan scraping data dibandingkan dengan membeli data cuaca dari penyedia data komersial bisa menghemat biaya, terutama untuk penelitian atau aplikasi yang memerlukan data dalam jumlah besar. Mendukung Inovasi: Akses ke data cuaca yang luas dan terperinci mendorong inovasi dalam pengembangan teknologi baru seperti aplikasi mobile, sistem otomasi pertanian, dan solusi smart city.
Analisis Data melibatkan langkah-langkah sebagai berikut:
Mengimpor paket-paket yang diperlukan untuk analisis data cuaca,
termasuk paket untuk manipulasi data, visualisasi, pemetaan, dan
analisis teks. Paket-paket ini mencakup tidyverse,
wordcloud, RColorBrewer, GGally,
ggmap, maps, mapdata, dan
gplots.
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(wordcloud)
## Warning: package 'wordcloud' was built under R version 4.3.3
## Loading required package: RColorBrewer
library(RColorBrewer)
library(GGally)
## Warning: package 'GGally' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(ggmap)
## Warning: package 'ggmap' was built under R version 4.3.3
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
## Stadia Maps' Terms of Service: <https://stadiamaps.com/terms-of-service/>
## OpenStreetMap's Tile Usage Policy: <https://operations.osmfoundation.org/policies/tiles/>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
library(maps)
## Warning: package 'maps' was built under R version 4.3.3
##
## Attaching package: 'maps'
##
## The following object is masked from 'package:purrr':
##
## map
library(mapdata)
## Warning: package 'mapdata' was built under R version 4.3.3
library(gplots)
## Warning: package 'gplots' was built under R version 4.3.3
##
## Attaching package: 'gplots'
##
## The following object is masked from 'package:wordcloud':
##
## textplot
##
## The following object is masked from 'package:stats':
##
## lowess
Membaca data dari file CSV dengan menggunakan pemisah titik koma dan encoding file ISO-8859-1. Kemudian, menampilkan struktur data dan ringkasan statistik deskriptif untuk memberikan gambaran awal tentang dataset.
data <- read.csv("data.csv", sep = ";", fileEncoding = "ISO-8859-1")
head(data)
## Date
## 1 15 Juni 2024
## 2 15 Juni 2024
## 3 15 Juni 2024
## 4 15 Juni 2024
## 5 15 Juni 2024
## 6 16 Juni 2024
## Description Humidity
## 1 Hujan berhenti pukul 8 pm. Lebih banyak badai mungkin terjadi nanti. 31°
## 2 Hujan setinya akan turun selama beberapa jam ke depan. 31°
## 3 Hujan setinya akan turun selama beberapa jam ke depan. 30°
## 4 Hujan terus turun hingga pukul 03:30. 30°
## 5 Hujan terus turun hingga pukul 04:00. 29°
## 6 Hujan terus turun hingga pukul 04:00. 29°
## Location Temature Time Weather Wind
## 1 Kota Bogor Jawa Barat 27° 18.55 Sedikit Hujan Curah T 6 km/j
## 2 Kota Bogor Jawa Barat 27° 19.21 Sedikit Hujan Curah TTG 5 km/j
## 3 Kota Bogor Jawa Barat 26° 20.12 Sedikit Hujan Curah TG 5 km/j
## 4 Kota Bogor Jawa Barat 27° 21.11 Hujan Curah S 4 km/j
## 5 Kota Bogor Jawa Barat 26° 22.12 Hujan Curah SBD 2 km/j
## 6 Kota Bogor Jawa Barat 26° 23.16 Hujan Curah BD 3 km/j
## X_id
## 1 666d824c15502fada40a86b1
## 2 666d8768f93a4a8d830c74b1
## 3 666d9356e5b7e2111d0b4231
## 4 666da12d13bf22e21708e911
## 5 666daf7991bfb7b0e1068ba1
## 6 666dbe4c3508e3557e064d31
str(data)
## 'data.frame': 107 obs. of 9 variables:
## $ Date : chr "15 Juni 2024" "15 Juni 2024" "15 Juni 2024" "15 Juni 2024" ...
## $ Description: chr "Hujan berhenti pukul 8 pm. Lebih banyak badai mungkin terjadi nanti." "Hujan setinya akan turun selama beberapa jam ke depan." "Hujan setinya akan turun selama beberapa jam ke depan." "Hujan terus turun hingga pukul 03:30." ...
## $ Humidity : chr "31°" "31°" "30°" "30°" ...
## $ Location : chr "Kota Bogor Jawa Barat" "Kota Bogor Jawa Barat" "Kota Bogor Jawa Barat" "Kota Bogor Jawa Barat" ...
## $ Temature : chr "27°" "27°" "26°" "27°" ...
## $ Time : num 18.6 19.2 20.1 21.1 22.1 ...
## $ Weather : chr "Sedikit Hujan Curah" "Sedikit Hujan Curah" "Sedikit Hujan Curah" "Hujan Curah" ...
## $ Wind : chr "T 6 km/j" "TTG 5 km/j" "TG 5 km/j" "S 4 km/j" ...
## $ X_id : chr "666d824c15502fada40a86b1" "666d8768f93a4a8d830c74b1" "666d9356e5b7e2111d0b4231" "666da12d13bf22e21708e911" ...
summary(data)
## Date Description Humidity Location
## Length:107 Length:107 Length:107 Length:107
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Temature Time Weather Wind
## Length:107 Min. : 0.100 Length:107 Length:107
## Class :character 1st Qu.: 5.115 Class :character Class :character
## Mode :character Median :12.010 Mode :character Mode :character
## Mean :11.584
## 3rd Qu.:18.110
## Max. :23.160
## X_id
## Length:107
## Class :character
## Mode :character
##
##
##
Melakukan preprocessing data dengan menghapus simbol ° dari kolom numerik dan mengubahnya menjadi tipe numerik, serta mengekstraksi angka dari kolom Wind untuk konversi serupa. Selain itu, menghapus baris yang memiliki nilai NA dan menghapus baris duplikat untuk memastikan data yang bersih dan siap untuk analisis lebih lanjut.
# Menghapus simbol ° dari kolom numerik dan mengubahnya menjadi tipe numeric
data$Humidity <- as.numeric(gsub("°", "", data$Humidity))
data$Temature <- as.numeric(gsub("°", "", data$Temature))
# Ekstraksi angka dari kolom Wind dan mengubahnya menjadi tipe numeric
data$WindSpeed <- as.numeric(gsub("[^0-9]", "", data$Wind))
# Menghapus baris yang memiliki nilai NA
data <- na.omit(data)
# Menghapus duplikat
data <- data[!duplicated(data), ]
# Distribusi Variabel Numerik
par(mfrow = c(1, 3))
hist(data$Humidity, main = "Humidity Distribution", xlab = "Humidity", col = "skyblue", border = "white")
hist(data$Temature, main = "Temperature Distribution", xlab = "Temperature", col = "lightgreen", border = "white")
hist(data$WindSpeed, main = "Wind Speed Distribution", xlab = "Wind Speed", col = "lightcoral", border = "white")
Visualisasi ini menunjukkan distribusi tiga variabel numerik dalam dataset cuaca: 1.Distribusi Kelembaban (Humidity Distribution): Histogram pertama menampilkan distribusi kelembaban dalam data. Mayoritas kelembaban berkisar antara 28% hingga 34%, dengan puncak frekuensi pada sekitar 30%. 2.Distribusi Suhu (Temperature Distribution): Histogram kedua menunjukkan distribusi suhu. Suhu yang paling sering muncul adalah sekitar 28°C, dengan sebagian besar suhu berkisar antara 26°C hingga 30°C. 3.Distribusi Kecepatan Angin (Wind Speed Distribution): Histogram ketiga menggambarkan distribusi kecepatan angin. Kecepatan angin yang paling sering tercatat adalah sekitar 6 km/j, dengan rentang kecepatan angin bervariasi dari 0 km/j hingga sekitar 12 km/j.
# Suhu berdasarkan Hari
ggplot(data, aes(x = Date, y = Temature)) +
geom_boxplot(fill = "pink", color = "black") +
labs(title = "Distribusi Suhu Berdasarkan Hari", x = "Hari", y = "Suhu (°C)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent"))
Box plot ini menunjukkan distribusi suhu harian dari 15 hingga 20 Juni 2024. Setiap kotak menampilkan variasi suhu, dengan garis tengah menunjukkan median suhu harian. Terdapat fluktuasi suhu yang signifikan pada 17 dan 19 Juni, serta beberapa nilai pencilan yang muncul pada hari-hari tersebut.
# Kelembaban berdasarkan Hari
ggplot(data, aes(x = Date, y = Humidity)) +
geom_boxplot(fill = "purple", color = "black") +
labs(title = "Distribusi Kelembaban Berdasarkan Hari", x = "Hari", y = "Kelembaban (°C)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent"))
Box plot ini menunjukkan distribusi kelembaban harian dari 15 hingga 20 Juni 2024. Setiap kotak menggambarkan variasi kelembaban, dengan garis tengah menunjukkan median harian. Kelembaban bervariasi signifikan pada 17 dan 19 Juni, dengan beberapa nilai pencilan pada 18 dan 20 Juni.
# Kecepatan Angin berdasarkan Hari
ggplot(data, aes(x = Date, y = WindSpeed)) +
geom_boxplot(fill = "blue", color = "black") +
labs(title = "Distribusi Kecepatan Angin Berdasarkan Hari", x = "Hari", y = "Kecepatan Angin") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent"))
Box plot ini menunjukkan distribusi kecepatan angin harian dari 15 hingga 20 Juni 2024. Setiap kotak menggambarkan variasi kecepatan angin, dengan garis tengah menunjukkan median harian. Kecepatan angin bervariasi signifikan pada 17 dan 19 Juni, dengan nilai pencilan pada 15 Juni.
#Korelasi
cor_matrix <- cor(data[, c("Humidity", "Temature", "WindSpeed")], use = "complete.obs")
heatmap.2(cor_matrix, main = "Correlation Matrix", col = colorRampPalette(c("red", "white", "blue"))(20), scale = "none",
margins = c(10, 10), trace = "none", cexRow = 0.8, cexCol = 0.8, keysize = 1.5)
Heatmap ini menunjukkan matriks korelasi antara kecepatan angin, kelembaban, dan suhu. Warna biru menunjukkan korelasi positif, sementara warna merah menunjukkan korelasi negatif. Kelembaban dan suhu memiliki korelasi positif sedang, sementara kecepatan angin memiliki korelasi negatif dengan keduanya.
# Menghitung frekuensi kondisi cuaca
ggplot(data, aes(x = Weather)) +
geom_bar(fill = "lightgreen", color = "black") +
labs(title = "Frekuensi Jenis Cuaca", x = "Weather", y = "Frekuensi") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
theme(panel.background = element_rect(fill = "transparent", colour = NA))
Grafik batang ini menunjukkan frekuensi jenis cuaca yang tercatat. Hujan curah adalah yang paling sering terjadi, diikuti oleh sebagian berawan dan sedikit hujan curah. Jenis cuaca lainnya seperti badai petir, berawan, dan hujan ringan memiliki frekuensi yang lebih rendah.
# Word Cloud
text <- paste(data$Description, collapse = " ")
wordcloud(words = text, scale = c(3, 0.5), max.words = 100, random.order = FALSE, colors = brewer.pal(8, "Dark2"))
## Loading required namespace: tm
## Warning in tm_map.SimpleCorpus(corpus, tm::removePunctuation): transformation
## drops documents
## Warning in tm_map.SimpleCorpus(corpus, function(x) tm::removeWords(x,
## tm::stopwords())): transformation drops documents
Word cloud ini menampilkan kata-kata yang paling sering muncul dalam deskripsi cuaca. Kata-kata seperti “pukul,” “hujan,” “badai,” dan “turun” muncul lebih besar, menunjukkan bahwa kata-kata ini paling sering digunakan dalam deskripsi cuaca. Ini memberikan gambaran umum tentang pola dan tema yang ada dalam data deskripsi cuaca.