R sudah banyak digunakan secara luas untuk menangani pengolahan data, nah pada postingan kali ini kita akan membahas sebuah jenis grafik yang membuat kita semakin cerdas mengolah data. Misalkan mengolah data dari dinas kependudukan dan catatan sipil serta saham akan mudah sekali menggunakan R bahkan untuk melakukan query dan memplotkan data berbentuk grafik pyramid ataupun dual axis.
Pembahasan dibagi menjadi 2 yaitu cara mudah memplotkan grafik dengan package pyramid dan cara mengolah data mentah agar siap digunakan pada package pyramid. Grafik piramida / pyramid sering digunakan untuk visualisasi demografi /sebaran jumlah penduduk berdasarkan kategori umur atau bisa digunakan untuk menampilkan data saham berdasarkan porsi kepemilikan asing dan domestik dari sebuah jenis investor
- Insurance (IS) adalah perusahaan asuransi
- Mutual Fund (MF) adalah reksadana
- Pension Fund (PF) adalah dana pensiun
- Financial Institution (IB) adalah perusahaan keuangan / private bank
- Corporate (CP) adalah korporasi
- Securities Company (SC) adalah perusahan sekuritas
- Foundation (FD) adalah yayasan
- Individual (ID) adalah retail
- Lainnya (Others) OT adalah tidak tahu/tidak disebutkan
Ini adalah tools yang sangat berguna karena penulis sering lakukan untuk mencari saham yang digerakan oleh asing, seperti contoh berikut AALI dikuasai asing dengan jenis investor Mutual Fund (rekdasana) berdasarkan data KSEI per 30 Juni 2020, sedangkan domestik dikuasai oleh investor asuransi serta ritel. Tentu untuk mengolah data hampir 700 emiten nggak mungkin kalian pakai excel, terlalu ribet dan selain itu, tidak semua emiten kita pakai, hanya yang dipilih saja melalui teknik query (misalkan nilai Cap nya diatas 2 T, porsi asing diatas 30% dan seabreg aturan yang kalian ingin gunakan)
Sedangkan kenaikan kepemilikan asing atas AALI dan price per monthly yaitu
Ketika porsi asing naik dari april 2020 (34.5%) menjadi juni 2020 (35.5%) maka harga saham juta terjadi kenaikan dari Rp. 6.100 menjadi Rp. 8225 disebut dengan korelasi positif yang berarti asing beli maka harga naik.
Ok, lupakan sejenak mengenai njlimetnya saham, kita permudah saja mengolah data penduduk yang lebih simple
Install Package
Contents
Untuk membuat grafik pyramid, kita tidak perlu repot membuat code yang njlimet koq, cukup gunakan saja package pyramid. Seperti biasa untuk melakukan install package pada di R gunakan perintah install.packages()
install.packages('pyramid')
Dataset
Dataset yang kita gunakan mempunyai format *.csv yang disimpan dengan nama penduduk.csv. Bisa kalian lihat cara menyusun kolomnya yaitu
- Jumlah laki-laki
- Jumlah perempuan
- Range data
males,females,ages 4882,4573,0-4 5664,5286,5-9 5373,5124,10-14 5545,5255,15-19 4775,4558,20-24 5030,4090,25-29 5043,4634,30-34 6061,5685,35-39 5357,4711,40-44 4519,3925,45-49 3357,3072,50-54 2699,2694,55-59 2123,2176,60-64 1528,1616,65-69 873,929,70-74 938,1271,75+
Data diatas hanya sebagai contoh
Loading package dan Dataset
Package yang kita butuhkan selain pyramid juga dplyr untuk membaca file dalam bentuk csv. Berikut kode yang digunakan untuk plot pyramid
library(dplyr) library(pyramid) penduduk <- read.csv('F:/penduduk.csv') pyramid(penduduk, Clab='Kelompok Umur', Llab='Laki-laki', Rlab='Perempuan', Cgap=0.2, Cadj=0, Ldens=-1, AxisFM='d', AxisBM=".", GL=FALSE, main='Piramida Penduduk')
Terlihat sekali usia produktif mendominasi yaitu pada umur 35-39 yang berarti pada umur tersebut bila pada mereka berkarir/bekerja termasuk dalam posisi matang.
Grouping Umur dan Jenis Kelamin
Tentu table diatas sangat mudah diolah tanpa perlu capek-capek membuat dalam basis kategori. Lain cerita kalau kalian punya data jutaan penduduk dari catatan sipil lengkap sama namanya. Tentu mau tidak mau harus menggunakan query pada package dplyr. Kalau kalian menggunakan SPSS dan Eview tentu akan sulit melakukan cleaning dataset. Perhatikan sebuah data kependudukan yang terdiri dari tanggal lahir dan jenis kelamin disimpan dengan nama data dukcapil.csv
Kita olah menjadi data yang lebih informatif untuk mengetahui demografi jenis kelamin dan umurnya.
Berarti ada 4 hal yang harus dilakukan
- Mengubah format tanggal dd/mm/yyyy agar mudah dihitung umur
- Mencari umur saat ini
- Melakukan query berdasarkan kategori umur dan jenis kelamin
- Agregasi data untuk menghitung count berdasarkan umur dan jenis kelamin
Berikut dataset yang belum diolah
id_biodata nama tanggal_lahir kota jenis_kelamin 1 1 agus 04/06/1988 semarang laki-laki 2 2 bejo 01/11/2000 solo laki-laki 3 3 cucup 09/09/1988 kendari perempuan 4 4 deden 01/07/1986 makasar perempuan 5 5 eko 08/09/2001 surabaya perempuan 6 6 farah 31/12/2000 kediri perempuan 7 7 galih 06/12/1990 jepara laki-laki 8 8 bejo 09/12/1989 pati laki-laki
Mengubah format date indonesia menjadi sesuai Format R
Format penyajian tanggal versi indonesia berbeda dengan yang dikenal oleh format R,
- Format indonesia menganut urutan : dd/mm/yyyy
- Sedangkan format R mempunyai urutan : yyyy-mm-dd
Maka kolom tanggal_lahir akan kita ubah dengan nambah 1 kolom baru agak nampak perbedaanya (hal ini untuk pembelajaran saja, kalau datanya jutaan akan terasa berat) yaitu format_tanggal. Berikut ketika diubah format tanggal sesuai R
id_biodata nama tanggal_lahir kota jenis_kelamin format_tanggal 1 1 agus 04/06/1988 semarang laki-laki 1988-06-04 2 2 bejo 01/11/2000 solo laki-laki 2000-11-01 3 3 cucup 09/09/1988 kendari perempuan 1988-09-09 4 4 deden 01/07/1986 makasar perempuan 1986-07-01 5 5 eko 08/09/2001 surabaya perempuan 2001-09-08 6 6 farah 31/12/2000 kediri perempuan 2000-12-31 7 7 galih 06/12/1990 jepara laki-laki 1990-12-06 8 8 bejo 09/12/1989 pati laki-laki 1989-12-09
Mencari umur saat ini
Untuk mencari umur saat ini, tak usah repot-repot yaitu gunakan saja package eeptools (kalau belum ada ya download saja dulu)
install.packages('eeptools')
Berikut hasil perhitungan umur menggunakan package eeptools
id_biodata nama tanggal_lahir kota jenis_kelamin format_tanggal umur_sekarang 1 1 agus 04/06/1988 semarang laki-laki 1988-06-04 32 2 2 bejo 01/11/2000 solo laki-laki 2000-11-01 19 3 3 cucup 09/09/1988 kendari perempuan 1988-09-09 31 4 4 deden 01/07/1986 makasar perempuan 1986-07-01 34 5 5 eko 08/09/2001 surabaya perempuan 2001-09-08 18 6 6 farah 31/12/2000 kediri perempuan 2000-12-31 19 7 7 galih 06/12/1990 jepara laki-laki 1990-12-06 29 8 8 bejo 09/12/1989 pati laki-laki 1989-12-09 31
Selanjutnya yaitu melakukan query data, ini sangat menarik karena butuh cukup resource yang cukup bila kalian punya jutaan data
Query kategori
Untuk melakukan query berdasarkan kategori harus menggunakan operator ifelse (mirip sekali dengan excel). Berikut hasil mutate dengan ifelse
id_biodata nama tanggal_lahir kota jenis_kelamin format_tanggal umur_sekarang kategori 1 1 agus 04/06/1988 semarang laki-laki 1988-06-04 33 31> 2 2 bejo 01/11/2000 solo laki-laki 2000-11-01 20 15-20 3 3 cucup 09/09/1988 kendari perempuan 1988-09-09 32 31> 4 4 deden 01/07/1986 makasar perempuan 1986-07-01 35 31> 5 5 eko 08/09/2001 surabaya perempuan 2001-09-08 19 15-20 6 6 farah 31/12/2000 kediri perempuan 2000-12-31 20 15-20 7 7 galih 06/12/1990 jepara laki-laki 1990-12-06 30 21-30 8 8 bejo 09/12/1989 pati laki-laki 1989-12-09 31 31>
Agregasi Data
Langkah terakhir melakukan agregasi data, ini sangat berguna untuk mempercepat operasi perhitungan data.
kategori jenis_kelamin jumlah <chr> <chr> <int> 1 15-20 laki-laki 1 2 15-20 perempuan 2 3 21-30 laki-laki 1 4 31> laki-laki 2 5 31> perempuan 2
Data diatas masih perlu kita normalkan agar sesuai dengan inputan untuk package pyramid untuk itu dibutuhkan sebuah joint table lebih tepatnya menggunakan full join
Full Joint
Penerapan full join akan menghasilkan NA bila data tersebut tidak cocok, hasil penerapan full join yaitu
kategori jenis_kelamin jumlah 1 15-20 laki-laki 1 2 21-30 laki-laki 1 3 31> laki-laki 2
Untuk perempuan yaitu
kategori jenis_kelamin jumlah 1 15-20 perempuan 2 2 21-30 <NA> NA 3 31> perempuan 2
Penggabungkan data diatas dan jangan lupa untuk replace NA dengan 0
laki_laki_kategori perempuan_kategori kategori 1 1 2 15-20 2 1 0 21-30 3 2 2 31>
Bagaiman menurut kalian? Cara mengolah data kependudukan disdukcapil menggunakan R sehingga menjadi Cerdas melalui grafik piramida dan teknik Query data. Nah berikut kode untuk menampilkan grafik berbentuk pyramid yang bisa kalian pelajari
library(dplyr) library(pyramid) penduduk <- read.csv('penduduk.csv') penduduk pyramid(penduduk, Clab='Kelompok Umur', Llab='Laki-laki', Rlab='Perempuan', Cgap=0.2, Cadj=0, Ldens=-1, AxisFM='d', AxisBM=".", GL=FALSE, main='Piramida Penduduk')
Sedangkan kode R berikut untuk mengolah data dukcapil.csv yang bisa kalian pelajari penggunaan package dplyr yang sangat handal dalam mengolah data terstruktur.
#install.packages('eeptools') library(dplyr) library(pyramid) library(eeptools) library(tidyverse) penduduk <- read.csv('data dukcapil.csv') penduduk #ubah format tanggal penduduk$format_tanggal = as.Date(penduduk$tanggal_lahir,'%d/%m/%Y') penduduk #hitung umurnya penduduk$umur_sekarang = ceiling(age_calc(penduduk$format_tanggal, units = 'years')) penduduk #kategori umur penduduk = penduduk %>% mutate(kategori = ifelse(umur_sekarang >=15 & umur_sekarang<=20,'15-20', ifelse(umur_sekarang>=21 & umur_sekarang<=30,'21-30', '31>'))) penduduk gruping = penduduk %>% group_by(kategori,jenis_kelamin)%>% summarize(jumlah = n()) gruping laki_laki = gruping %>% filter(jenis_kelamin=='laki-laki') laki_laki perempuan = gruping %>% filter(jenis_kelamin=='perempuan') perempuan kategori = c('15-20','21-30','31>') kependudukan = data.frame(kategori) kependudukan #joint laki_laki_kategori = full_join(kependudukan,laki_laki,by='kategori')$jumlah laki_laki_kategori perempuan_kategori = full_join(kependudukan,perempuan,by='kategori')$jumlah perempuan_kategori = replace_na(perempuan_kategori,0) perempuan_kategori data_penduduk = data.frame(laki_laki_kategori,perempuan_kategori,kategori) data_penduduk pyramid(data_penduduk, Clab='Kelompok Umur', Llab='Laki-laki', Rlab='Perempuan', Cgap=0.2, Cadj=0, Ldens=-1, AxisFM='d', AxisBM=".", GL=FALSE, main='Piramida Penduduk')
Semoga bermanfaat dan semakin cerdas