Langsung ke konten utama

Web Scraping, Pivot Longer, dan Visualisasi Heatmap Data IPM (HDI) dengan R

Penerapan web scraping, pivot longer, dan visualisasi heatmap

Data manipulation merupakan istilah baru yang cukup terkenal dalam dunia Data Science. Data manipulation yang sebelumnya mengalami peyoratif makna, yakni berhubungan dengan aktivitas mengubah data sehingga tidak sama persis seperti kondisi aslinya, berubah seketika menjadi amelioratif makna yang merujuk pada bagaimana mengubah struktur data sedemikian rupa namun tidak mengubah data aslinya.

Salah satu contoh dari data manipulation adalah bagaimana mengubah struktur data dari yang awalnya berupa wide data frame menjadi longer data frame. Adapun teknik untuk menjalankan instruksi ini dikenal dengan istilah pivot longer. Dengan teknik ini, struktur data yang semula berbentuk melebar (wide) berubah menjadi format panjang. Ketika instruksi ini dijalankan, maka kolom-kolom yang terkandung dalam data tertentu akan berubah menjadi baris-baris bersesuaian dengan nilai dari setiap variabel pembentuk data awal.

Dengan pivot longer, tentu kebutuhan mengubah format data dari wide menjadi format long akan memerlukan waktu lebih cepat dibandingkan dengan melakukan transpose data yang justru perlu tahapan manual. Bila datanya masih berjumlah sedikit tentu hal ini bukanlah masalah, tetapi sebaliknya, bila datanya berjumlah puluhan kolom dan ribuan baris, tentu mengubah secara manual sangatlah kurang efisien.

Itu sekilas mengenai pivot longer. Berikutnya, praktikum dalam kesempatan kali ini diawali dengan memperoleh data frame yang bersumber dari laman jatim.bps.go.id berupa data Indeks Pembangunan Manusia atau Human Development Index (HDI) tahun 2021 - 2023. Data IPM ini akan diperoleh dengan menggunakan teknik web scraping mengingat API dari situs Badan Pusat Statistik Provinsi Jawa Timur bersifat public. Setelah datanya siap, tahapan berikutnya adalah menerapkan pivot longer sebagai praktikum data manipulation dan diakhiri dengan visualisasi data IPM atau HDI berupa heatmap untuk masing-masing kabupaten atau kota selama 2021 - 2023 menggunakan bahasa pemrograman R, berikut langkah demi langkahnya:


