featured image

3D Visualisation Kasus Covid-19 Perkelurahan di Surabaya

Intro Jadi kali ini saya ingin mencoba package rayshader untuk 3D visualisation, berhubung kasus Covid-19 di Surabaya saat ini sangat mengkhawatirkan (zona hitam) per hari ini, maka saya coba kasus Covid-19 di Surabaya ini sebagai use case, mungkin ada manfaat yang bisa didapat nanti. rayshader sendiri fungsi utamanya adalah membuat 3D graph terutama untuk map, topografi, kontur, render satelit dan bisa juga untuk men-translate atau membuat efek 3D pada grafik ggplot seperti yang akan saya coba kali ini.
featured image

Blogging dengan R Blogdown, Hugo dan Netlify

Akhirnya saya menengok lagi blog pribadi saya yang sudah lama terbengkalai. Sebagai informasi, blog lama saya dibuat menggunakan blogspot dan memang sudah dari awal isinya seputar data dan lebih technical. Sekarang saya menggunakan Hugo, R Blogdown, Github dan Netlify, alasannya karena lebih mudah untuk blog pribadi dengan tema techincal dan tentu saja karena saya banyak menggunakan dan membahas R di blog saya. Pada post ini saya akan berbagi bagaimana membuat blog dengan R menggunakan blogdown hingga hosting di Netlify.

Disclaimer : Jika anda ingin membuat blog yang bukan bertema technical dan tidak banyak membutuhkan snippet code, grafik dll, Blogspot, Wordpress dan platform serupa sudah sangat cukup untuk kebutuhan anda. Pun, jika anda berniat membuat technical blog dan anda butuh kepraktisan dan fitur lengkap, medium.com juga lebih dari cukup. Cara yang akan saya bahas ini bisa jadi lebih ribet dan memusingkan untuk yang belum terbiasa. Tapi, kalo anda butuh technical blog yang lebih fleksibel, personal dan anda orangnya semangat belajar hal-hal baru, maka tidak ada salahnya membaca sharing saya ini.

Dengan menggunakan R blogdown, berarti anda harus setuju blog anda akan menggunakan Hugo. Sebagai informasi Hugo adalah salah satu static site generator. Selain Hugo ada static site generator lain seperti Jekyll, Gatsby, dll.

Pre-Request

Selamat datang orang yang semangat belajarnya tinggi. Untuk membuat blog sesuai post ini, maka anda harus punya/melakukan hal-hal berikut.

  1. Membaca blogdown online book dari pembuatnya langsung. Setidaknya chapter 1 dulu.
  2. R Studio dan Git terinstall di device anda. Apa? belum pake R studio? Anda WAJIB pakai demi kebaikan & kemudahan anda sendiri. Ga cuma untuk keperluan blogging tapi pemakaian R sehari-hari juga.
  3. Github account. Harus banget pake github? Yes, you should!. Github memang menyebalkan untuk orang non-hardcore programmer kayak saya. Saya benci belajar git, walaupun tahu manfaatnya. Tapi saya harus belajar github, dan anda juga!. bisa baca disini Happy Git and GitHub for the useR

Workflow

workflow Saya akan bagi stepnya menjadi 4 bagian tentang apa yang harus anda lakukan di:

  1. Github
  2. Terminal (command prompt kalo di windows)
  3. RStudio
  4. Netlify

1. Di Github

Hal pertama yang dilakukan adalah membuka github dan masuk ke akun anda (sign up jika belum punya akun).

1.1 Buat new repository

Buat repo baru beri nama apapun, misalnya mypersonal-blog. Centang initialize with README, beri deskripsi singkat kalo anda mau. Biarkan Add .gitignore dan Add license sebagai None. Seperti contoh dibawah ini: create repo

1.2 Clone repository

Buka repo yang baru anda buat dan klik clone this repo. Di sebelah kanan atas ada button hijau dengan tulisan Clone or Download. Pilih clone with HTTPS lalu copy link yang ada. Link yg ter-copy harusnya : https://github.com/yourusername/repo-name.git. Contoh: https://github.com/idrusfachr/personal-blog.git

2. Di Terminal

Buka terminal di laptop anda, jika menggunakan windows search “cmd” dan klik command prompt. Langkah ini bertujuan mendownload remote repository yang baru anda buat di Github ke device anda dan selanjutnya akan saling sinkron.

2.1 Buat folder baru di device

