Tugas Praktikum Visualisasi Data

Identitas

Nama : Nabil Bintang Prayoga
NIM : G1401221017
Visualisasi Data - STA1262

Inisialisasi Library

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggmosaic)
## Warning: package 'ggmosaic' was built under R version 4.3.2
library(treemap)
## Warning: package 'treemap' was built under R version 4.3.2
library(treemapify)
## Warning: package 'treemapify' was built under R version 4.3.2
library(ggridges)
## Warning: package 'ggridges' was built under R version 4.3.2
library(GGally)
## Warning: package 'GGally' was built under R version 4.3.2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## 
## The following object is masked from 'package:ggmosaic':
## 
##     happy
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.2
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(readxl)

Untuk membuat visualisasi data menggunakan R Studio dibutuhkan beberapa library yang menyimpan berbagai syntax chart. Setiap library digunakan untuk kebutuhan syntax yang berbeda dan harus diinisialisasi terlebih dahulu agar syntax bisa berjalan dengan baik. Jika belum diinstall, maka bisa install terlebih dahulu dengan syntax install.packages(“nama library”).

Pemanggilan Data

dataA <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KP 2023.xlsx")
dataB <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KOR INDIVIDU 2023.xlsx")
dataC <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KOR RUMAH TANGGA 2023.xlsx")

Pada praktik kali ini, digunakan 3 data yang berbeda namun bersumber pada data yang sama, yaitu Susenas Provinsi Jawa Barat Tahun 2023. Data tersebut yaitu data konsumsi pengeluaran (dataA), data pokok individu (dataB), dan data keterangan pokok rumah tangga (dataC). Data diambil berdasarkan sampel individu setiap Kabupaten/Kota dalam suatu rumah tangga. Berikut informasi terkait kode wilayah Kabupaten/Kota pada data ini:
1 <- Bogor
2 <- Sukabumi
3 <- Cianjur
4 <- Bandung
5 <- Garut
6 <- Tasikmalaya
7 <- Ciamis
8 <- Kuningan
9 <- Cirebon
10 <- Majalengka
11 <- Sumedang
12 <- Indramayu
13 <- Subang
14 <- Purwakarta
15 <- Karawang
16 <- Bekasi
17 <- Bandung Barat
18 <- Pangandaran
71 <- Kota Bogor
72 <- Kota Sukabumi
73 <- Kota Bandung
74 <- Kota Cirebon
75 <- Kota Bekasi
76 <- Kota Depok
77 <- Kota Cimahi
78 <- Kota Tasikmalaya
79 <- Kota Banjar

Besaran Data

Visualisasi besaran data dapat menggambarkan keadaan suatu waktu, kondisi, maupun entitas, serta perbandingan antarkategori dan antarwaktu.

Bar Chart

data1A <- dataA %>%
  filter(KODE %in% 2)

