setwd("C:\\Users\\FARHAN ABDILLAH\\Documents\\1 KULIAH\\SEMESTER 5\\Regresi Spasial\\Praktikum 3")
Data yang digunakan adalah Data Demografi Kabupaten Bogor yang
meliputi Jumlah Penduduk, Kepadatan Penduduk,
dan Jumlah Desa dan Kelurahan. Data bersumber dari Badan
Pusat Statistik dengan jumlah kecamatan sebanyak 40 kecamatan.
dataBogor <- rio::import("https://raw.githubusercontent.com/farhanabdillahh/Regresi-Spasial/main/Data/Data_KabBogor.csv")
head(dataBogor)
## Kabupaten Kecamatan Jumlah Penduduk Kepadatan Penduduk
## 1 Kabupaten Bogor Nanggung 99812 627
## 2 Kabupaten Bogor Leuwiliang 125552 1379
## 3 Kabupaten Bogor Leuwisadeng 77871 2200
## 4 Kabupaten Bogor Pamijahan 159236 1275
## 5 Kabupaten Bogor Cibungbulang 147554 3838
## 6 Kabupaten Bogor Ciampea 170206 5152
## Jumlah Desa dan Kelurahan Kode BPS Kode Kemendagri
## 1 11 ID3201010 32.01.21
## 2 11 ID3201020 32.01.14
## 3 8 ID3201021 32.01.39
## 4 15 ID3201030 32.01.17
## 5 15 ID3201040 32.01.16
## 6 13 ID3201050 32.01.15
Shapefile diperoleh dari website https://data.humdata.org/. Membaca data dapat dilakukan
dengan menggunakan fungsi st_read() dari paket
sf.
library(sf)
## Warning: package 'sf' was built under R version 4.2.3
## Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
map_indonesia <- st_read("idn_adm_bps_20200401_shp\\idn_admbnda_adm3_bps_20200401.shp", quiet = TRUE)
Gambaran data dapat ditampilkan dengan fungsi glimpse()
dari paket dplyr yang sudah kita persiapkan sebelumnya.
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
glimpse(map_indonesia)
## Rows: 7,069
## Columns: 17
## $ Shape_Leng <dbl> 0.2798656, 0.7514001, 0.6900061, 0.6483629, 0.2437073, 1.35…
## $ Shape_Area <dbl> 0.003107633, 0.016925540, 0.024636382, 0.010761277, 0.00116…
## $ ADM3_EN <chr> "2 X 11 Enam Lingkung", "2 X 11 Kayu Tanam", "Abab", "Abang…
## $ ADM3_PCODE <chr> "ID1306050", "ID1306052", "ID1612030", "ID5107050", "ID7471…
## $ ADM3_REF <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ ADM3ALT1EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ ADM3ALT2EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ ADM2_EN <chr> "Padang Pariaman", "Padang Pariaman", "Penukal Abab Lematan…
## $ ADM2_PCODE <chr> "ID1306", "ID1306", "ID1612", "ID5107", "ID7471", "ID9432",…
## $ ADM1_EN <chr> "Sumatera Barat", "Sumatera Barat", "Sumatera Selatan", "Ba…
## $ ADM1_PCODE <chr> "ID13", "ID13", "ID16", "ID51", "ID74", "ID94", "ID94", "ID…
## $ ADM0_EN <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indone…
## $ ADM0_PCODE <chr> "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID",…
## $ date <date> 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20…
## $ validOn <date> 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01…
## $ validTo <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((100.2811 -0..., MULTIPOLYGON (…
Selanjutnya akan dilakukan merged data peubah Kode BPS
dari dataBogor, dan peubah ADM3_PCODE dari
map_indonesia.
mapBogor<- map_indonesia %>%
inner_join(dataBogor, by = c("ADM3_PCODE" = "Kode BPS"))
mapBogor
## Simple feature collection with 40 features and 22 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 106.4011 ymin: -6.788518 xmax: 107.2271 ymax: -6.302208
## Geodetic CRS: WGS 84
## First 10 features:
## Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM3_REF ADM3ALT1EN
## 1 0.6791951 0.007535315 Babakan Madang ID3201140 <NA> <NA>
## 2 0.4109147 0.002394834 Bojong Gede ID3201220 <NA> <NA>
## 3 0.4390580 0.006390267 Caringin ID3201090 <NA> <NA>
## 4 0.5102952 0.006965585 Cariu ID3201160 <NA> <NA>
## 5 0.3901340 0.002740696 Ciampea ID3201050 <NA> <NA>
## 6 0.5133915 0.003848443 Ciawi ID3201100 <NA> <NA>
## 7 0.4949861 0.003834621 Cibinong ID3201210 <NA> <NA>
## 8 0.4685690 0.003125296 Cibungbulang ID3201040 <NA> <NA>
## 9 0.5020473 0.003757531 Cigombong ID3201081 <NA> <NA>
## 10 0.6194730 0.014518762 Cigudeg ID3201270 <NA> <NA>
## ADM3ALT2EN ADM2_EN ADM2_PCODE ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE
## 1 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 2 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 3 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 4 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 5 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 6 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 7 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 8 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 9 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## 10 <NA> Bogor ID3201 Jawa Barat ID32 Indonesia ID
## date validOn validTo Kabupaten Kecamatan Jumlah Penduduk
## 1 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Babakan Madang 115575
## 2 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Bojong Gede 292465
## 3 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Caringin 132480
## 4 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Cariu 52063
## 5 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Ciampea 170206
## 6 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Ciawi 115816
## 7 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Cibinong 366403
## 8 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Cibungbulang 147554
## 9 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Cigombong 98388
## 10 2019-12-20 2020-04-01 <NA> Kabupaten Bogor Cigudeg 135373
## Kepadatan Penduduk Jumlah Desa dan Kelurahan Kode Kemendagri
## 1 2641 9 32.01.05
## 2 10320 9 32.01.13
## 3 2809 12 32.01.27
## 4 306 10 32.01.08
## 5 5152 13 32.01.15
## 6 1493 13 32.01.24
## 7 7859 13 32.01.01
## 8 3838 15 32.01.16
## 9 1024 9 32.01.38
## 10 762 15 32.01.22
## geometry
## 1 MULTIPOLYGON (((106.8504 -6...
## 2 MULTIPOLYGON (((106.7707 -6...
## 3 MULTIPOLYGON (((106.8212 -6...
## 4 MULTIPOLYGON (((107.132 -6....
## 5 MULTIPOLYGON (((106.696 -6....
## 6 MULTIPOLYGON (((106.8468 -6...
## 7 MULTIPOLYGON (((106.8519 -6...
## 8 MULTIPOLYGON (((106.6935 -6...
## 9 MULTIPOLYGON (((106.8161 -6...
## 10 MULTIPOLYGON (((106.5647 -6...
Data spasial dan informasi demografi Kabupaten Bogor sudah tersedia
dalam satu dataframe. Untuk menyajikan dalam peta choropleth, beberapa
paket R dapat digunakan, salah satunya paket ggplot2 dengan
fungsi geom_sf().
library(ggplot2)
Konsep dari ggplot2 dalam visualisasi data adalah dengan
mengkombinasikan data, stat dan geom atau layer. Pada perintah berikut,
ggplot() akan menginisiasi layer kosong yang siap
ditambahkan layer-layer lain diatasnya. Lalu geom_sf() akan
memetakan data mapBogor, di mana setiap area/poligon akan
diberi gradasi warna sesuai nilai pada kolom JumlahPenduduk.
Jumlah_Penduduk <- ggplot() +
geom_sf(data=mapBogor, aes(fill=`Jumlah Penduduk`))
Jumlah_Penduduk
Selain kolom Jumlah Penduduk, dapat digunakan kolom
Kepadatan Penduduk untuk menggambarkan permasalahan
kependudukan di Kabupaten Bogor.
Kepadatan_Penduduk <- ggplot() +
geom_sf(data=mapBogor, aes(fill=`Kepadatan Penduduk`))
Kepadatan_Penduduk
Sebagai tambahan, disajikan juga data
Jumlah Desa dan Kelurahan yang ada di Kabupaten Bogor.
DesaKelurahan <- ggplot() +
geom_sf(data=mapBogor, aes(fill=`Jumlah Desa dan Kelurahan`))
DesaKelurahan
ggplot2 dilengkapi dengan banyak opsi untuk mengatur
tampilan dari output. Misalnya scale_fill_gradientn() untuk
mengatur gradasi warna (secara otomatis ataupun costum),
labs() untuk menambahkan judul grafik maupun keterangan
sumbu, theme() untuk mengatur tema (legenda, jenis dan
ukuran huruf, dan lain-lain), scale_**_continuous()
pengaturan sumbu tegak maupun sumbu mendatar. Selain itu, juga terdapat
color Palette yang dapat digunakan menggunakan library
RColorBrewer dengan function
brewer.pal(n,name). n adalah jumlah warna yang
digunakan. Terdapat banyak name yang digunakan, beberapa
contohnya antara lain BrBG, PRGn,
PiYG, PuOr, RdBu,
RdGy, RdYlBu, RdYlGn,
Spectral.
colorPalette <- RColorBrewer::brewer.pal(5, "RdYlBu")
Jumlah_Penduduk + scale_fill_gradientn(colors = colorPalette,
name = "Jumlah Penduduk") +
labs(title = "Jumlah Penduduk Kabupaten Bogor") +
theme(legend.text = element_text(size=7),
legend.title = element_text(size=7),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
title = element_text(size=12, face='bold'))
colorPalette = RColorBrewer::brewer.pal(5,"RdYlBu")
Kepadatan_Penduduk + scale_fill_gradientn(colors = colorPalette,
name = "Kepadatan Penduduk") +
labs(title = "Kepadatan Penduduk Kabupaten Bogor") +
theme(legend.text = element_text(size=7),
legend.title = element_text(size=7),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
title = element_text(size=12, face='bold'))
colorPalette = RColorBrewer::brewer.pal(5,"RdYlBu")
DesaKelurahan + scale_fill_gradientn(colors = colorPalette,
name = "Kepadatan Penduduk") +
labs(title = "Jumlah Desa/Kelurahan di Kabupaten Bogor") +
theme(legend.text = element_text(size=7),
legend.title = element_text(size=7),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
title = element_text(size=12, face='bold'))
Visualisasi geospasial interaktif dapat digunakan dengan packages
leaflet
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.2.3
# membuat custom palette warna
populationPalette <- colorNumeric(
palette = "RdYlBu",
domain = mapBogor$`Jumlah Penduduk`
)
# membuat custom popup
popupLabel <- paste0(
"<b>Kecamatan ", mapBogor$Kecamatan,"</b><br/>",
"Jumlah Penduduk (jiwa): ", mapBogor$`Jumlah Penduduk`, "<br/>",
"Kepadatan Penduduk (jiwa/km2): ", mapBogor$`Kepadatan Penduduk`, "<br/>",
"Jumlah Desa dan Kelurahan: ", mapBogor$`Jumlah Desa dan Kelurahan`) %>%
lapply(htmltools::HTML)
# membuat peta leaflet
leaflet(mapBogor) %>%
addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
addPolygons(weight = 1,
opacity = 1,
fillOpacity = 0.9,
label = popupLabel,
color = ~populationPalette(`Jumlah Penduduk`),
highlightOptions = highlightOptions(color = "white",
weight = 2,
bringToFront = TRUE) ) %>%
addLegend(position = "bottomright",
pal = populationPalette,
values = ~`Jumlah Penduduk`,
title = "Jumlah\nPenduduk",
opacity = 1) %>%
addLayersControl(position = 'topright',
baseGroups = c("Light Mode", "Dark Mode"),
options = layersControlOptions(collapsed = FALSE)) %>%
setView(lat = - 6.595, lng = 106.87, zoom = 10)
# membuat custom palette warna
populationPalette <- colorNumeric(
palette = "RdYlBu",
domain = mapBogor$`Kepadatan Penduduk`
)
# membuat peta leaflet
leaflet(mapBogor) %>%
addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
addPolygons(weight = 1,
opacity = 1,
fillOpacity = 0.9,
label = popupLabel,
color = ~populationPalette(`Kepadatan Penduduk`),
highlightOptions = highlightOptions(color = "white",
weight = 2,
bringToFront = TRUE) ) %>%
addLegend(position = "bottomright",
pal = populationPalette,
values = ~`Kepadatan Penduduk`,
title = "Kepadatan\nPenduduk",
opacity = 1) %>%
addLayersControl(position = 'topright',
baseGroups = c("Light Mode", "Dark Mode"),
options = layersControlOptions(collapsed = FALSE)) %>%
setView(lat = - 6.595, lng = 106.87, zoom = 10)
# membuat custom palette warna
populationPalette <- colorNumeric(
palette = "RdYlBu",
domain = mapBogor$`Jumlah Desa dan Kelurahan`
)
# membuat peta leaflet
leaflet(mapBogor) %>%
addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
addPolygons(weight = 1,
opacity = 1,
fillOpacity = 0.9,
label = popupLabel,
color = ~populationPalette(`Jumlah Desa dan Kelurahan`),
highlightOptions = highlightOptions(color = "white",
weight = 2,
bringToFront = TRUE) ) %>%
addLegend(position = "bottomright",
pal = populationPalette,
values = ~`Jumlah Desa dan Kelurahan`,
title = "Jumlah\nDesa\ndan\nKelurahan",
opacity = 1) %>%
addLayersControl(position = 'topright',
baseGroups = c("Light Mode", "Dark Mode"),
options = layersControlOptions(collapsed = FALSE)) %>%
setView(lat = - 6.595, lng = 106.87, zoom = 10)