Sebelum menggunakan terminal terlebih dulu buatlah folder baru yang akan digunakan menaruh file-file blog anda nanti. Misal buat folder baru di dalam folder C:/Documents bernama personal-blog.

2.2 Clone repo melalui terminal

Buka terminal, di terminal/command prompt arahkan ke folder baru yang sudah dibuat dengan cara ketik : cd “/Documents/personal-blog/” enter. Skrg terminal anda aktif di dalam folder personal-blog. Setelah itu ketik git clone [Paste link repo yang diperoleh di step 1] ke dalam terminal.

1
git clone https://github.com/yourusername/repo-name.git

klik enter, maka file-file di repo github akan terdownload ke dalam folder yang sudah anda buat.

Selesai urusan perterminalan.

3. Di R Studio

Sampai di bagian yang mungkin paling familiar dengan anda yaitu R Studio. Di Rstudio inilah sebagian porsi blogging dihabiskan mulai dari memilih tema, atur layout, membuat dan publish konten dll.

3.1 Setup

Langkah pertama adalah install package yang dibutuhkan dan set R project di device.

3.1.1. Install blogdown dan Hugo di RStudio

blogdown adalah package yang dibuat khusus untuk kebutuhan blogging menggunakan R, seperti juga bookdown untuk mempublish buku melalui R. Dengan blogdown kita bisa mengatur blog kita dari dalam R Studio.

1
2
  ## Install from CRAN
  install.packages('blogdown')

3.1.2. Install Hugo

Setelah blogdown terinstall selanjutnya adalah install Hugo kedalam R.

1
2
3
4
blogdown::install_hugo()
# or
library(blogdown)
install_hugo()

3.1.3. Set project directory

Di pojok kanan atas pilih File -> New Project -> Existing directory. Pilih folder yang sudah dibuat di step 2 yang sudah berisi file hasil clone repo github anda. Kemudian create project. Contoh diatas adalah project directory saya, pastikan path project anda sesuai dengan folder yang sudah anda buat di step sebelumnya.

3.1.4. Setting

Sekarang anda harusnya ada di dalam project yang barus saja dibuat. Tahap terakhir di bagian set up adalah setting. Sekarang di viewer pane R studio anda seharusnya ada file bernama .gitignore (jika belum ada, pastikan lagi sudah melakukan semua step-step sebelumnya). Buka file tersebut dan anda perlu menambahkan beberapa line ke dalam file ini. Lakukan seperti screenshoot dibawah. 4 baris pertama di file ini otomatis di-generate saat clone repo kedalam folder project. Baris setelahnya perlu anda tambahkan sendiri. Jika tidak menggunakan windows, ganti line keenam dengan .DS_store. Line terakhir public/ diperlukan jika anda akan menggunakan Netlify (sebaiknya iya, baca bagian Netlify di akhir tulisan ini) untuk menghosting blog anda.

3.2 Saatnya membuat blog

Sekarang kita siap untuk membuat blog di dalam R Studio. Untuk membuat blog baru cukup jalankan command blogdown::new_site(). Tapi…. Sebelumnya pasti anda butuh tema atau tampilan blog anda.

3.2.1. Memilih tema

Ada banyak tema yang tersedia di Hugo. Di blogdown online book ada beberapa rekomendasi tema yang bisa dipertimbangkan. Untuk sebagai mahasiswa, dosen, researcher ada tema yang sangat direkomendasikan dan sudah populer dikalangan akademisi, hugo-academic.

Saya sendiri memilih tema Love It untuk blog saya. Saran: jika anda tidak suka keribetan dan lebih mementingkan isi blog anda dibanding tampilan, sebaiknya menggunakan tema default dari blogdown yaitu hugo-lithium. Set-up custom tema bisa menyita banyak waktu jika belum terbiasa.

Setelah memilih tema, sekarang bisa membuat site baru anda.

  • Jika ingin menggunakan tema default
1
blogdown::new_site()  #menggunakan default theme hugo-lithium
  • Jika menggunakan tema custom
1
2
3
4
5
6
7
#misal menggunakan hugo-academic theme
blogdown::new_site(theme = "gcushen/hugo-academic", theme_example = TRUE) 

#Atau

#misal menggunakan tema yang saya pakai
blogdown::new_site(theme = "dillonzq/LoveIt", theme_example = TRUE) 

3.2.2. Edit blog

