Visualisasi Data: Tugas Praktikum

Package Installation

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ 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.1     
## ── 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(ggridges)
library(treemap)
library(treemapify)
library(ggmosaic)
library(GGally) 
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## 
## The following object is masked from 'package:ggmosaic':
## 
##     happy
library(plotly) 
## 
## 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)

Data

data<- read.csv("/Users/user/Downloads/Documents/Visdat 📊/2023 Maret JABAR - SUSENAS KOR INDIVIDU PART1.csv")
data1<- read.csv("/Users/user/Downloads/Documents/Visdat 📊/2023 Maret JABAR - SUSENAS KOR INDIVIDU PART2.csv", header = TRUE, sep=",")
data2<- read.csv("/Users/user/Downloads/Documents/Visdat 📊/2023 Maret JABAR - SUSENAS KOR Rumah Tangga.csv", header = TRUE, sep=",")
## Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
## incomplete final line found by readTableHeader on
## '/Users/user/Downloads/Documents/Visdat 📊/2023 Maret JABAR - SUSENAS KOR Rumah
## Tangga.csv'

Visualisasi Besaran Data

Bar Chart

data %>%
  count(R709) %>%
  slice_max(n = 10, order_by = n) %>% 
  ggplot() +
  geom_col(aes(x = fct_reorder(as.factor(R709), n), y = n), fill = "orange", width = 0.7) +
  geom_text(aes(x = fct_reorder(as.factor(R709), n), y = n, label = n),
            position = position_stack(vjust = 0.5), color = "black", size = 3) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Top 10 Total Jam Kerja Dalam Seminggu Dari Seluruh Pekerjaan") +
  xlab("Jumlah Jam dalam Seminggu") +
  ylab("") +
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5, size = 15))

Pada bar chart diatas memiliki arti bahwa mayoritas penduduk Jawa Barat, tepatnya sebanyak 46465 individu, tidak memiliki jam kerja dalam seminggu dan dilanjutkan dengan 6.003 individu bekerja selama 48 jam seminggu.

data %>%
  group_by(R709) %>%
  summarize(mean_umur = mean(R407)) %>%
  arrange(desc(mean_umur)) %>%
  slice_head(n = 10) %>%
  ggplot(aes(x = reorder(R709, mean_umur), y = mean_umur)) +
  geom_col(fill = "pink") +
  geom_text(aes(label = round(mean_umur)), vjust = -0.5, color = "black", size = 3) +
  coord_flip() +
  ggtitle("Jumlah Jam Kerja vs Umur") +
  xlab("Jumlah Jam Kerja dalam Seminggu") +
  ylab("Umur") +
  theme_classic()

berdasarkan bar chart diatas terdapat pola dimana pekerja dengan jam kerja 19 jam memiliki rata-rata umur 54 tahun, sedangkan pekerja dengan jam kerja 71 jam memiliki rata-rata umur 52 tahun, dan seterusnya. Selain itu, terdapat observasi bahwa kelompok pekerja dengan umur 54 tahun memiliki jumlah rata-rata terbanyak, yaitu 19 jam kerja.

data %>%
  group_by(R407) %>%
  summarize(total_jam = mean(R709)) %>%
  arrange(desc(total_jam)) %>%
  slice_head(n = 10) %>%
  ggplot(aes(x = reorder(R407, total_jam), y = total_jam)) +
  geom_col(fill = "aquamarine") +
  geom_text(aes(label = round(total_jam)), vjust = -0.5, color = "black", size = 3) +
  coord_flip() +
  ggtitle("Umur vs Jumlah Jam Kerja") +
  xlab("Umur") +
  ylab("Jumlah Jam Kerja dalam Seminggu") +
  theme_classic()

Dengan menukar sumbu x dan sumbu y, data menunjukkan bahwa pekerja dengan usia 51 memiliki rata-rata jam kerja sebesar 35,9 jam per minggu, dan seterusnya hingga data ke-n. Juga diketahui bahwa pekerja dengan jam kerja tertinggi adalah yang berusia 51 dengan rata-rata jam kerja sebesar 35,9.

