Tugas Praktikum Visualisasi Data

Shabrina Shafwah Al-Rahmah G1401221083

2024-03-03

Package Installation

library(forcats)
library(ggplot2)
library(treemap)
library(treemapify)
library(dplyr)
library(tidyr)
library(readxl)
library(DT)

Visualisasi Besaran

Bar Chart

#Read data yang digunakan
data_kb <- read_xlsx("D:/Shabrina/University/Semester 4/Visualisasi Data/Tugas Praktikum/Tempat Perolehan Alat KB Modern 2023.xlsx")

#Hitung frekuensi dari peubah yang akan digunakan
data_kb <- table(data_kb$Keterangan)

#Buat data frame yang terdiri atas peubah-peubah yang inign digunakan dari dataset
data_bar <- data.frame(
  Keterangan = names(data_kb),
  Frekuensi = as.numeric(data_kb)
)

#Arrange data dari frekuensi tertinggi hingga terendah
data_bar %>%
  arrange(desc(Frekuensi))
##                             Keterangan Frekuensi
## 1  Praktek bidan/bidan di desa/perawat      4141
## 2                     Apotek/toko obat      1542
## 3               Puskesmas/Pustu/Klinik      1207
## 4        Praktek dokter umum/kandungan       705
## 5                          Rumah Sakit       669
## 6                Posyandu/Pos KB/PPKBD       271
## 7                   Polindes/Poskesdes       126
## 8                              Lainnya       124
## 9                       Rumah bersalin        94
## 10                      TKBK/TMK/MUYAN         5
#Buat bar chart dengan ggplot
data_bar%>%
  ggplot()+
  geom_col(aes(x=fct_reorder(Keterangan, Frekuensi),y = Frekuensi), fill="steelblue", 
           width=0.4) +
  geom_text(aes(x = fct_reorder(Keterangan, Frekuensi), y = Frekuensi, label = Frekuensi),
            vjust = -0.8, hjust = 0.8, color = "black") +
    scale_y_continuous(expand = c(0,100))+
    coord_flip() +
    ggtitle("Tempat Pemasangan Alat KB Modern di Provinsi Jawa Barat 2023") +
    xlab("") +
    ylab("Frekuensi") +
    theme_classic() +
    theme(plot.title = element_text(hjust = .5, size = 12))

Bar chart tersebut menunjukkan preferensi masyarakat di Provinsi Jawa Barat pada tahun 2023 dalam memilih tempat pemasangan alat KB modern. Terlihat bahwa praktek bidan/bidan di desa/perawat menjadi pilihan tempat pemasangan alat KB modern terbanyak oleh masyarakat. Sementara itu, TKBK/TMK/MUYAN menjadi tempat pilihan paling sedikit. TKBK merupakan Tim Keluarga Berencana Keliling, TMK merupakan Tim Medis Keliling, serta MUYAN merupakan Mobil Unit Pelayanan. Ada beberapa faktor kemungkinan yang mempengaruhi pemilihan tempat pemasangan alat KB modern bagi masyarakat, di antaranya akses terhadap fasilitas kesehatan, kredibilitas dan kepercayaaan, serta kenyamanan dan privasi.

Grouped Bar

#Read data susenas tahun 2022 dan 2023
susenas_kor <- read.csv("C:/Users/ASUS/Downloads/2023 Maret JABAR - SUSENAS KOR INDIVIDU PART1 (1).csv")
susenas_kor22 <- read.csv("C:/Users/ASUS/Downloads/2022 Maret JABAR - SUSENAS KOR INDIVIDU PART1 (1).csv")

#Inisialiasi variabel
db1 <- susenas_kor$R1002
db2 <- susenas_kor$R1003
jenis_kl <- susenas_kor$R405

#Buat data frame dari variabel-variabel yang akan digunakan
db <- data.frame(db1, db2, jenis_kl)