Selamat, atas lahirnya website baru anda. Langkah selanjutnya adalah mencobanya, membuat first post dsb. Dalam bab ini, saatnya anda banyak-banyak membaca blogdown book terutama chapter 1.3 hingga 1.7.

Untuk melihat tampilan awal website anda gunakan addins serve site atau dengan command blogdown::serve_site(). Anda akan melihat preview website anda di view pane R studio atau di port http://127.0.0.1:XXXX/ di browser setelah menjalankan serve_site(). Gunakan serve_site() untuk melihat perubahan yang anda buat sebelum mempublish perubahan yang anda buat. Gunakan stop_serve() untuk keluar dari mode preview.

Saya menyarankan untuk menggunakan R Studio Addins untuk melakukan command-command misalnya serve site, membuat post baru, insert image dsb. Addins untuk blogdown seharusnya otomatis terinstall di R Studio anda saat install blogdown package.

  • Salah satu langkah awal yang perlu dilakukan adalah mengedit file config.tomlanda. Disinilah konfigurasi penting dalam blog anda berada. Langkah paling minimal adalah dengan menyamakan konfigurasi file config.toml anda dengan file config di example site dari tema yang anda gunakan. Contoh config di tema hugo-lithium. Contoh config dari blog saya. Yang paling wajib diganti adalah baseUrl, set dengan domain yang anda miliki (misal sudah punya) dan harus diakhiri backslash / (misal : “https://example.com/"). Contoh diblog ini, saya menggunakan base URL “https://idrusfachr.netlify.com/" karena saya ingin menggunakan Netlify dan subdomain gratis dari Netlify pasti mengandung xxxx.netlify.com, suatu saat jika saya membeli domain baru dengan nama “www.idrusfachr.com/" maka saya harus mengganti baseURL di file config saya dengan URL tersebut.

  • Membuat post baru bisa dilakukan dengan command blogdown::new_post() atau dengan Addins. Klik Addins, pilih new post dan akan muncul panel sebagai berikut. Isikan judul post anda, nama author, jenis file (gunakan .RMarkdown jika anda butuh run-able R code dipost anda), pilih subdirectory tempat post akan disimpan. Post harus disimpan dibawah folder content/post (kebanyakan), maka anda harus mengisi subdirectory dengan post (somehow tema yang saya pakai menggunakan subdir posts, sehingga saya harus mengisinya dengan posts). Kenapa ini penting? karena semua file dibawah folder content/ akan dicopy secara otomatis ke folder public/ yang akan dirender menjadi html file sehingga bisa muncul di-blog, jika tidak berada dibawah folder content/ maka tidak akan muncul di-blog anda. Selanjutnya pilih tanggal, tag, category dsb yang diperlukan. Jika sudah klik tombol Done, anda akan diarahkan ke file baru di R Studio anda yang bisa anda isi dengan konten yang akan dibuat. Dengan konfigurasi diatas maka akan muncul Rmarkdown file baru sebagai berikut. Anda tinggal mengisi konten anda dibawah garis ---. Tutorial menulis di markdown.

  • Simpan image dan file yang ingin anda tambahkan di post anda di folder static/. Jika anda ingin menambahkan image dipost gunakan addins Insert Image atau gunakan ![](/images/chart.png) di file markdown. Contoh tersebut berarti saya sudah menyimpan image bernama chart.png di dalam folder static/images/.

  • Anda bisa menambahkan fitur-fitur lain seperti Disqus komentar, google analytics, sytax highlighter dll.

  • Gunakan terminal di R studio untuk sync dengan github anda. Setiap melakukan perubahan di blog misal membuat post baru, edit config, dsb, tambahkan file yang baru diedit dengan git add kemudian commit perubahan tersebut ke github anda dengan git commit, setelah selesai melakukan editing, cek preview dengan serve_site() dan puas dengan hasilnya, segera push perubahan yang anda lakukan di lokal (device anda) ke remote repo di github dengan git push. Terminal di R studio terdapat di panel yang sama dengan console. Command penting:

    • git add -A untuk menambahkan semua file yang sudah diedit
    • git commit -m "isi caption" untuk commit changes yang sudah dibuat di file-file anda. Ganti caption dengan info yang relevan dengan perubahan yang dilakukan.
    • git push menyimpan perubahan yang dilakukan di lokal (laptop) anda ke remote repository (Github repo) anda.

Semua pengaturan website anda bisa dilakukan di dalam R Studio termasuk edit layout, tampilan dsb. Sudah banyak referensi baik di blogdown book maupun artikel lain yang bisa dijadikan referensi untuk customise lebih lanjut sesuai kebutuhan.

3.3. Rangkuman workflow

Jika dirangkum, workflow yang sebaiknya dilakukan di R Studio adalah berikut:

  1. Buka Rstudio project dari blog anda
  2. Gunakan serve site Addins
  3. Lihat preview site anda di viewer pane atau view di browser http://127.0.0.1:xxxx (bisa dilihat diconsole setelah melakukan serve site).
  4. Pilih file yang ingin anda edit di file pane R Studio
  5. Setelah melakukan editing, save file dengan tombol save atau (ctrl+s). Jangan gunakan tombol knit!). Console R Studio akan reload, view panel akan terupdate dengan perubahan yang baru dilakukan, begitu juga dengan browser setelah anda refresh. Tapi ingat, ini masih dilokal/komputer anda saja, belum live di production.
  6. Jika masih belum puas dengan perubahan/ada revisi, ulangi lagi step 4-5. Setelah puas, lakukan git add, commit dan push perubahan anda ke Github.