Lollipop Chart

data %>%
  count(R707) %>%
  arrange(desc(n)) %>% 
  ggplot() +
  geom_segment(aes(x = fct_reorder(as.factor(R707), n), xend = fct_reorder(as.factor(R707), n), y = 0, yend = n), color = "green") +
  geom_point(aes(x = fct_reorder(as.factor(R707), n), y = n), color = "red", size = 2) +
    geom_text(aes(x = fct_reorder(as.factor(R707), n), y = n, label = n),
            position = position_stack(vjust = 0.5), color = "black", size = 3) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Status/Kedudukan dalam Pekerjaan Utama") +
  xlab("Kode Status Pekerjaan") +
  ylab("jumlah penduduk") +
  theme_light() +
  theme(plot.title = element_text(hjust = 0.5))

Berdasarkan lollipop chart yang disajikan, dapat disimpulkan bahwa mayoritas penduduk Jawa Barat tidak memiliki pekerjaan utama, dengan jumlah mencapai 45857 penduduk. Selanjutnya, terdapat 16102 penduduk yang memiliki pekerjaan utama dengan kode 4, yaitu sebagai buruh/karyawan/pegawai.

Group bar Chart

data_stacked <- data %>%
  filter(R612 %in% c("3", "8", "13", "15", "21", "19")) %>%
  filter(R707 %in% c("4", "1", "5"))
ggplot(data_stacked, aes(x = as.factor(R612), y = R903, fill = as.factor(R707))) +
  geom_bar(stat = "identity", position = "dodge", width = 0.5, color = "white") +
  labs(fill = "Jabatan") +
  ggtitle("Total Berpergian per Status Pekerjaan dan Jenjang Pendidikan Terakhir") +
  xlab("Jenjang Pendidikan Terakhir") +
  ylab("Total Berpergian") +
  scale_fill_manual(values = c("1" = "coral1", "4" = "blueviolet", "5" = "darkturquoise")) +
  theme_minimal()

R612 : Jenjang pendidikan terakhir

R903 : Jumlah berpergian dalam periode 1 Juli - 31 Desember 2022

R707 : Kedudukan dalam pekerjaan utama

Status 1 : Berusaha Sendiri

Status 4 : Buruh/karyawan/pegawai

Status 5 : Pekerja bebas

Jenjang 3 : SD

Jenjang 8 : SMP

Jenjang 13 : SMA

Jenjang 15 : SMK

Jenjang 19 : D3

Jenjang 21 : S1

Berdasarkan data dalam grafik, dapat disimpulkan bahwa pada periode 1 Juli - 31 Desember 2022, masyarakat dengan jenjang pendidikan terakhir SD yang memiliki status pekerjaan sebagai berusaha sendiri memiliki jumlah berpergian terbanyak. Hal yang sama juga terjadi pada masyarakat dengan jenjang pendidikan terakhir SMP. Namun, untuk masyarakat dengan jenjang pendidikan terakhir SMA, SMK, dan S1, yang memiliki total berpergian terbanyak adalah yang berstatus pekerja sebagai buruh/karyawan/pegawai. Selain itu, pada jenjang pendidikan terakhir D3, total perjalanan cenderung sama antara mereka yang berstatus sebagai buruh/karyawan/pegawai dan yang berusaha sendiri.

ggplot(data_stacked, aes(x = as.factor(R707), y = R903, fill = as.factor(R612))) +
  geom_bar(stat = "identity", position = "dodge", width = 0.5, color = "white") +
  labs(fill = "Pendidikan Terakhir") +
  ggtitle("Total Berpergian per Jenjang Pendidikan dan Status Pekerjaan") +
  xlab("Status/Kedudukan Pekerjaan") +
  ylab("Total Berpergian") +
  scale_fill_brewer(palette = "Accent") +
  theme_minimal()

