Memuat paket yang diperlukan

library(tidyverse)
## ── 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(treemap)
library(treemapify)
library(ggridges)
library(GGally) 
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
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(ggplot2)

Membaca data

datasusenas <- read.csv("/Users/naiyadzilizzati/Downloads/2023 Maret JABAR - SUSENAS KOR Rumah Tangga.csv", header = TRUE, sep=",")
str(datasusenas)
## 'data.frame':    25890 obs. of  199 variables:
##  $ X         : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ URUT      : int  500001 500002 500003 500004 500005 500006 500007 500008 500009 500010 ...
##  $ PSU       : int  12448 31373 12092 31135 33988 34062 33428 18431 18089 114 ...
##  $ SSU       : int  123442 311039 119908 308689 336798 337531 331261 182888 179477 1020 ...
##  $ WI1       : int  12435 31360 12079 31122 33975 34049 33415 18418 18076 101 ...
##  $ WI2       : int  123427 311024 119893 308674 336783 337516 331246 182873 179462 1005 ...
##  $ R101      : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ R102      : int  7 72 6 72 77 77 75 11 10 1 ...
##  $ R105      : int  2 1 2 1 1 1 1 2 2 1 ...
##  $ NUINFORT  : int  2 1 2 2 1 1 1 2 2 2 ...
##  $ R1701     : int  5 1 5 5 5 5 1 1 1 5 ...
##  $ R1702     : int  5 1 5 5 5 5 1 1 5 5 ...
##  $ R1703     : int  5 1 5 5 5 5 1 5 5 5 ...
##  $ R1704     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ R1705     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ R1706     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ R1707     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ R1708     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ NUINFORT1 : int  2 1 2 2 1 1 1 2 2 2 ...
##  $ R1801     : int  1 1 1 2 1 1 1 2 1 1 ...
##  $ R1802     : int  1 1 1 1 3 1 3 1 1 1 ...
##  $ R1803     : int  5 1 1 1 0 1 0 5 1 5 ...
##  $ R1804     : int  110 35 96 300 84 300 100 42 54 80 ...
##  $ R1805     : int  5 5 5 5 1 1 5 5 5 1 ...
##  $ R1806     : int  2 3 2 2 2 2 2 2 2 1 ...
##  $ R1807     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R1808     : int  4 6 2 2 2 2 2 2 2 2 ...
##  $ R1809A    : int  2 1 1 1 1 1 1 1 1 1 ...
##  $ R1809B    : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R1809C    : int  1 4 1 1 1 1 1 1 3 1 ...
##  $ R1809D    : int  98 0 20 98 98 98 98 98 0 8 ...
##  $ R1809E    : int  7 0 7 7 7 7 7 7 0 7 ...
##  $ R1810A    : int  4 4 5 2 1 1 4 7 4 5 ...
##  $ R1810B    : int  2 2 1 0 0 0 2 2 1 1 ...
##  $ R1811A    : int  2 1 1 2 1 1 1 2 1 1 ...
##  $ R1811B    : int  998 0 0 10 0 0 0 998 0 0 ...
##  $ R1812     : int  5 5 5 5 5 5 1 5 5 5 ...
##  $ R1813A    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1813B    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1813C    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1813D    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1813E    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1814A    : int  4 4 5 5 4 3 4 7 4 5 ...
##  $ R1814B    : int  2 2 1 2 2 0 2 2 1 1 ...
##  $ R1815A    : int  1 1 1 1 1 1 1 1 1 2 ...
##  $ R1815B    : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R1815C    : int  1 1 5 1 1 1 5 1 1 1 ...
##  $ R1816     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R1816B1   : int  1 1 1 2 1 3 3 1 1 1 ...
##  $ R1816B2   : int  0 0 1 0 0 0 0 0 0 0 ...
##  $ R1816B3   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R1817     : int  4 4 4 4 2 3 4 4 4 4 ...
##  $ R1901A    : int  1 5 5 1 5 5 5 5 5 5 ...
##  $ R1901B    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901C    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901D    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901E    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901F    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901G    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901H    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901I    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1901J    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R2001A    : int  5 5 5 5 1 1 5 5 5 5 ...
##  $ R2001B    : int  1 5 1 1 1 1 5 1 1 5 ...
##  $ R2001C    : int  5 5 5 5 5 1 5 5 5 5 ...
##  $ R2001D    : int  5 5 5 5 5 1 5 5 5 5 ...
##  $ R2001E    : int  5 5 5 5 5 1 5 5 5 5 ...
##  $ R2001F    : int  1 5 5 5 1 1 5 5 5 5 ...
##  $ R2001G    : int  5 5 5 5 5 1 5 1 5 5 ...
##  $ R2001H    : int  5 5 1 1 1 1 1 1 1 1 ...
##  $ R2001I    : int  5 5 5 5 1 1 5 5 5 5 ...
##  $ R2001J    : int  5 5 5 5 1 5 5 5 5 5 ...
##  $ R2001K    : int  5 5 5 5 1 1 5 5 5 5 ...
##  $ R2001L    : int  5 5 5 5 1 1 5 5 5 5 ...
##  $ R2001M    : int  1 1 1 1 5 1 5 5 1 5 ...
##  $ R2002_A   : chr  "A" "A" "A" "A" ...
##  $ R2002_B   : chr  "" "" "" "" ...
##  $ R2002_C   : chr  "" "" "" "" ...
##  $ R2002_D   : chr  "" "" "" "" ...
##  $ R2101A    : int  2 1 1 1 1 4 2 1 1 1 ...
##  $ R2101B    : int  0 2 1 1 2 0 0 4 1 1 ...
##  $ R2101C    : int  2 0 0 0 0 0 3 0 0 0 ...
##  $ R2201A2   : int  1 5 5 5 5 5 5 5 5 5 ...
##  $ R2201A3   : int  1 0 0 0 0 0 0 0 0 0 ...
##  $ R2201B2   : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R2201B3   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R2201C2   : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R2201C3   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R2201D2   : int  5 5 5 5 1 5 5 5 5 5 ...
##  $ R2201D3   : int  0 0 0 0 1 0 0 0 0 0 ...
##  $ R2201E2   : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R2201E3   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R2201F2   : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R2201F3   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R2202     : int  2 1 5 5 5 5 5 2 2 5 ...
##  $ R2203     : int  1 5 5 5 5 5 5 5 5 5 ...
##  $ R2204A    : int  1 0 0 0 0 0 0 0 0 0 ...
##  $ R2204B    : int  4 0 0 0 0 0 0 0 0 0 ...
##  $ R2204C_A  : chr  "A" "" "" "" ...
##   [list output truncated]