4. Di Netlify

Akhirnya sampai di step terakhir. Sebagaimana ditunjukkan di blogdown book bagian deployment, ada beberapa opsi selain Netlify untuk deploy website anda, misalnya Github page yang juga sering dipakai. Tapi berdasarkan review, Netlify lebih difavoritkan dikalangan developer atau pengguna static site. Hal itu karena kemudahan, security dan scalability yang ditawarkan. Perbandingan Netlify vs Github page.

Anggap saja Netlify sebagai tempat hosting sekaligus yang mengurus server website. Sebagaimana kalau kita blogging dengan platform tradisional kita juga membutuhkan tempat hosting agar website kita bisa live dan bisa diakses pembaca.

Disinilah github berfungsi karena Netlify akan connect dengan repo blog yang sudah kita buat di Github. Segala perubahan yang ada di repo setelah kita melakukan git push, akan secara otomatis ter-update dan dideploy oleh Netlify secara realtime (continues deployment). Jadi setelah anda melakukan perubahan di blog melalui komputer, kemudian commit dan push ke repo gitub, dalam hitungan detik Netlify akan memroses perubahan tersebut dan akan di deploy di production (live website) dan perubahannya langsung bisa diakses oleh pembaca webite anda.

4.1 Deploy time

Anda bisa mengikuti instruksi ini atau ini. Tapi menggunakan Netlify sangat mudah dan simple.

  1. Sign up menggunakan akun Github. Pergi ke www.netlify.com dan sign-up menggunakan akun github.
  2. Login dan pilih New site from Git -> Continues deployment: pilih Github.
  3. Setelah itu, pilih repo di Github anda. Pilih repo yang berisi blogdown project pastinya. Misal username/mypersonal-blog.
  4. Setelah memilih repo berisi blog anda, selanjutnya lakukan deployment configuration. Ada 2 hal penting yang perlu di-set. build command dan publish directory (yaitu folder public/). Contoh basic konfigurasi dibawah ini. Cek versi hugo yang terinstall di device di terminal dengan command hugo version. Deploy site dan tunggu beberapa menit Netlify akan build site anda. Setelah selesai anda akan mendapat random subdomain abcd-xyz-1234.netlify.com. Tenang, anda bisa mengganti abcd-xyz-1234 dengan nama yang lebih proper misal idrusfachr.netlify,com. Suatu saat jika anda ingin membeli domain anda bisa mengganti subdomain netlify dengan domain anda misal “domainku.id” dan jangan lupa ganti baseURL di file congif.toml setiap anda mengganti nama domain.

Sekarang, website anda sudah live menggunakan blogdown, Github dan Netlify.

Penutup

Anda bisa melakukan advance setting misal mengganti warna tampilan, font, layout, menambah page section, customise home, dsb. Tentu saja harus siap berurusan dengan CSS, Js dan html file. Sepanjang tidak urgent sekali, sebaiknya hindari melakukan perubahan yang terlalu advance untuk menghindari error dsb.

Selamat! telah berhasil membuat blog baru anda. Jika belum berhasil, setidaknya sudah nyemplung, sedikit lagi inshaa Allah berhasil. Terima kasih sudah mengikuti post yang panjang ini. Semoga bermanfaat!

Salam.

