Persiapan Data

Set Direct

setwd("C:\\Users\\FARHAN ABDILLAH\\Documents\\1 KULIAH\\SEMESTER 5\\Regresi Spasial\\Praktikum 3")

Import Data

Data Demografi Kabupaten Bogor

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

Data Spasial

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 (…

Merged Data

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().

Visualisasi Geospasial

Visualisasi Normal

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 Kabupaten Bogor

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 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.

Jumlah Desa & Kelurahan Kabupaten Bogor

DesaKelurahan <- ggplot() +  
  geom_sf(data=mapBogor, aes(fill=`Jumlah Desa dan Kelurahan`))
DesaKelurahan

Visualisasi Modifikasi

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.

Jumlah Penduduk Kabupaten Bogor

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'))

Kepadatan Penduduk Kabupaten Bogor

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'))

Jumlah Desa & Kelurahan Kabupaten Bogor

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 Interaktif

Visualisasi geospasial interaktif dapat digunakan dengan packages leaflet

library(leaflet)
## Warning: package 'leaflet' was built under R version 4.2.3

Jumlah Penduduk Kabupaten Bogor

# 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)

Kepadatan Penduduk Kabupaten Bogor

# 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)

Jumlah Desa & Kelurahan Kabupaten Bogor

# 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)