Berdasarkan data grafik yang ada, dapat disimpulkan bahwa masyarakat yang memiliki status pekerjaan sebagai pengusaha sendiri dan pendidikan terakhir mereka adalah SD memiliki kecenderungan paling tinggi untuk berpergian pada rentang waktu 1 Juli hingga 31 Desember 2022. Kemudian, kelompok ini diikuti oleh mereka yang memiliki pendidikan terakhir SMP, SMA, dan seterusnya. Pola yang serupa juga terlihat pada masyarakat yang bekerja sebagai pekerja bebas, di mana mereka yang memiliki pendidikan terakhir SD juga mendominasi perjalanan, diikuti oleh mereka yang memiliki pendidikan terakhir SMA. Sementara itu, bagi masyarakat yang status pekerjaannya adalah sebagai buruh/karyawan/pegawai, mayoritas perjalanan terjadi pada individu dengan pendidikan terakhir S1 pada rentang waktu yang sama, diikuti oleh mereka yang memiliki pendidikan terakhir SMA dan seterusnya.

Berdasarkan kedua data tersebut, dapat disimpulkan bahwa mayoritas penduduk Jawa Barat dalam sampel tersebut yang bekerja sebagai pekerja bebas relatif lebih sedikit dibandingkan dengan jumlah masyarakat yang berprofesi sebagai pengusaha sendiri dan buruh/karyawan/pegawai.

Stacked Bar Chart

ggplot(data_stacked, aes(x = as.factor(R612), y = R903, fill = as.factor(R707))) +
  geom_bar(stat = "identity") +
  labs(fill = "Jabatan") +
  ggtitle("otal Berpergian per Status Pekerjaan dan Jenjang Pendidikan Terakhir") +
  xlab("Jenjang Pendidikan Terakhir") +
  ylab("Total Berpergian") +
  scale_fill_manual(values = c("1" = "coral1", "4" = "blueviolet", "5" = "darkturquoise")) +
  theme_minimal()

Dari data yang telah disajikan, dapat disimpulkan bahwa mayoritas penduduk Jawa Barat dalam sampel tersebut yang sering berpergian pada rentang waktu 1 Juli hingga 31 Desember 2022 umumnya memiliki jenjang pendidikan terakhir SMA dan bekerja sebagai buruh/karyawan/pegawai. Selanjutnya, kelompok yang memiliki jenjang pendidikan terakhir SD dan pekerjaan sebagai pengusaha sendiri juga cenderung sering berpergian. Sementara itu, kelompok yang paling jarang berpergian umumnya memiliki jenjang pendidikan terakhir D3. Fenomena ini mungkin terkait dengan fakta bahwa jumlah penduduk Jawa Barat yang lulusan D3 relatif sedikit, sehingga hal ini berdampak pada proporsi “total” dari aktivitas berpergian pada rentang waktu 1 Juli hingga 31 Desember 2022 di kalangan kelompok tersebut.

ggplot(data_stacked, aes(x = as.factor(R707), y = R903, fill = as.factor(R612))) +
  geom_bar(stat = "identity") +
  labs(fill = "Pendidikan Terakhir") +
  ggtitle("Total Berpergian per Jenjang Pendidikan dan Status Pekerjaan") +
  xlab("Status/Kedudukan Pekerjaan") +
  ylab("Total Berpergian") +
  scale_fill_brewer(palette = "Accent") +
  theme_minimal()