data1A %>%
  group_by(R102) %>%
  summarize(total=sum(B41K6)) %>% 
  arrange(desc(total)) %>% 
  ggplot(aes(x = reorder(R102, total), y = total)) +
  geom_col(fill="#a3c6ca") +
  coord_flip() +
  ggtitle("  Banyaknya Konsumsi Satu Rumah Tangga Berdasarkan Pembelian Beras
Selama Seminggu di Setiap Kabupaten/Kota Provinsi Jawa Barat Tahun 2023") +
  xlab("Kode Kabupaten/Kota") +
  ylab("Banyaknya Agregasi Pembelian Beras (rupiah)") +
  theme_classic()

Data yang digunakan berasal dari dataA dengan filter Kode = 2 yaitu komoditi Beras. Data dikelompokkan dan diurutkan berdasarkan wilayah sebagai hasil dari agregasi konsumsi keseluruhan rumah tangga (variabel B41K6). Diperoleh data bahwa wilayah dengan kode 1, yaitu Kabupaten Bogor, menjadi wilayah dengan agregasi pengeluaran pembelian beras setiap minggunya, diikuti dengan wilayah berkode 4 (Kabupaten Bandung) dan 16 (Kabupaten Bekasi). Berbanding terbalik dengan wilayah berkode 18 yang menjadi wilayah dengan agregasi pengeluaran beras setiap minggu paling sedikit, yaitu Kabupaten Pangandaran.

Grouped Bar Chart

data2A <- dataA %>%
  filter(KODE %in% c(66, 67, 68, 69))

ggplot(data2A, aes(x = as.factor(R105), y = B41K5, fill = as.factor(KODE))) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  labs(fill = "Jenis Telur") +
  ggtitle("Total Konsumsi Telur Seminggu per Rumah Tangga
  Berdasarkan Jenis Telur dan Kelompok Wilayah") +
  xlab("Kelompok Wilayah") +
  ylab("Total Konsumsi") +
  scale_fill_manual(values = c("66" = "#9290f3", "67" = "#3290d7", "68" = "#33e7cd", "69" = "#a4f7df")) +
  theme_minimal()

DataA dengan filter kode 66, 67, 68, 69 merupakan komoditi telur dengan setiap jenisnya secara berurutan adalah telur ayam ras, telur ayam kampung, telur itik/telur itik manila, dan telur lainnya (puyuh, asin mentah/matang, penyu, angsa, dan sebagainya). Data dikelompokkan beradasarkan kelompok wilayah, dengan kode 1 adalah perkotaan dan kode 2 adalah pedesaan. Diagram menunjukkan bahwa total konsumsi telur per rumah tangga selama seminggu di perkotaan didominasi dengan telur ayam ras dengan telur itik/telur itik manila memiliki konsumen paling sedikit. Pada wilayah pedesaan, dominasi konsumsi telur sama pada jenis telur ayam ras, namun telur itik/telur itik manila tidak menjadi telur dengan konsumsi paling sedikit. Malah telur ayam kampung menjadi jenis yang paling sedikit dikonsumi oleh masyarakat pedesaan.

Lolipop Chart

dataB %>%
  group_by(`Tahun Lahir`) %>%
  summarize(total=sum(`Tahun Lahir`)/mean(`Tahun Lahir`)) %>%
  arrange(desc(total)) %>%
  slice_head(n = 15) %>%
  ggplot(aes(x = reorder(`Tahun Lahir`, total), y = total)) +
  geom_segment(aes(xend = reorder(`Tahun Lahir`, total), yend = 1), color = "darkgrey") +
  geom_point(color = "blue", size = 4) +
  geom_text(aes(label = total), vjust = -0.5, color = "black", size = 3) +
  coord_flip() +
  ggtitle("TOP 10 Banyaknya Responden KOR Individu Berdasarkan Tahun Kelahiran") +
  xlab("Tahun Kelahiran") +
  ylab("Jumlah") +
  theme_classic()

Diagram ini menggambarkan 10 besar tahun kelahiran masyarakat Jawa Barat yang menjadi responden dari Susenas pada tahun 2023. Orang kelahiran tahun 1982 menjadi responden terbanyak pada survei ini dengan total 1619 orang, disusul dengan kelahiran tahun 2011 dan 2013 masing-masing sebanyak 1616 dan 1615 orang. Pada posisi 9 dan 10 terdapat 1429 responden dengan tahun kelahiran 2006 dan 1972.

Sebaran Data

Visualisasi ini digunakan untuk mengetahui sebaran data sehingga dapat membantu untuk melihat rentang data, mendeteksi outlier, hingga mendeteksi keberadaan kelompok pada suatu data.

Histogram

data3A <- dataA %>% 
  filter(KODE %in% 185)

ggplot(data3A)+
  geom_histogram(aes(x=B41K6),fill="darkblue", color="#e9ecef", alpha=0.8)+
  labs(title="Histogram Sebaran Pengeluaran Air Minum Galon
       oleh Rumah Tangga dalam Seminggu")+
  xlab("Pengeluaran Seminggu")+
  ylab("Frekuensi")+
  xlim(10000,50000)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 5531 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

Pemfilteran dataA dilakukan untuk mengambil data pada kode nomor 185, yaitu air kemasan galon. Sumbu X merupakan variabel B41K6 yang merupakan nilai pengeluatan seminggu satu rumah tangga untuk pembelian air kemasan galon. Data menunjukkan kemenjuluran ke kanan dengan mayoritas rumah tangga memiliki pengeluaran untuk hal tersebut dengan rentang 10 hingga 20 ribu.

Density Plot

data4A <- dataA %>% 
  filter(KODE %in% 110)

ggplot(data4A)+
  geom_density(aes(x=B41K6,fill= "B41K6" ),color="#e9ecef", alpha=0.4)+
  labs(title="Sebaran Pengeluaran Pembelian Buah
              per Minggu Setiap Rumah Tangga")+
  xlab("Pengeluaran")+
  ylab("Jumlah")+
  xlim(10000,100000)
## Warning: Removed 7178 rows containing non-finite values (`stat_density()`).

DataA difilter pada kode 110 sebagai komiditi Buah dengan dasar sebaran B41K6 yaitu nilai pengeluaran selama satu minggu. Terdapat dua kemungkinan yang diperoleh dari sebaran tersebut, dengan rentang paling banyak pada harga 10 ribu rupiah hingga 25 ribu rupiah, maka bisa jadi harga buah cukup murah di Provinsi Jawa Barat sehingga pengeluarannya pun tidak terlalu tinggi, atau tingkat konsumsi buah di Jawa Barat yang rendah sehingga sangat sedikit yang membeli buah-buahan.

Violin Plot

data1B<-dataB %>% 
  filter(R409 > 0)
ggplot(data1B, aes(x = "", y = R409)) +
  geom_violin(fill = "#3290a7") +
  labs(title = "Umur Perkawinan Pertama Responden KOR Individu",
       x = NULL,
       y = "Umur Perkawinan Pertama") +
  theme_minimal()

Violin plot merupakan plot sebaran yang merupakan perluasan hasil pencerminan density plot. Data diambil dari dataB dan difilter pada cariabel R409 yang lebih dari 0, yaitu usia perkawinan pertama setiap responden, karena jika tertera 0 tahun maka dipastikan responden tersebut belum menikah. Dari sebaran tersebut diperoleh bahwa kebanyakan ressponden memiliki usia perkawinan sekitar 20 tahun, terlihat dari penggembungan area tersebut. Namun hal yang menarik adalah adanya garis panjang violin menuju ke arah 100 tahun, ternyata terdapat responden kelahiran 1920an sehingga memiliki usia perkawinan pertama yang juga cukup lama.

Boxplot

grafik <- ggplot(
        data = dataB, mapping = aes(y = `Tahun Lahir`,
                                 fill = as.factor(`Tahun Lahir`))
)
grafik + geom_boxplot(fill = "#5190e4", alpha = 0.8, color = "darkblue") + theme_classic() +
          labs(title="Tahun Lahir Responden KOR Individu")

Boxplot ini menggambarkan tahun responden pada KOR Individu. Median dari sebaran data ini sekitar tahun 1990an dengan satu pencilan, yaitu responden yang lahir pada tahun di bawah 1925. Pencilan ini membuktikan data violin plot bahwa memang ada yang memiliki usia perkawinan pertama yang cukup lama.

Komposisi

Visualisasi ini digunakan untuk melihat bagaimana kontribusi setiap populasi terhadap sub-populasi lain atau populasi itu sendiri, dapat menjelaskan terkait persentase dan distribusi relatif suatu topik tertentu.
## Pie Chart

dataC$R1816B1 <- as.numeric(dataC$R1816B1)
data1C <- dataC %>%
  count(R1816B1) %>%
  mutate(percentage = prop.table(n) * 100)

ggplot(data1C, aes(x = "", y = percentage, fill = factor(R1816B1))) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_brewer(palette = "Blues") +
  theme_void() +
  theme(legend.position = "right") +
  labs(title = "Komposisi Tegangan Listrik yang Terpasang
               pada Meteran Pertama", fill = "Kategori Tegangan Listrik") +
  geom_text(aes(label = paste0(round(percentage), "%")), position = position_stack(vjust = 0.5))

Data diambil dari dataC variabel R1816B (tegangan listrik pada meteren pertama) yang sebelumnya diubah dulu jenisnya menjadi numerik, dikelompokkan, dan diubah menjadi persentase. Dari pie chart tersebut terdapat 5% responden yang tidak menjawab atau tidak ada di rumah saat surveyor datang (kategori 0). Kategori tegangan listrik terbanyak adalah kategori 1 (450 watt) dengan 49%, diikuti dengan kategori 2 (900 watt) sebanyak 34% dan kategori 3 (1300 watt atau lebih) sebanyak 11%.

Donut Chart

data2C <- data.frame(
  Category=c(1,2,3,4,5),
  count=c(21385,1444,2978,77,6)
)

data2C$fraction = data2C$count / sum(data2C$count)
data2C$ymax = cumsum(data2C$fraction)
data2C$ymin = c(0, head(data2C$ymax, n=-1))
 
ggplot(data2C, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=Category)) +
    geom_rect() +
    coord_polar(theta="y") +
    scale_fill_gradient(low = "#1c9099", high = "#ece2f0") +
    xlim(c(2, 4)) +
    labs(title = "Komposisi Status Kepemilikan Bangunan Tempat Tinggal",
        fill = "Kategori Status Kepemilikan") +
    theme_classic()

Data diambil dari dataC pada variabel status kepemilikan rumah. Diperoleh bahwa sudah banyaak masyarakat Jawa Barat yang memiliki rumah sendiri (kode 1), selanjutnya rumah kontrak/sewa (2), bebas sewa (3), dinas (4), dan sedikit yang menjawab lainnya (5).

Mosaic Plot

ggplot(dataB) +
  geom_mosaic(aes(x = product(R404, R405), fill = R404)) +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Jenis Kelamin vs Status Perkawinan", 
       x = "Jenis Kelamin", y = "Status Perkawinan") +
  theme_classic()
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `unite()` instead.
## ℹ The deprecated feature was likely used in the ggmosaic package.
##   Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Data berasal dari dataB dengan pengelompokkan sumbu Y berasal dari variabel R405 sebagai jenis kelamin (1=laki-laki, 2=perempuan) dan sumbu X dari variabel R404 sebagai status perkawinan (1=belum kawin, 2=kawin, 3=cerai hidup, 4=cerai mati). Hasil menunjukkan bahwa jumlah responden laki-laki yang belum menikah lebih banyak dibandingkan dengan perempuan dan jumlah responden cerai mati perempuan lebih banyak dibandingkan dengan laki-laki.

Tree Map

treemap(dataB, 
        index=c("R102","R404"), 
        vSize="R102",
        draw=TRUE,
        title="Banyak Responden per Wilayah Berdasarkan Status Perkawinan",
        fontsize.title=17,
        fontsize.labels=12,
        fontcolor.labels="black")

Ukuran setiap kotak utama didasarkan pada variabel R102 yaitu banyaknya responden setiap wilayahnya, dengan kotak-kotak kecil di dalamnya merupakan hasil variabel R404, yaitu Status perkawinan (1=belum kawin, 2=kawin, 3=cerai hidup, 4=cerai mati). Kode angka yang lebih tebal di setiap kotak berbeda warna menunjukkan kode wilayah, sedangkan kode di dalam kotak utama adalah kode status perkawinan. Responden paling banyak berasal dari wilayah berkode 75, yaitu Kota Bekasi, di wilayaah ini lebih banyak responden yang belum kawin dan sangat sedikit yang cerai mati.

Terima Kasih ~ Nabil Bintang Prayoga/G1401221017