Ref utama:

featured image

Kinerja Pembangunan Manusia Indonesia

IPM adalah salah satu Indikator penting dalam mengukur kinerja pemerintah baik daerah maupun pusat. Pada periode 2010 hingga 2015 provinsi-provinsi di luar pulau Jawa dengan status IPM rendah atau sedang menujukkan perkembangan IPM yang positif.

Latar Belakang

Indeks Pembangunan Manusia (IPM) menurut BPS satu indikator penting dalam mengukur keberhasilan pemabangunan manusia suatu wilayah atau Negara. IPM menjelaskan tentang bagaimana penduduk suatu wilayah/Negara dapat mengakses hasil pembangunan dalam memperoleh pendapatan, pendidikan dan sebagainya. Di Indonesia sendiri, IPM termasuk data strategis karena tidak hanya digunakan sebagai ukuran kinerja pemerintah, tetapi IPM digunakan juga sebagai salah satu alokator penentuan Dana Alokator Umum (DAU). Oleh karena itu, data IPM menjadi sangat penting untuk diperhatikan dalam memantau perkembangan pembangunan suatu wilayah/Negara.

Overview

Pada kesempatan kali ini, akan dilakukan analisa terhadap data IPM tiap provinsi di Indonesia periode 2010 hingga 2015 yang dipublikasikan oleh BPS. Pertama, mari kita lihat bagaimana perkembangan IPM provinsi-provinsi di Indonesia. Perkembangan IPM Tiap Provinsi dari Tahun 2010-2015

BPS mengategorikan IPM menjadi empat kategori sebagai berkut:

  • IPM < 60 : IPM rendah
  • 60 < IPM < 70 : IPM sedang
  • 70 < IPM < 80 : IPM tinggi
  • IPM > 80 : IPM sangat tinggi

Pada grafik diatas terlihat ada beberapa provinsi yang mengalami kenaikan status IPM dari sedang ke tinggi seperti Banten, Riau dan Sulawesi Utara serta dari rendah ke sedang yaitu Sulawei Barat dan Papua Barat. Provinsi lain statusnya cenderung stagnan selama 2010 hingga 2015. Sekilas juga dapat kita lihat bahwa wilayah Indonesia timur masih tertinggal dalam pembangunan manusia dari wilayah-wilayah lain di Indonesia. Catatan : Provinsi Kalimantan Utara baru disahkan tahun 2012 sehingga nilai IPM tahun 2010 hingga 2012 masih kosong.

Provinsi Berkinerja Terbaik

Selanjutnya, kita akan melakukan analisa lebih dalam untuk mengetahui provinsi mana yang melakukan perbaikan signifikan dalam pembangunan manusia. Untuk itu, ukuran yang lebih sesuai untuk menggambarkan kinerja pemerintah provinsi dalam pembangunan manusia adalah laju pertumbuhan IPM dari tahun ke tahun dibandingkan nilai IPM yang dimiliki. Pertumbuhan IPM Perprovinsi

Dari grafik diatas dapat kita lihat bahwa tiga provinsi dengan laju pertumbuhan IPM terbesar berturut-turut adalah NTB, NTT dan Kalimantan Barat. Cukup menarik, dari sepuluh besar petumbuhan IPM terbesar, hanya Jawa Timur yang berasal dari pulau Jawa. Selebihnya adalah provinsi di luar pulau Jawa. Sisi positifnya adalah pembangunan di luar Jawa sudah semakin baik selama periode 2010-2015. Rata-rata Pertumubhan IPM Perprovinsi

Grafik diatas adalah perbandingan rata-rata pertumbuhan IPM manusia tiap provinsi dengan rata-rata pertumbuhan Nasional. Provinsi dengan status IPM tinggi (70 – 80) seperti DKI Jakarta, DI Yogyakarta dan Bali rata-rata laju pertumbuhannya justru di bawah rata-rata nasional. IPM 2010 vs Rata-rata Pertumbuhan

Grafik diatas memperkuat temuan bahwa nilai IPM awal berbanding terbalik dengan rata-rata laju pertumbuhan. Semakin tinggi nilai IPM awal semakin rendah rata-rata laju pertumbuhannya dengan nilai korelai 0,65.

Kesimpulan