Visualisasi Besaran

Bar Chart

sumber_air<-datasusenas$R1810A
datasusenas$sumber_air <- case_when(
  datasusenas$R1810A == 1 ~ "Air kemasan bermerk",
  datasusenas$R1810A == 2 ~ "Air isi ulang",
  datasusenas$R1810A == 3 ~ "Leding",
  datasusenas$R1810A == 4 ~ "Sumur bor/pompa",
  datasusenas$R1810A == 5 ~ "Sumur terlindung",
  datasusenas$R1810A == 6 ~ "Sumur tak terlindung",
  datasusenas$R1810A == 7 ~ "Mata air terlindung",
  datasusenas$R1810A == 8 ~ "Mata air tak terlindung",
  datasusenas$R1810A == 9 ~ "Air permukaan (sungai, danau/waduk, kolam, irigasi)",
  datasusenas$R1810A == 10 ~ "Air hujan",
  datasusenas$R1810A == 11 ~ "Lainnya",)
ggplot(datasusenas, aes(x = sumber_air)) +
  geom_bar(fill = "salmon") +
  labs(title = "Sumber air utama untuk minum",
       x = "Sumber Air",
       y = "Jumlah")+ coord_flip() +
  theme_classic()

Pada Bar Chart diatas terlihat bahwa sumber air yang lebih banyak digunakan oleh warga Jawa Barat pada tahun 2023 adalah Air isi ulang dengan jumlah pemakaian lebih dari 9000 rumah tangga, sedangkan yang paling sedikit adalah Air hujan dengan jumlah pemakaian kurang dari 300 rumah tangga.

Lollipop Chart