# aktivasi beberapa package untuk scrape data IPM atau HDI
library(rvest)
library(xml2)
library(stringr)
library(dplyr)
# deklarasi alamat url target scrape data
url <- "https://jatim.bps.go.id/indicator/26/615/1/indeks-pembangunan-manusia-hasil-long-form-sp2020-menurut-kabupaten-kota.html"
laman <- read_html(url)
laman
## {html_document}
## <html>
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
## [2] <body id="top" class="no-touch">\n\t<div style="display: none;z-index: 10 ...
# menscrape kolom nama kabupaten atau kota
kako <- laman %>% html_nodes('.vervar') %>% html_text()
kako <- kako[1:38]
kako
##  [1] "Kabupaten Pacitan"     "Kabupaten Ponorogo"    "Kabupaten Trenggalek" 
##  [4] "Kabupaten Tulungagung" "Kabupaten Blitar"      "Kabupaten Kediri"     
##  [7] "Kabupaten Malang"      "Kabupaten Lumajang"    "Kabupaten Jember"     
## [10] "Kabupaten Banyuwangi"  "Kabupaten Bondowoso"   "Kabupaten Situbondo"  
## [13] "Kabupaten Probolinggo" "Kabupaten Pasuruan"    "Kabupaten Sidoarjo"   
## [16] "Kabupaten Mojokerto"   "Kabupaten Jombang"     "Kabupaten Nganjuk"    
## [19] "Kabupaten Madiun"      "Kabupaten Magetan"     "Kabupaten Ngawi"      
## [22] "Kabupaten Bojonegoro"  "Kabupaten Tuban"       "Kabupaten Lamongan"   
## [25] "Kabupaten Gresik"      "Kabupaten Bangkalan"   "Kabupaten Sampang"    
## [28] "Kabupaten Pamekasan"   "Kabupaten Sumenep"     "Kota Kediri"          
## [31] "Kota Blitar"           "Kota Malang"           "Kota Probolinggo"     
## [34] "Kota Pasuruan"         "Kota Mojokerto"        "Kota Madiun"          
## [37] "Kota Surabaya"         "Kota Batu"
# menscrape IPM tahun 2021
ipm21 <- laman %>% html_nodes('.vervar+ .text-right') %>% html_text()
ipm21 <- ipm21[1:38] %>% as.numeric()
ipm21
##  [1] 69.45 71.81 70.40 73.29 71.48 73.31 71.48 67.65 69.20 72.62 69.24 69.34
## [13] 68.94 70.54 81.01 74.90 74.10 73.03 73.07 75.08 71.97 70.70 70.10 73.97
## [25] 76.98 65.42 64.86 68.78 67.74 79.15 79.27 82.77 75.20 76.83 79.34 82.27
## [37] 82.94 77.21
# menscrape IPM tahun 2022
ipm22 <- laman %>% html_nodes('td:nth-child(3)') %>% html_text()
ipm22 <- ipm22[3:40] %>% as.numeric()
ipm22
##  [1] 70.19 72.59 71.28 74.14 72.25 74.20 72.23 68.48 69.80 73.15 69.91 69.76
## [13] 69.56 71.29 81.37 75.61 74.66 73.95 73.51 75.76 72.62 71.15 70.79 74.83
## [25] 77.62 66.11 65.44 69.35 68.49 80.12 80.15 83.38 76.08 77.71 80.19 83.02
## [37] 83.32 78.13
# menscrape IPM tahun 2023
ipm23 <- laman %>% html_nodes('.text-right~ .text-right+ td') %>% html_text()
ipm23 <- ipm23[1:38] %>% as.numeric()
ipm23
##  [1] 70.94 73.18 71.96 74.65 72.84 74.68 73.00 69.37 70.42 73.79 70.56 70.65
## [13] 70.36 71.91 81.88 76.23 75.16 74.70 74.02 76.30 73.28 71.80 71.40 75.29
## [25] 78.44 66.82 66.19 70.32 69.13 80.97 80.78 84.00 76.93 78.30 80.90 83.71
## [37] 83.99 79.07
# menjadikan data frame
ipmjatim <- data.frame(id = seq(1:38), kabkot = kako, ipm21, ipm22, ipm23)
ipmjatim
##    id                kabkot ipm21 ipm22 ipm23
## 1   1     Kabupaten Pacitan 69.45 70.19 70.94
## 2   2    Kabupaten Ponorogo 71.81 72.59 73.18
## 3   3  Kabupaten Trenggalek 70.40 71.28 71.96
## 4   4 Kabupaten Tulungagung 73.29 74.14 74.65
## 5   5      Kabupaten Blitar 71.48 72.25 72.84
## 6   6      Kabupaten Kediri 73.31 74.20 74.68
## 7   7      Kabupaten Malang 71.48 72.23 73.00
## 8   8    Kabupaten Lumajang 67.65 68.48 69.37
## 9   9      Kabupaten Jember 69.20 69.80 70.42
## 10 10  Kabupaten Banyuwangi 72.62 73.15 73.79
## 11 11   Kabupaten Bondowoso 69.24 69.91 70.56
## 12 12   Kabupaten Situbondo 69.34 69.76 70.65
## 13 13 Kabupaten Probolinggo 68.94 69.56 70.36
## 14 14    Kabupaten Pasuruan 70.54 71.29 71.91
## 15 15    Kabupaten Sidoarjo 81.01 81.37 81.88
## 16 16   Kabupaten Mojokerto 74.90 75.61 76.23
## 17 17     Kabupaten Jombang 74.10 74.66 75.16
## 18 18     Kabupaten Nganjuk 73.03 73.95 74.70
## 19 19      Kabupaten Madiun 73.07 73.51 74.02
## 20 20     Kabupaten Magetan 75.08 75.76 76.30
## 21 21       Kabupaten Ngawi 71.97 72.62 73.28
## 22 22  Kabupaten Bojonegoro 70.70 71.15 71.80
## 23 23       Kabupaten Tuban 70.10 70.79 71.40
## 24 24    Kabupaten Lamongan 73.97 74.83 75.29
## 25 25      Kabupaten Gresik 76.98 77.62 78.44
## 26 26   Kabupaten Bangkalan 65.42 66.11 66.82
## 27 27     Kabupaten Sampang 64.86 65.44 66.19
## 28 28   Kabupaten Pamekasan 68.78 69.35 70.32
## 29 29     Kabupaten Sumenep 67.74 68.49 69.13
## 30 30           Kota Kediri 79.15 80.12 80.97
## 31 31           Kota Blitar 79.27 80.15 80.78
## 32 32           Kota Malang 82.77 83.38 84.00
## 33 33      Kota Probolinggo 75.20 76.08 76.93
## 34 34         Kota Pasuruan 76.83 77.71 78.30
## 35 35        Kota Mojokerto 79.34 80.19 80.90
## 36 36           Kota Madiun 82.27 83.02 83.71
## 37 37         Kota Surabaya 82.94 83.32 83.99
## 38 38             Kota Batu 77.21 78.13 79.07
# aktivasi package tidyr
library(tidyr)
# mengubah dari bentuk wide ke long dengan pivot_longer()
pivotku <- ipmjatim %>%
  pivot_longer(cols = -c(id, kabkot),
               names_to = c("tahun"),
               values_to = "ipm")
pivotku
## # A tibble: 114 x 4
##       id kabkot                tahun   ipm
##    <int> <chr>                 <chr> <dbl>
##  1     1 Kabupaten Pacitan     ipm21  69.4
##  2     1 Kabupaten Pacitan     ipm22  70.2
##  3     1 Kabupaten Pacitan     ipm23  70.9
##  4     2 Kabupaten Ponorogo    ipm21  71.8
##  5     2 Kabupaten Ponorogo    ipm22  72.6
##  6     2 Kabupaten Ponorogo    ipm23  73.2
##  7     3 Kabupaten Trenggalek  ipm21  70.4
##  8     3 Kabupaten Trenggalek  ipm22  71.3
##  9     3 Kabupaten Trenggalek  ipm23  72.0
## 10     4 Kabupaten Tulungagung ipm21  73.3
## # ... with 104 more rows
# visualisasi heatmap
library(ggplot2)
ggplot(pivotku, aes(x = tahun, y = kabkot, fill = ipm)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "red") +
  labs(title = "Heatmap IPM Jawa Timur 2021 - 2023", fill = "IPM") +
  theme_minimal()

plot of chunk unnamed-chunk-12

Demikian sedikit sharing kali ini, semoga sedikit ini dapat bermanfaat. Selamat memahami dan mempraktikkan!

Komentar

Postingan populer dari blog ini

Mencari P - Value dan Titik Kritis Uji F, Uji t, Uji Chi Square, dan Uji Z Normal dengan R

Mencari nilai p-value dan titik kritis Bagi teman-teman yang pernah mengenal statistika, pasti familier dengan istilah p-value dan titik kritis. P-value biasanya didefinisikan sebagai probabiltas atau peluang maksimal yang diamati dari hasil uji statistik, bahasa gampangnya adalah besarnya kesalahan penelitian berdasarkan uji statistik. Sebagai contoh sederhana, dari 100 orang dengan nama masing-masing dan diklasifikasikan ke dalam gender nama perempuan dan nama laki-laki, didapatkan nilai p-value uji statistiknya sebesar 0,05 atau 5%. Itu artinya, dari 100 orang, ada kemungkinan sebanyak 5 orang yang namanya salah klasifikasi. Dari namanya terdeteksi sebagai nama perempuan, padahal aktualnya yang bersangkutan bergender laki-laki. Sedangkan titik kritis atau titik uji adalah nilai batas pengujian hipotesis statistik, apakah masuk dalam wilayah tolak hipotesis, ataukah gagal menolaknya. Titik ini berkaitan erat dengan nilai p-value . Kalau biasanya kita mendapatkan kedua nilai ini da...

Cara Mendowload dan Install R serta RStudio di Windows (Step by Step)

Cara Download dan Install R serta R Studio di Windows Halo teman-teman, mohon maaf karena beberapa waktu ini, blog ini sempat vakum dari unggahan. Kali ini saya akan coba berbagai mengenai bagaimana cara mengunduh ( download ) dan menginstal ( install ) program R sekaligus R Studio khususnya di Windows. Unggahan kali ini sedikit terbalik karena semestinya saya unggah terlebih dahulu pertama kali di blog ini, namun bukan masalah, mengingat kemarin ada beberapa pihak yang meminta untuk menerangkap bagaimana tahapan mengunduh dan instalasi R dan R Studio, jadinya saya dahulukan pada unggahan ini sebelum pembahasan mengenai Data Mining , Data Science , atau bahasan Big Data kita terlampau jauh. Baik, kita akan mulai dengan bagaimana mengunduh R dan R Studio melalui mesin pencari Google. R dan R Studio ini memang beberapa waktu terakhir ini booming , apalagi dengan munculnya konsep mengenai Big Data , Data Modelling, Data Mining, dan Data Science serta Data Visualization . Sebenarnya, men...

Analisis Tipologi Klassen (Klassen Typology) dan Visualisasi Spasialnya dengan R

Tipologi Klassen dan visualisasinya dengan R Halo teman-teman, sebelumnya kita telah membahas tentang analisis Shift Share dan Location Quotient (LQ) dengan menggunakan R. Kali ini, kita akan membahas mengenai satu lagi alat analisis yang sebenarnya merupakan alat analisis tiga serangkai dari SS dan LQ, yaitu analisis Tipologi Klassen. Dalam penelitian ekonomi kewilayahan, ketiga analisis ini seringkali digunakan, baik dalam rangka melihat perkembangan dan transformasi struktur ekonomi suatu wilayah maupun melihat keunggulan kompetitif dan keunggulan komparatif wilayah satu dengan wilayah lainnya dengan mengacu wilayah referensi. Terlebih dulu, sebelum melakukan visualisasi spasial menggunakan fungsi plot(), ada baiknya kita bahas terlebih dahulu mengenai Tipologi Klassen itu sendiri. Tipologi Klassen merupakan teknik pengelompokan sektor, subsektor, lapangan usaha, atau komoditas tertentu di wilayah analisis berdasarkan pertumbuhan nilai tambah wilayah analisis terhadap nasional atau...