Laju pertumbuhan pembangunan manusia Indonesia diukur dari IPM mengalami kenaikan di tahun 2010 hingga 2015. Kenaikan yang tinggi terjadi pada provinsi yang status awal IPM-nya adalah rendah atau sedang dan hal tersebut terjadi kebanyakan di provinsi yang berada di luar pulau Jawa, sebuah indikasi positif untuk pemerataan pembangunan. Sedangkan provinsi dengan status IPM tinggi cenderung lambat pertumbuhan IPM-nya.

Referensi : https://www.bps.go.id/ http://ipm.bps.go.id/page/ipm

featured image

Visualize Indonesia's Population Data using ggplot2

Intro

Many people say that ggplot is a powerful package for visualization in R. I know that. But i’d never triggered to explore this package deeper (except just to visualize mainstream plot like pie chart, bar chart, etc.) till this post impressed me.

That post is about plotting map using ggplot. The pretty plots resulted on that post challenged me to explore ggplot more, especially in plotting map/spatial data.

Preparation

We always need data for any analysis. The author of those post use USA map data available in ggplot2 package. Though that post is reproducible research (data and code are available) menas i can re-run the examole on my own, but I want to go with local using Indonesia map data.

So, objective of this post is to visualize Indonesian population by province in Indonesia. So we need the two kinds of dataset. First is population data in province level and second is Indonesia map data. The first data is available in BPS site. The data consists of population density (jiwa/km2) for each province in Indonesia from 2000 till 2015. I will go with the latest year available on the data which is 2015.

Oke, now we arrive to the hardest part. I stacked for a while when searching Indonesia map data that suit for ggplot2 geom_polygon format. But Alhamdillah, after read some articles about kind of spatial data, I got one clue, I need shape data with .shp format to plot map data. And just by typing “indonesian .shp data” on google, He will provide us tons of link results. Finally, I got Indonesian .shp data from this site. I downloaded level 1 data (province level) for this analysis.

Data Acquisition

The fist step is load data into R. I use rgdal package to import .shp data. rgdal is more efficient in loading shape data compared to others package like maptools, etc.

1
2
3
4
#import data .shp file
library("rgdal")
#import .shp data
idn_shape <- readOGR(dsn = path.expand("/YOUR_PATH/IDN_adm"), layer="IDN_adm1")

Here’s one of the advantages using rgdal package, though it is in shape format we can use operation like names(), table(), and $ subset operation like in data frame format.

After data loaded into R workspace, we need to reformat shape data into format that suit to ggplot2 function.

1
2
3
4
#format data
library("ggplot2")
idn_shape_df <- fortify(idn_shape)
head(idn_shape_df)
1
2
3
4
5
6
7
##       long      lat order  hole piece id group
## 1 96.23585 4.055532     1 FALSE     1  0   0.1
## 2 96.23552 4.055860     2 FALSE     1  0   0.1
## 3 96.23448 4.056840     3 FALSE     1  0   0.1
## 4 96.23372 4.057950     4 FALSE     1  0   0.1
## 5 96.23324 4.058574     5 FALSE     1  0   0.1
## 6 96.23248 4.059689     6 FALSE     1  0   0.1

data will look like above table.

Next step, we will try to visualize the data we already have

1
2
3
4
#visualize as in data
ggplot() +
  geom_polygon(data = idn_shape_df, aes(x=long, y = lat, group = group)) +
  coord_fixed(1.3)

It works!, my data has suitable for ggplot2 format. Let’s make it more colorful by colorize each province.

1
2
3
4
5
#add color by province
ggplot(data = idn_shape_df) +
  geom_polygon(aes(x = long, y = lat, fill = id, group = group), color = "white") +
  coord_fixed(1.3) +
  guides(fill=FALSE)  # do this to leave off the color legend

Cool! looks much better. But that’s not the goal of this analysis. Let’s moving forward. Now need to add population density data to complete the analysis.

1
2
3
4
#import density data
population <- read.csv("/Users/Muhammad Idrus F/Downloads/bps-file.csv", sep=";")
population <- population[,c(5,6)] #put only needed variable
head(population)

to make it more intuitive, let’s change the column name with what it should be.

1
colnames(population) <- c("density", "provinsi")

population data has two column; provinsi and density with 34 rows fit to the number of province in Indonesia from Aceh to Papua. Next, we need to merge population dataset with idn_shape_df dataset. If you look in idn_shape, the id column in idn_shape dataset represents the province name. So, the id column in idn_shape_df should represents province name too. Then value in id column better we replace by province name.