datasusenas %>%
  count(sumber_air) %>%
  arrange(desc(n)) %>%
  ggplot() +
  geom_segment(aes(x = fct_reorder(as.factor(sumber_air), n), xend = fct_reorder(as.factor(sumber_air), n), y = 0, yend = n), color = "steelblue", size = 2) +
  geom_point(aes(x = fct_reorder(as.factor(sumber_air), n), y = n), color = "pink", size = 5) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Sumber air utama untuk minum") +
  xlab("Sumber Air") +
  ylab("Frekuensi") +
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Pada Lollipop Chart diatas terlihat bahwa sumber air yang lebih banyak digunakan oleh warga Jawa Barat pada tahun 2023 adalah Air isi ulang dengan jumlah pemakaian lebih dari 9000 rumah tangga, sedangkan yang paling sedikit adalah Air hujan dengan jumlah pemakaian kurang dari 300 rumah tangga. Pada Visualisasi besaran dengan data sumber air minum dan Jumlah rumah tangga lebih menarik untuk melihat dengan Lollipop Char

Visualisasi Sebaran

Density Plot

luas_bangunan<-datasusenas$R1804
ggplot(datasusenas)+
  geom_density(aes(x=luas_bangunan,fill= "Luas" ),color="#e9ecef", alpha=0.4)+
  labs(title="Luas lantai rumah bangunan tempat tinggal")+
  xlab("Luas Bangunan")+
  ylab("Jumlah")+
  xlim(2,250)
## Warning: Removed 322 rows containing non-finite values (`stat_density()`).

Pada Density Plot terlihat sebaran Luas bangunan di Jawa Barat sangat bervariasi, terlihat bahwa luas bangunan >200 meter memiliki sebaran yang sedikit, sedangkan luas bangunan <75 meter masih memiliki sebaran yang banyak, berarti dapat disimpulkan pada tahun 2023 di Provinsi Jawa Barat terdapatbanyak rumah dengan luas bangunan <75 meter.

Histogram Plot

ggplot(datasusenas)+
  geom_histogram(aes(x=luas_bangunan),fill="salmon", color="#e9ecef", alpha=0.8)+
  labs(title="Luas lantai rumah bangunan tempat tinggal")+
  xlab("Luas Bagunan")+
  ylab("Jumlah")+
  xlim(2,250)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 322 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

Pada Histogram Plot terlihat sebaran Luas bangunan di Jawa Barat sangat bervariasi, terlihat bahwa luas bangunan >200 meter memiliki sebaran yang sedikit, sedangkan luas bangunan <75 meter masih memiliki sebaran yang banyak, berarti dapat disimpulkan pada tahun 2023 di Provinsi Jawa Barat terdapatbanyak rumah dengan luas bangunan <75 meter.

Visualisasi Komposisi

Pie Chart

makan<-datasusenas$R1704
datasusenas %>%
  mutate(R1704 = ifelse(R1704 ==5, "Tidak Menjawab", R1704),
         R1704 = ifelse(R1704 ==1, "Ya", R1704),
         R1704 = ifelse(R1704 ==9, "Menolak menjawab", R1704),
         R1704 = ifelse(R1704 ==8, "Tidak tau", R1704)) -> datasusenas

makan <- datasusenas %>% group_by(R1704) %>%
  summarize(lewat_makan = n())

df <- head(makan)

  ggplot(df, aes(x = "", y = lewat_makan, fill = R1704)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  theme_void() +
  theme(legend.position = "right") +
  labs(title = "Apakah pernah melewatkan satu waktu makan pada suatu hari tertentu?", fill = " ") +
  geom_text(aes(label = lewat_makan), position = position_stack(vjust = 0.5))

Pada pie chart terlihat bahwa komposisi sebaran pernah melewatkan waktu makan di Jawa Barat pada tahun 2023. Terlihat komposisi Tidak menjawab sangat besar, yaitu 25195.

 treemap(datasusenas, 
          index=c( "R1811B","R1810A"), # Kolom untuk pengelompokan
          vSize="R1811A", # Kolom untuk ukuran area
          draw=TRUE, # gambar treemap
          title="Treemap: sumber air dan lama waktu minum",
          fontsize.title=15,
          fontsize.labels=10,
          fontcolor.labels="white")

Treemap diatas menggambarkan membagi data berdasarkan sumber air dan waktu minum, Hal ini akan memberikan visualisasi yang informatif tentang distribusi sumber air minum dan hubungannya terhadap lama waktu minum.