#Ubah value data sesuai tujuan
db <- db %>%
  mutate(
    db1 = case_when(
    db1 == 2 ~ 1,
    db1 == 3 ~ 1,
    TRUE ~ db1
  ),
    db2 = case_when(
    db2 == 5 ~ 1,
    db2 == 6 ~ 1,
    db2 == 7 ~ 1,
    TRUE ~ db2
  ))

#Remove value yang bernilai 0 dan yang tidak digunakan
db <- db %>%
  filter(db1 != 4 & db2 != 8 & db1 != 0 & db2 != 0) %>%
  filter(rowSums(is.na(.) | . == 0, na.rm = TRUE) < 4)

#Inisialisasi variabel-variabel tahun 2022  
db1_22 <- susenas_kor22$R1002
db2_22 <- susenas_kor22$R1003
jenis_kl22 <- susenas_kor22$R405

#Buat data frame dari variabel-variabel tersebut
db22 <- data.frame(db1_22, db2_22, jenis_kl22)

#Ubah value sesuai tujuan
db22 <- db22 %>%
  mutate(
    db1_22 = case_when(
    db1_22 == 2 ~ 1,
    db1_22 == 3 ~ 1,
    TRUE ~ db1_22
  ),
    db2_22 = case_when(
    db2_22 == 5 ~ 1,
    db2_22 == 6 ~ 1,
    db2_22 == 7 ~ 1,
    TRUE ~ db2_22
  ))

#Remove value yang bernilai 0 dan yang tidak digunakan
db22 <- db22 %>%
  filter(db1_22 != 4 & db2_22 != 8 & db1_22 != 0 & db2_22 != 0) %>%
  filter(rowSums(is.na(.) | . == 0, na.rm = TRUE) < 4)

#Menggabungkan dua data frame tahun 2022 dan 2023
combined_df <- bind_rows(
  mutate(db22, year = 2022) %>%
    rename(db1 = db1_22, db2 = db2_22, jenis_kl = jenis_kl22),
  mutate(db, year = 2023)
)

#Count value dari variabel yang digunakan berdasarkan tahun dan jenis kelamin
stacked_db <- combined_df %>%
  group_by(year, jenis_kl) %>%
  summarise(jumlah = n())
datatable(stacked_db)
#Buat grouped bar chart dengan ggplot
ggplot(stacked_db, aes(x = factor(year), y = jumlah, fill = factor(jenis_kl))) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7, color = "black") +
  geom_text(aes(label = jumlah), position = position_dodge(width = 0.7), vjust = -0.5, color = "black") +
  labs(
    title = "Jumlah Penyandang Keterbatasan Fungsional Berdasarkan Jenis Kelamin di Provinsi Jawa Barat 2023",
    x = "Tahun",
    y = "Jumlah",
    fill = "Jenis Kelamin"
  ) +
  scale_fill_manual(values = c("1" = "salmon2", "2" = "palegreen"), breaks = c("1", "2"), labels = c("Laki-laki", "Perempuan")) +
  scale_x_discrete(labels = c("2022" = "2022", "2023" = "2023"))+
  theme_minimal() +
  theme(plot.title = element_text(hjust = .5, size = 10),
        axis.title.y.left = element_text(margin = margin(r = 5)),
        axis.title.x.bottom = element_text(margin = margin(t = 7), hjust = 0.5))

Badan Pusat Statistik (BPS) menyatakan dalam kuisioner SUSENAS bahwa gangguan/keterbatasan fungsi dalam jangka waktu yang lama disebut disabilitas. Grouped bar di atas memperlihatkan jumlah penyandang disabilitas atau keterbatasan/gangguan penglihatan dan pendengaran berdasarkan jenis kelamin pada tahun 2022 dan 2023 di Provinsi Jawa Barat. Jumlah penyandang disabilitas, baik laki-laki maupun perempuan mengalami penurunan dari tahun 2022 ke tahun 2023.

Visualisasi Sebaran

Histogram

#Pilih subset data dari dataset menjadi variabel baru
jam <- data.frame(susenas_kor$R708)

#Remove value yang bernilai 0 dan me-rename kolom
jam_hist <- jam %>%
  filter(!is.na(susenas_kor.R708) & susenas_kor.R708 != 0) %>%
  rename(lama_waktu = susenas_kor.R708)
datatable(jam_hist)
#Buat histogram dengan ggplot2
ggplot(jam_hist, aes(x = lama_waktu)) +
  geom_histogram(binwidth = 5, fill = "darkorchid1", color = "black", alpha = 0.7) +
  scale_x_continuous(breaks = seq(0, 100, by = 10)) +
  labs(title = "Sebaran Jumlah Jam Kerja dari Pekerjaan Utama di Provinsi Jawa Barat 2023",
       x = "Jam Kerja",
       y = "Frekuensi") +
  theme(plot.title = element_text(hjust = 0.5),
        axis.title.y.left = element_text(margin = margin(r = 9)),
        axis.title.x.bottom = element_text(margin = margin(t = 7), hjust = 0.5))

Histogram tersebut menyajikan sebaran jumlah jam kerja selama seminggu terakhir dari pekerjaan utama masyarakat di Provinsi Jawa Barat tahun 2023. Frekuensi jumlah jam kerja terbanyak berada pada rentang sekitar 50 jam diikuti dengan 40 jam, 55 jam, 35 jam, dan seterusnya. Berdasarkan Undang-undang Nomor 11 Tahun 2020 Tentang Cipta Kerja (UU Cipta Kerja), skema jam kerja yang berlaku di perusahaan di Indonesia adalah 40 jam dalam seminggu (tidak berlaku bagi perusahaan usaha tertentu). Hal ini menandakan adanya kemungkinan mayoritas masyarakat di Provinsi Jawa Barat mengalami overtime work atau banyak yang bekerja di bidang perusahaan usaha tertentu yang tidak menetapkan jam kerja pada umumnya.

Density Plot

#Read data
susenas_kp <- read.csv("C:/Users/ASUS/Downloads/2023 Maret JABAR - SUSENAS KP BP 4.1 (1).csv")

#Filter sesuai kebutuhan dan buat data frame variabel pertama
padi <- susenas_kp %>%
  filter(KODE == 1)
padi <- data.frame(padi$KODE, padi$B41K10)

#Filter sesuai kebutuhan dan buat data frame dari variabel kedua
umbi <- susenas_kp %>%
  filter(KODE == 8)
umbi <- data.frame(umbi$KODE, umbi$B41K10)

#Gabungkan kedua data frame secara baris dan rename variabel-variabel
density_ch <- bind_rows(
  padi %>%
    rename(kode = padi.KODE, pengeluaran = padi.B41K10),
  umbi %>%
    rename(kode = umbi.KODE, pengeluaran = umbi.B41K10)
)
datatable(density_ch)
#Buat density plot dengan ggplot
ggplot(density_ch) +
  geom_density(aes(x = pengeluaran, fill = factor(kode)), alpha = 0.4) +
  labs(title = "Sebaran Pengeluaran Makanan Pokok 2023",
       x = "Nilai Pengeluaran Seminggu (Rupiah)",
       y = "Density") +
  scale_fill_manual(values = c("1" = "coral", "8" = "turquoise"),
                    name = "Jenis",
                    labels = c("1" = "Padi-padian", "8" = "Umbi-umbian")) +
  xlim(0, 150000) +
  facet_wrap(~kode, scales = "free_y", ncol = 1,
             labeller = labeller(kode = c("1" = "Padi-padian", "8" = "Umbi-umbian"))) +
    theme(plot.title = element_text(hjust = 0.5),
        axis.title.y.left = element_text(margin = margin(r = 9)),
        axis.title.x.bottom = element_text(margin = margin(t = 7), hjust = 0.5))

Density plot tersebut membandingkan nilai pengeluaran (Rupiah) padi-padian dan umbi-umbian selama seminggu dalam satu rumah tangga sebagai konsumsi dan bahan makanan. Nilai pengeluaran ini berdasarkan masyarakat di Provinsi Jawa Barat tahun 2023.Pengeluaran mingguan yang paling umum untuk jenis padi-padian adalah sekitar Rp25.000 hingga Rp60.000. Sementara itu, pengeluaran mingguan yang paling umum untuk jenis umbi-umbian berada pada sekitar Rp0 hingga Rp25.000.

Visualisasi Komposisi

Pie Chart

#Read data
data_susenas <- read.csv("D:/Shabrina/University/Semester 4/Visualisasi Data/Tugas Praktikum/Kegiatan Seminggu Terakhir 2023.csv", sep=";")

#Inisialisasi variabel-variabel
kegiatan <- data_susenas$Kegiatan
keterangan <- data_susenas$Keterangan

#Buat data frame dari gabungan variabel-variabel secara kolom
data <- data.frame(cbind(kegiatan, keterangan))
datatable(data)
#Menghitung frekuensi value dari variabel
frekuensi_kegiatan <- data.frame(table(kegiatan))

#Membuat pie chart dengan ggplot
ggplot(frekuensi_kegiatan, aes(x = "", y = Freq, fill = kegiatan)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_manual(values = c("1" = "#E0B0FF", "2" = "#FFDAB9", "3" = "#98FB98", "4" = "#87CEEB"),
                    name = "Jenis Kegiatan",
                    labels = c("Bekerja", "Sekolah", "Mengurus Rumah Tangga", "Lainnya")) +
  theme_void() +
  theme(legend.position = "right") +
  labs(title = "Komposisi Kegiatan Seminggu Terakhir 2023", fill = "Jenis Kegiatan") +
  geom_text(aes(label = Freq), position = position_stack(vjust = 0.5)) +
  theme(plot.title = element_text(hjust = 0.5))

Pie chart tersebut memperlihatkan komposisi kegiatan seminggu terakhir yang menggunakan waktu terbanyak pada tahun 2023 di Provinsi Jawa Barat. Kegiatan yang menghabiskan waktu paling banyak adalah bekerja dengan 30218 orang, lainnya dengan 5546 orang, 1891 orang bersekolah, dan mengurus rumah tangga dengan 782.

Tree Map

#Read data
data_treemap <- read_xlsx("D:/Shabrina/University/Semester 4/Visualisasi Data/Tugas Praktikum/Kepemilikan Mobil 2023.xlsx")

#Inisialisasi variabel
R102 <- data_treemap$R102
KabKota <- data_treemap$`Kab/Kota`

#Agregasi data dan filtering data berdasarkan kabupaten/kota
agg_data <- aggregate(R102 ~ KabKota, data=data_treemap, sum)
agg_data2 <- data_treemap %>%
  group_by(`Kab/Kota`) %>%
  summarise(kepemilikan = sum(R102))

#Menghitung persentase setiap kabupaten/kota
agg_data2 <- mutate(agg_data2, persentase = round(kepemilikan / sum(kepemilikan) * 100), 3)
datatable(agg_data2)
#Buat tree map plot dengan ggplot
ggplot(agg_data2, aes(area = persentase, fill = persentase, label = `Kab/Kota`)) +
  geom_treemap() +
  geom_treemap_text() +
  scale_fill_gradientn(colors = c("orchid4", "turquoise2", "rosybrown1")) + 
  theme_minimal() +
  labs(fill = "Persentase") +
  ggtitle("Komposisi Kepemilikan Mobil Berdasarkan Kabupaten/Kota di Provinsi Jawa Barat 2023")

Tree map di atas mencerminkan komposisi persentase kepemilikan mobil berdasarkan kabupaten/kota di Provinsi Jawa Barat tahun 2023. Kabupaten/kota dengan persentase kepemilikan mobil terbesar yang dapat dilihat dari besarnya ukuran kotak dan warna skala dalam tree map adalah Bekasi sekitar 23%, diikuti oleh Depok sekitar 13%, dan Bandung sekitar 11%.