1
2
3
#we need to creat dict of province id first
dict_prov_id = data.frame(idn_shape$ID_1, idn_shape$NAME_1)
colnames(dict_prov_id) <- c("id", "provinsi") #rename the column name

Before we join, we notice that id index on idn_shape_df somehow start from 0 while id index on idn_shape. We need transform id on the two tables to be identical.

1
2
3
idn_shape_df$id <- as.integer(idn_shape_df$id) + 1 #transform id value to be similar with id on idn_shape table due to different initial index
idn_shape_df$id <- with(dict_prov_id, provinsi[match(idn_shape_df$id, id)])
head(idn_shape_df)
1
2
3
4
5
6
7
##       long      lat order  hole piece   id group
## 1 96.23585 4.055532     1 FALSE     1 Aceh   0.1
## 2 96.23552 4.055860     2 FALSE     1 Aceh   0.1
## 3 96.23448 4.056840     3 FALSE     1 Aceh   0.1
## 4 96.23372 4.057950     4 FALSE     1 Aceh   0.1
## 5 96.23324 4.058574     5 FALSE     1 Aceh   0.1
## 6 96.23248 4.059689     6 FALSE     1 Aceh   0.1

Now shapefile data idn_shape_df are ready. Next let’s join it with Indonesia’s population data we get from BPS.

Since we have replaced value in id column by province name, it’ll be better if we also rename the id column name into provinsi. Then, we will merge population dataset with idn_shape_df using inner_join from dplyr package.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#rename id column with provinsi
colnames(idn_shape_df)[6] <- "provinsi"

#make value in provinsi column to lower to avoid case sensitive
idn_shape_df$provinsi <- tolower(idn_shape_df$provinsi)
population$provinsi <-tolower(population$provinsi)

#join the two datasets
library(dplyr)
idn_pop_density <- inner_join(idn_shape_df, population, by = "provinsi")
head(idn_pop_density)
1
2
3
4
5
6
7
##       long      lat order  hole piece provinsi group density
## 1 96.23585 4.055532     1 FALSE     1     aceh   0.1      86
## 2 96.23552 4.055860     2 FALSE     1     aceh   0.1      86
## 3 96.23448 4.056840     3 FALSE     1     aceh   0.1      86
## 4 96.23372 4.057950     4 FALSE     1     aceh   0.1      86
## 5 96.23324 4.058574     5 FALSE     1     aceh   0.1      86
## 6 96.23248 4.059689     6 FALSE     1     aceh   0.1      86

idn_pop_density is the final data that will we visualise using ggplot2.

Visualise Indonesia map data

Time to the main part of this analysis, plotting the density map.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#need this to remove background and outline of graph
ditch_the_axes <- theme(
  axis.text = element_blank(),
  axis.line = element_blank(),
  axis.ticks = element_blank(),
  panel.border = element_blank(),
  panel.grid = element_blank(),
  axis.title = element_blank()
)
#plot the map
map_pop_density <- ggplot(data = idn_shape_df, mapping = aes(x = long, y = lat, group = group)) +
  coord_fixed(1.3) + 
  geom_polygon(aes(x=long,y=lat, group=group, fill=density), data=idn_pop_density, color='black') +
  geom_polygon(color = "black", fill = NA) +
  theme_bw() +
  ditch_the_axes

map_pop_density

Final touch

Cool! but it looks like it’s hard to discern the different in area. Let’s make it clearer by transforming the value of density by log10 , reseve the density color to make the more dark color indicate the more dense area also change legend title.

1
2
3
map_pop_density + scale_fill_gradient(trans = "log10", 
                                      high = "#132B43", low = "#56B1F7",
                                      name="jiwa/km2")
Looks better now. Nothing special with the data as we know that Java has very high population compared to others province/area in Indonesia, and we are not discussing about that point this time. This is just an example of how to visualise map/spatial data especially for Indonesian area using R which is open source (free) tools instead of using paid tools. We can then replace the fill by others value like number of sufferer of certain desaese to map the its spreadness or others data we desire.

Note : If you notice there are some provinces that has white color, It’s because the province name on data from BPS and .shp file has different value. So when we join that two tables by province name, some rows doesn’t match. For example Kep. Riau and Kepulauan Riau, Papua Barat and Irian Jaya Bara, Bangka-Belitung and Bangka Belitung. It needs further processing to handle this may be using regex join etc. But i won’t cover that on this post.

Refference: