Dalam tutorial kali ini, jokoding.com akan berbagi mengenai cara visualisasi tabel Input-Output Jawa Timur yang bersumber dari website resmi Badan Pusat Statistik Provinsi Jawa Timur yang dapat dilihat pada tautan berikut https://jatim.bps.go.id/. Sebelum lebih jauh, ada baiknya diawali dengan sedikit pengertian terlebih dahulu.
Tabel input-output menggambarkan suatu sistem keterkaitan antar lapangan usaha (sektor) berupa aktivitas distribusi output maupun struktur inputnya. Sebagai contoh paling sederhana dalam memahami tabel input dan output ini adalah sekarung gabah yang baru dipanen atau merupakan output dari sektor pertanian akan menjadi input bagi sektor transportasi karena butuh diangkut, sektor transportasi ini kemudian akan menjadi input dari sektor industri karena sekarung gabah tadi akan digilih menjadi beras. Dari industri penggilingan akan dihasilkan output berupa beras, dari transportasi akan muncul margin perdagangan, dan seterusnya, keterkaitan inilah yang kemudian dicatat dalam sebuah tabel Input-Output.
Beberapa package yang dibutuhkan dalam tutorial kali ini adalah rvest yang berguna dalam proses web scraping data BPS, kemudian dplyr yang berguna untuk data manipulation, serta package chorddiag untuk visualisasi diagram chord. Apa itu diargram Chord? Pengertiannya dapat disimak dalam blog https://jatim.bps.go.id/
library(rvest)
library(dplyr)
library(chorddiag)
Pada tahapan kedua ini, dilakukan aktivitas web scraping untuk memperoleh data Tabel Input-Output Jawa Timur. Dalam praktiknya, ternyata dalam kasus Tabel Input-Output BPS Jawa Timur ini tidak bisa langsung discrape karena selectorGadget tidak dapat menemukan sejumlah node yang membungkus setiap data dalam tabel. Oleh karena itu, cara lain yang bisa dilakukan adalah dengan menscrape node menu unduh kemudian melakukan download otomatis dengan teknik action click. Setelah melakukan action click, datanya disimpan sementara dengan nama “hasil.xls”, ekstensi *xls ini juga menyesuaikan tabel I-O yang tertera dalam website BPS. Setelah itu diekstraksi dan diberi penamaan kolom tabel.
iojatim <- read_html("https://jatim.bps.go.id/statictable/2021/05/28/2148/tabel-input-output-provinsi-jawa-timur-transaksi-domestik-atas-dasar-harga-produsen-17-lapanganusaha-2016-juta-rupiah-.html")
download_link <- html_attr(html_nodes(iojatim, xpath = '//*[@id="column2"]/div[1]/a'), "href") %>%
paste("https://jatim.bps.go.id", ., sep = "")
download.file(download_link, tempfile(fileext = "hasil.xls"), mode = "wb")
data <- readxl::read_xls("C://Users//JOKOAD~1//AppData//Local//Temp//Rtmpa2I4Xx//file480c18de77f3hasil.xls")
## New names:
subset_df <- data[4:20, 3:19]
names(subset_df) <- paste0("v",seq(1, 17))
head(subset_df)
## # A tibble: 6 x 17
## v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 13015~ 4296.~ 82474~ 1445.~ 2384.~ 2123~ 372.~ 9373~ 1675~ 2.54~ 2069~ 0 0 4456~ 1110~ 9516~
## 2 5071.~ 50893~ 87806~ 10412~ 755.0~ 3009~ 0 0 109.~ 0 0 0 0 107.~ 0 0
## 3 16232~ 32034~ 21451~ 10388~ 17726~ 8573~ 1193~ 1169~ 1929~ 2816~ 1439~ 1149~ 3223~ 2241~ 6166~ 5933~
## 4 85590~ 20932~ 14522~ 32652~ 15635~ 2208~ 7090~ 1345~ 1280~ 8215~ 2101~ 9952~ 1789~ 8965~ 9996~ 1199~
## 5 22961~ 10116~ 14291~ 14934~ 13996~ 1130~ 3307~ 2037~ 3502~ 1790~ 1246~ 46.0~ 749.~ 1407~ 7744~ 6082~
## 6 34114~ 85703~ 11905~ 1716.~ 42020~ 1575~ 6375~ 2747~ 3906~ 1917~ 5371~ 2521~ 1292~ 1806~ 1112~ 9187~
## # ... with 1 more variable: v17 <chr>
Pada bagian ini, karena data yang akan divisualisasikan masih dalam bentuk teks atau karakter, maka perlu diubah struktur atau tipe datanya menjadi numerik dilanjutkan mengubahnya menjadi data matriks persegi berukuran 17 x 17 artinya 17 Lapangan Usaha (Sektor)
convert_to_numeric <- function(x) {
as.numeric(x)
}
for (i in 1:17) {
subset_df[[paste0("v", i)]] <- convert_to_numeric(subset_df[[paste0("v", i)]])
}
n <- as.matrix(subset_df, ncol = 17, nrow = 17)
head(n)
## v1 v2 v3 v4 v5 v6 v7 v8
## [1,] 13015371.435 4296.435 82474813 1445.427 2384.6166 212395.8 3.723679e+02 9373.10
## [2,] 5071.303 508936.211 8780665 10412861.021 755.0759 30095021.5 0.000000e+00 0.00
## [3,] 16232078.745 3203413.551 214515907 1038861.422 177261.0884 85732932.7 1.193726e+07 11690333.94
## [4,] 855900.271 2093239.011 14522875 32652688.943 156355.8266 220883.9 7.090386e+06 1345435.10
## [5,] 22961.285 10116.913 142918 14934.523 13996.2931 11308.4 3.307555e+04 20374.64
## [6,] 341149.023 85703.499 1190527 1716.366 42020.3904 15752570.9 6.375408e+04 274795.68
## v9 v10 v11 v12 v13 v14 v15
## [1,] 1.675842e+07 2.544128e+00 2069.871 0.000000e+00 0.000 445603.7302 111069.972
## [2,] 1.096889e+02 0.000000e+00 0.000 0.000000e+00 0.000 107.5619 0.000
## [3,] 1.929555e+07 2.816389e+06 1439227.274 1.149381e+06 3223752.467 2241146.7752 6166939.113
## [4,] 1.280702e+06 8.215604e+06 210106.237 9.952323e+05 1789242.950 896543.5805 999613.575
## [5,] 3.502333e+04 1.790999e+04 1246.888 4.601745e+01 749.801 14071.2762 7744.179
## [6,] 3.906818e+04 1.917631e+04 537176.658 2.521282e+06 129208.026 1806574.8498 1112534.911
## v16 v17
## [1,] 951661.66 728007.36
## [2,] 0.00 0.00
## [3,] 5933158.68 7351549.29
## [4,] 1199193.29 1274746.13
## [5,] 6082.67 88887.41
## [6,] 91876.28 385672.71
Akhirnya, bagian terakhirnya juga. Di bagian ini, visualisasi Diagram Chord memerlukan sebuah grup untuk pelabelan setiap sektor 1 sampai 17 kemudian dilanjutkan dengan visualisasinya. Jangan lupa untuk mengatur pewarnaan, ukuran font teks sehingga dapat memunculkan insight dari tabel I-O yang akan dianalisis, misalkan yang akan diungkap ke permukaan adalah sektor pertanian, pertambangan, dan industri.
grupnama <- c("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17")
greenpall <- colorRampPalette(c("darkgreen", "green", "lightgreen"))
mygreen <- greenpall(3)
mycol <- ifelse(1:ncol(n) %in% c(1, 2, 3), mygreen, "grey")
chorddiag(n, groupPadding = 0.01, groupColors = mycol, groupNames = grupnama)
grupnama <- c("Pertanian", "Pertambangan", "Industri", rep("Lainnya", ncol(n) - 3))
chorddiag(n, groupPadding = 0.01, groupColors = mycol, groupNames = grupnama,
ticklabelFontsize = 0.01, groupnameFontsize = 10, margin = 80)
Dari Diagram Chord terlihat bahwa peran dari sektor pertanian (hijau tua) dalam perekonomian Jawa Timur demikian besar. Sebab, sektor pertanian menjadi input terbesar bagi sektor industri. Disusul oleh besarnya porsi Sektor Industri menjadi input dan output bagi industri yang lain, misalkan output industri benang menjadi input bagi industri kain, output dari industri kain menjadi input bagi industri pakaian jadi. Demikian sedikit sharing kali ini, semoga bermanfaat dan jangan lupa untuk menyimak sharing lainnya dalam blog jokoding.com. Terima kasih.