Berdasarkan analisis dari diagram di atas, dapat disimpulkan bahwa mayoritas penduduk Jawa Barat dalam sampel tersebut yang sering berpergian adalah mereka yang memiliki status/jabatan sebagai buruh/karyawan/pegawai, yang sebagian besar memiliki pendidikan terakhir berupa SMA atau S1. Selanjutnya, kelompok yang juga sering berpergian adalah masyarakat yang memiliki status/jabatan sebagai pengusaha sendiri, yang didominasi oleh individu dengan pendidikan terakhir SD. Sedangkan yang paling jarang berpergian adalah mereka yang bekerja sebagai pekerja bebas, yang mayoritas memiliki pendidikan terakhir SD. Fenomena ini mungkin terjadi karena proporsi antara berbagai status/jabatan pekerjaan tidak seimbang, sehingga jumlah masyarakat dengan pekerjaan sebagai buruh/karyawan/pegawai jauh lebih banyak daripada mereka yang bekerja sebagai pekerja bebas.

Visualisasi Sebaran Data

Histogram

ggplot(data)+
  geom_histogram(aes(x= R708),fill="chocolate", color="cornsilk", alpha=0.8)+
  labs(title="Histogram Sebaran Jam Kerja pada Pekerjaan Utama")+
  xlab("Jumlah Jam Kerja")+
  ylab("Jumlah")+
  xlim(1,100)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 46465 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

berdasarkan histogram diatas, dapat diamati bahwa histogram tersebut termasuk ke dalam histogram bimodal karena memiliki dua puncak yang mengindikasikan keberadaan dua kelompok interval jam kerja per minggu pada mayoritas sampel penduduk Jawa Barat. Rentang jam kerja tersebut berkisar antara 35 hingga 55 jam per minggu dan 60 hingga 70 jam per minggu.

Density Plot

ggplot(data)+
  geom_density(aes(x= R409),fill="coral", color="cornsilk", alpha=0.8)+
  labs(title="Density Plot Umur Pernikahan Pertama")+
  xlab("Umur")+
  ylab("Jumlah")+
  xlim(1,50)
## Warning: Removed 35916 rows containing non-finite values (`stat_density()`).

Pada plot density di atas, terdapat dua puncak yang menunjukkan adanya dua kelompok mayoritas penduduk yang menikah pertama kali pada umur tertentu, yakni pada usia 20 dan 25 tahun. Sedangkan untuk kelompok lainnya, distribusinya tersebar mulai dari usia 10 hingga 40 tahun.

ggplot(data1)+
  geom_density(aes(x=R1501B,fill= "Umur Pernikahan Pertama" ),color="cornsilk", alpha=0.4)+
  geom_density(aes(x=R1502B,fill="Umur Melahirkan Pertama"), color="cornsilk", alpha=0.4)+
  labs(title="Density Plot Sebaran Data Rumah")+
  xlab("Umur")+
  ylab("Jumlah")+
  xlim(10,50)
## Warning: Removed 66747 rows containing non-finite values (`stat_density()`).
## Warning: Removed 66889 rows containing non-finite values (`stat_density()`).

Berdasarkan perbandingan density plot yang disajikan, terbukti bahwa masyarakat Jawa Barat dalam sampel tersebut cenderung menikah terlebih dahulu sebelum memiliki anak pertama. Hal ini tercermin dari distribusi yang menunjukkan kepadatan pada rentang usia yang lebih rendah untuk pernikahan pertama dibandingkan dengan kelahiran anak pertama. Selain itu, pernikahan pertama dan kelahiran anak pertama, memiliki distribusi yang hampir sama, dengan puncak kepadatan terjadi pada usia sekitar 20 tahun. Hal ini menunjukkan bahwa usia di sekitar 20 tahun menjadi titik fokus utama dalam masyarakat Jawa Barat untuk memulai kehidupan perkawinan dan memulai proses berkeluarga dengan kelahiran anak pertama.

Boxplot

data <- data
data <- data %>% filter(R708 > 0)
ggplot(data)+
  geom_boxplot(aes(y=R708))+
  labs(title="Boxplot Sebaran Jam Kerja Pekerjaan Utama dalam Seminggu")

