Packages yang diperlukan

Memanggil packages yang akan digunakan dalam pengerjaan tugas kali ini.

library(readxl)
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.1
## ✔ 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(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
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(treemap)
## Warning: package 'treemap' was built under R version 4.3.2
library(RColorBrewer)

Data

Data yang diimpor adalah data yang sudah dicleaning berdasarkan keperluan.

datasusenas1 = read_xlsx("D:/firlan/Documents/College/Semester 4/Visualisasi Data/Tugas Individu/Data Susenas.xlsx", sheet = 1)
head(datasusenas1)
## # A tibble: 6 × 3
##   R2001C      yearAC R1810A              
##   <chr>        <dbl> <chr>               
## 1 Tidak Punya   2023 Sumur Bor/Pompa     
## 2 Tidak Punya   2023 Sumur Bor/Pompa     
## 3 Tidak Punya   2023 Sumur Terlindung    
## 4 Tidak Punya   2023 Air Isi Ulang       
## 5 Tidak Punya   2023 Air Kemasan Bermerek
## 6 Punya         2023 Air Kemasan Bermerek
datasusenas2 = read_xlsx("D:/firlan/Documents/College/Semester 4/Visualisasi Data/Tugas Individu/Data Susenas.xlsx", sheet = 2)
head(datasusenas2)
## # A tibble: 6 × 4
##   `Luas Rumah` Bandung Bogor Bekasi
##          <dbl>   <dbl> <dbl>  <dbl>
## 1          110  101000 55000  19300
## 2           35   95000 52000  15300
## 3           96    6000  3000   4000
## 4          300   18000  6000   7000
## 5           84   18000  6000      0
## 6          300   58150 18000   7000
datasusenas3 = read_xlsx("D:/firlan/Documents/College/Semester 4/Visualisasi Data/Tugas Individu/Data Susenas.xlsx", sheet = 3)
head(datasusenas3)
## # A tibble: 6 × 3
##   R2001K R2001B R2001D
##    <dbl>  <dbl>  <dbl>
## 1      5      1      5
## 2      5      5      5
## 3      5      1      5
## 4      5      1      5
## 5      1      1      5
## 6      1      1      1

Keterangan: datasusenas1: data yang digunakan untuk visualisasi besaran, datasusenas2: data yang digunakan untuk visualisasi sebaran, dan datasusenas3: data yang digunakan untuk visualisasi komposisi

Visualisasi Besaran

Visualisasi besaran adalah bentuk representasi grafis dari data kuantitatif yang dapat berupa Bar Chart, Stacked-Bar Chart, Grouped-Bar Chart, dan lain sebagainya. Berikut adalah contoh dari visualisasi besaran.

Stacked-Bar Chart

Stacked-Bar Chart berikut merepresentasikan total rumah tangga di Provinsi Jawa Barat yang memiliki Air Conditioner di rumahnya.

Pertama-tama data yang akan digunakan disusun atau difilter terlebih dahulu ke dalam suatu variabel agar memudahkan dalam proses pembuatan grafik. Nama variabel yang digunakan untuk menyimpan data yang telah tersusun pada kali ini adalah “data_stacked”.

data_stacked <- datasusenas1 %>%
  filter(R2001C %in% c("Tidak Punya", "Punya")) %>%
  filter(yearAC %in% c(2023, 2022, 2021))

Setelah data tersusun telah tersimpan dalam suatu subset baru, langkah selanjutnya adalah dengan membuat grafik yang diinginkan. Kali ini akan dibuat Stacked-Bar Chart.

ggplot(data_stacked, aes(x = as.factor(yearAC), fill = as.factor(R2001C))) +
  geom_bar(stat = "count", width = 0.9) +
  labs(fill = "Kepunyaan") +
  ggtitle("Total Rumah Tangga yang Memiliki Air Conditioner 
          dalam Jangka Tahun 2021 hingga 2023") +
  xlab("Tahun") +
  ylab("Frekuensi") +
  scale_fill_manual(values = c("Tidak Punya" = "skyblue", "Punya" = "darkblue")) +
  theme_minimal() +
  coord_cartesian(ylim = c(17000, 26500))

Tervisualisasikan dalam grafik tersebut batang untuk “tidak punya” berwarna sky blue dan batang untuk “punya” berwarna dark blue. Batang pada Stacked-Bar Chart tersebut tidak sepenuhnya ditampilkan, dapat diketahui dari sumbu-Y yang dimulai dari angka 17.000 dan bukan 0. Hal ini dilakukan agar perbedaan antar batang tahun 2021, 2022, dan 2023 semakin terlihat jelas perbedaannya.

Interpretasi: Dari Stacked-Bar Chart tersebut diketahui bahwa sebagian besar rumah tangga yang disurvey di Jawa Barat tidak memiliki Air Conditioner di rumahnya. Perbedaan tinggi batang tahun 2021, 2022, dan 2023 memang tidak terlalu signifikan namun terllihat jika diamati. Terjadi fluktuasi di setiap tahunnya namun tidak terlalu signifikan perbedaannya. Terdapat lebih dari 22500 rumah tangga di Jawa Barat yang disurvey tidak memiliki AC di rumahnya di tiap tahunnya. Hal ini mungkin saja berkaitan dengan banyak daerah di Jawa Barat yang terasa lebih dingin saat malam hari sehingga keberadaan AC di rumah dirasa tidak perlu. Selain itu, terdapat alternatif lain dari penggunaan AC yaitu kipas angin dengan konsumsi daya yang lebih rendah sehingga tidak memerlukan biaya listrik yang tinggi, menjadikan banyak rumah tangga di Jawa Barat yang lebih memilih kipas angin dibandingkan AC.

Lollipop Chart

Lollipop Chart berikut merepresentasikan jumlah masing-masing jenis sumber air yang digunakan rumah tangga sebagai sumber air minum di Jawa Barat.

datasusenas1 %>%
  count(R1810A) %>%
  arrange(desc(n)) %>% # gunakan arrange(n) untuk mengurutkan sebaliknya
  filter(R1810A != "NA") %>% 
  ggplot() +
  geom_segment(aes(x = fct_reorder(as.factor(R1810A), n), xend = fct_reorder(as.factor(R1810A), n), y = 0, yend = n), color = "lightpink", linewidth = 2) +
  geom_point(aes(x = fct_reorder(as.factor(R1810A), n), y = n), color = "red", size = 3) +
  coord_flip() +
  ggtitle("Jumlah Rumah Tangga di Jawa Barat yang Menggunakan 
          Sumber Air Tertentu Untuk Minum pada Tahun 2023") +
  xlab("") +
  ylab("Jumlah Rumah Tangga") +
  theme_light() +
  theme(plot.title = element_text(hjust = 0.5))

Interpretasi: Dari Lollipop Chart di atas, berdasarkan survey, dapat diketahui bahwa jenis sumber air yang paling banyak digunakan rumah tangga yang disurvey di Jawa Barat untuk minum adalah air isi ulang dengan jumlah yang hampir menyentuh angka 10.000 rumah tangga. Sedangkan jenis sumber air yang paling sedikit digunakan rumah tangga di Jawa Barat untuk minum adalah air hujan yang dapat dilihat di grafik jumlahnya mendekati 0 (bukan 0, karena ujung dari batang lollipop tidak tepat berada di garis vertikal 0). Dapat terlihat bahwa jumlah rumah tangga yang menggunakan air kemasan bermerek kurang dari jumlah rumah tangga yang menggunakan air isi ulang sebagai sumber air minumnya. Hal ini dapat terjadi mungkin karena harga air isi ulang yang lebih murah daripada harga air kemasan bermerek.

Visualisasi Sebaran

Visualisasi sebaran merupakan bentuk visualisasi dari data dimana dari visualisasi tersebut dapat diketahui mengenai sebaran data dan pola penyebarannya.

Boxplot

Boxplot berikut merepresentasikan sebaran luas rumah warga Jawa Barat di Tahun 2023.

ggplot(datasusenas2) +
    geom_boxplot(aes(x = `Luas Rumah`),show.legend = F) +
    ggtitle("Sebaran Luas Lantai Rumah Warga Jawa Barat di Tahun 2023") +
    xlab("Luas Lantai Rumah (m2)") +
    theme(plot.title = element_text(hjust = 0.5))+
    theme_bw() +
    xlim(0,250)
## Warning: Removed 20721 rows containing non-finite values (`stat_boxplot()`).

Terdapat banyak sekali outlier pada data luas lantai rumah, sehingga dilakukan penyesuaian terhadap rentang sumbu-Y menjadi 0 m2 hingga 250 m2 saja agar boxplot terlihat lebih jelas.

Interpretasi: Dari boxplot tersebut dapat terlihat bahwa data luas lantai rumah cenderung menjulur ke kanan dengan banyak sekali pencilan (outlier) di sebelah kanan. Hal tersebut mengindikasikan bahwa banyak sekali warga Jawa Barat yang luas lantai rumahnya tidak besar dan sedikit warga Jawa Barat yang luas lantai rumahnya besar. Dari box terlihat bahwa median dari luas lantai rumah berada dalam selang 50 hingga 75 m2. Perlu diketahui bahwa luas lantai rumah berbeda dengan luas tanah, dapat diartikan bahwa ketika rumah memiliki beberapa lantai dapat dipastikan luas lantai rumah akan lebih besar dibandingkan luas tanah.

Density Plot

Density Plot berikut merepresentasikan sebaran nilai pengeluaran seminggu satu rumah tangga yang berasal dari pembelian makanan di Kota Bandung, Bekasi, dan Bogor.

ggplot(datasusenas2)+
  geom_density(aes(x=Bandung,fill= "Bandung" ),color="lightgreen", alpha=0.4)+
  geom_density(aes(x=Bogor,fill="Bogor"), color="skyblue", alpha=0.4)+
  geom_density(aes(x=Bekasi,fill="Bekasi"), color="pink", alpha=0.4)+
  labs(title="Sebaran Nilai Pengeluaran Seminggu Satu Rumah Tangga yang Berasal 
      dari Pembelian Makanan di Kota Bandung, Bekasi, dan Bogor")+
  xlab("Nilai Pengeluaran Seminggu")+
  ylab("Density") +
  xlim(0,50000)
## Warning: Removed 6093 rows containing non-finite values (`stat_density()`).
## Warning: Removed 16192 rows containing non-finite values (`stat_density()`).
## Warning: Removed 6652 rows containing non-finite values (`stat_density()`).

Rentang dari sumbu-X disesuaikan agar density plot semakin jelas terlihat bentuknya.

Interpretasi: Density plot di atas menunjukkan bahwa baik di Kota Bandung, Bekasi, maupun Bogor data untuk nilai pengeluaran seminggu satu rumah tangga yang berasal dari pembelian makanan menjulur ke kanan. Hal ini mengindikasikan bahwa kebanyakan rumah tangga yang disurvey di ketiga kota tersebut tidak mengeluarkan nominal uang yang besar dalam membeli membeli makanan. Density plot menunjukkan bahwa data ketiga kota tersebut unimodal atau hanya memiliki satu nilai modus dan nilai modus tersebut berada di angka yang kurang lebih sama. Banyak rumah tangga yang disurvey di Kota Bandung yang pengeluaran seminggu untuk membeli makanan adalah sebesar kurang dari 5000. Hal tersebut juga terjadi di Kota Bogor. Sedangkan untuk Kota Bekasi berada di angka 5000. Berdasarkan data ini memang sedikit janggal bahwa pengeluaran satu rumah tangga untuk membeli makanan dalam seminggu banyak yang di bawah 5000. Mungkin hal tersebut dapat terjadi karena banyak rumah tangga yang mencari bahan makanannya sendiri tanpa membeli (memancing, bertani, menanam)

Visualisasi Komposisi

Visualisasi komposisi adalah bentuk representasi grafis pembagian dari keseluruhan menjadi bagian-bagian yang lebih kecil. Visualisasi komposisi biasanya digunakan dalam melihat kontribusi suatu kategori terhadap keseluruhan.

Pie Chart

Pie chart berikut merupakan komposisi rumah tangga di Jawa Barat yang memiliki mobil maupun yang tidak.

data_pie <- datasusenas3 %>%
  mutate(R2001K = ifelse(R2001K == 1, "Punya", "Tidak punya")) %>% 
  count(R2001K) %>%
  mutate(percentage = prop.table(n) * 100)

ggplot(data_pie, aes(x = "", y = percentage , fill = R2001K)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_manual(values = c("yellow", "lightgreen")) +
  theme_void() +
  theme(legend.position = "bottom") +
  labs(title = "Presentase Rumah Tangga di Jawa Barat yang Memiliki Mobil", fill = "Keterangan") +
  geom_text(aes(label = paste0(round(percentage), "%")), position = position_stack(vjust=0.5))

Interpretasi: Sebelas persen rumah tangga di Jawa Barat yang disurvey ternyata memiliki mobil sedangkan delapan puluh sembilan persen persen lainnya tidak. Hal tersebut mengindikasikan bahwa sebagian besar rumah tangga di Jawa Barat tidak memiliki mobil. Hal demikian terjadi mungkin karena banyak rumah tangga yang merasa tidak memerlukan mobil karena anggota keluarganya yang sedikit, belum memiliki cukup uang untuk membeli mobil, atau alasan-alasan lainnya.

Treemap Chart

Diperlukan penggabungan dari dua buah kolom menjadi satu kolom terlebih dahulu. Penggabungan kedua kolom tersebut dilakukan tanpa menghilangkan salah satu nilai dari salah satu kolom.

editdata = unite(datasusenas3, BdanD, R2001B, R2001D, sep = "-")

datatreemap = editdata %>% mutate(BdanD = ifelse(BdanD == "1-5", "Kulkas",
                            ifelse(BdanD == "5-1", "Water Heater",
                            ifelse(BdanD == "1-1", "Kulkas dan Water Heater",
                            ifelse(BdanD == "5-5", "Tidak keduanya", BdanD))))) %>% 
                            count(BdanD) %>%
                            mutate(percentage = prop.table(n) * 100) %>% 
                            mutate(frequency = n)
head(datatreemap)
## # A tibble: 4 × 4
##   BdanD                       n percentage frequency
##   <chr>                   <int>      <dbl>     <int>
## 1 Kulkas                  16845    65.1        16845
## 2 Kulkas dan Water Heater   617     2.38         617
## 3 Tidak keduanya           8413    32.5         8413
## 4 Water Heater               15     0.0579        15

Setelah dibuat subset data baru dengan nama datatreemap, dilakukan pembuatan treemap berdasarkan subset data tersebut.

treemap(datatreemap, 
          index=c("BdanD", "frequency"), 
          vSize="percentage",
          draw=TRUE,
          title="Rumah tangga di Jawa Barat yang memiliki Kulkas dan Water Heater",
          palette = "Set3",
          fontsize.title=13,
          fontsize.labels=12,
          fontcolor.labels="black")

Interpretasi: Berdasarkan Treemap di atas dapat terlihat bahwa sebagian besar rumah tangga di Jawa Barat memiliki hanya memiliki kulkas namun tidak memiliki water heater. Terdapat juga sebagian rumah tangga yang memiliki kulkas dan water heater. Namun terlihat, banyak rumah tangga yang tidak memiliki keduanya. Hanya sebagian kecil rumah tangga di Jawa Barat yang hanya memiliki kulkas namun tidak memiliki water heater. Hal tersebut berkaitan dengan fakta bahwa saat ini keberadaan kulkas di rumah sudah menjadi sebuah kewajiban karena banyak bahan makanan yang harus disimpan di dalam kulkas. Sedangkan water heater bukan merupakan sebuah kewajiban untuk dimiliki karena rumah tangga dapat merebus air untuk memperoleh air hangat.