Dalam boxplot yang disajikan, dapat dilihat bahwa nilai median dari variabel “Jam Kerja Pekerjaan Utama dalam Seminggu” adalah sekitar 42 jam per minggu. Kuartil atas (75th percentile) terletak pada sekitar 50 jam per minggu, sementara kuartil bawah (25th percentile) terletak sekitar 30 jam per minggu. Rentang (range) atas dari nilai-nilai adalah sekitar 80 jam, sedangkan rentang bawahnya adalah 0 jam (menunjukkan tidak adanya pekerjaan). Selain itu, terdapat beberapa pencilan di atas rentang atas (>80 jam).

Violin Plot

ggplot(data, aes(x = "", y = R708)) +
  geom_violin(fill = "darkolivegreen1", alpha = 0.5) +
  geom_boxplot(width = 0.1, color = "darkslategrey", fill = "white", outlier.shape = NA) +
  labs(title = "Violin Plot dan Boxplot: Distribusi Jam Kerja Pekerjaan Utama dalam Seminggu",
       x = NULL,
       y = "Jam (per minggu)") +
  coord_flip() +
  theme_minimal()

Berdasarkan visualisasi dari violin plot, ditemukan bahwa median dari variabel “Jam Kerja Pekerjaan Utama dalam Seminggu” adalah sekitar 42 jam per minggu. Selain itu, terlihat bahwa terdapat distribusi yang cukup lebar dengan puncak yang mencapai sekitar 48 jam per minggu. Ini menunjukkan bahwa banyak masyarakat di Jawa Barat dalam sampel tersebut bekerja selama 48 jam per minggu. Namun, perbedaan antara nilai median dan bagian yang paling lebar dalam distribusi ini kemungkinan dapat disebabkan oleh adanya pencilan (outliers) dalam data.

Visualisasi Komposisi Data

Pie Chart

data$R1102 <- as.numeric(data$R1102)
data_pie <- data %>%
  mutate(R1102 = ifelse(R1102 == 1, "1", "5")) %>%
  count(R1102) %>%
  mutate(percentage = prop.table(n) * 100)

ggplot(data_pie, aes(x = "", y = percentage , fill = R1102)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_brewer(palette = "Set3") +
  theme_void() +
  theme(legend.position = "right") +
  labs(title = "Komposisi Kepemilikan Keluhan Kesehatan", fill = "kategori") +
  geom_text(aes(label = paste0(round(percentage), "%")), position = position_stack(vjust = 0.5))

Dalam pie chart tersebut, dapat dilihat bahwa sekitar 26% sampel dari individu di Jawa Barat melaporkan adanya masalah kesehatan, sedangkan mayoritas sisanya tidak mengalami keluhan kesehatan dalam seminggu terakhir.

Treemap Chart

data_excel <- read_excel("/Users/user/Downloads/Documents/Visdat 📊/data kabkot.xls")
pendidikan <-
treemap(data_excel, 
        index=c("R102", "R612", "R407"), 
        vSize="R1208",
        draw=TRUE,
        title="Treemap: Konsumsi Rokok Berdasarkan Wilayah, Pendidikan Terakhir, dan Umur",
        fontsize.title=20,
        fontsize.labels=12,
        fontcolor.labels="white")

R612 : Jenjang pendidikan terakhir

R407 : Umur Responden

R707 : Wilayah Kabupaten/Kota Jawa Barat

R1208 : Rata-Rata Konsumsi Batang Rokok Tembakau Per Minggu

Berdasarkan treemap tersebut, dapat disimpulkan bahwa jumlah perokok terbanyak dimiliki oleh masyarakat Bogor yang memiliki pendidikan terakhir yaitu Sekolah Dasar (SD) dan berusia 37 tahun. Selanjutnya, dari data-data yang lain, dapat disusun informasi serupa untuk setiap kategori pendidikan dan usia, sehingga dapat memperoleh pemahaman yang lebih lengkap mengenai distribusi perokok di masyarakat Bogor.