Membaca Data

library(tidyverse) 
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Warning: package 'dplyr' 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.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.5.0     ✔ 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)
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
datasusenas <- read.csv("C:/Users/Lenovo/Downloads/datasusenas.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]
library(dplyr)
library(ggplot2)

1. Visualisasi Besaran

Bar Chart

  1. Mengidentifikasi Data
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",
         )
  1. Membuat bar chart
 ggplot(datasusenas, aes(x = sumber_air)) +
         geom_bar(fill = "#D1E5F0") +
         labs(title = "Apa sumber air utama yang digunakan untuk minum?",
              x = "Sumber Air",
              y = "Jumlah")+ coord_flip() +
  theme_classic()

  1. Mengurutkan data
datasusenas %>%
  count(sumber_air) %>%
  slice_max(n = 11, order_by = n) %>%
  ggplot() +
  geom_col(aes(x = fct_reorder(as.factor(sumber_air), n), y = n), fill = "#D1E5F0", width = 0.4) +
  geom_text(aes(x = fct_reorder(as.factor(sumber_air), n), y = n, label = n),
            position = position_stack(vjust = 0.5), color = "black", size = 4) +
  labs(title = "Sumber air utama yang digunakan untuk minum di Jawa Barat 2023",
       x = "Sumber Air",
       y = "Frekuensi") +
  coord_flip()+
  theme_classic()

Pada Bar Chart tentang sumber air minum utama yang digunakan Jawa Barat pada 2023 di atas terlihat bahwa sumber air utama yang lebih banyak digunakan oleh warga Jawa Barat pada tahun 2023 adalah air isi ulang dengan jumlah pemakaian 9828, disusul sumur bor/pompa, kemudian sumur terlindung. Sedangkan sumber air utama digunakan paling sedikit adalah air hujan dengan jumlah pemakaian 10. Grafik yang diurutkan lebih menarik dan mudah diterima oleh pembaca karena bisa menarik kesimpulan yang terbanyak digunakan dan yang paling sedikit.

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 = "green") +
  geom_point(aes(x = fct_reorder(as.factor(sumber_air), n), y = n), color = "red", size = 2) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Apa sumber air utama yang digunakan untuk minum?") +
  xlab("Sumber Air") +
  ylab("Frekuensi") +
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5))

Pada Lollipop chart tentang sumber air minum utama yang digunakan Jawa Barat pada 2023 di atas terlihat bahwa sumber air utama yang lebih banyak digunakan oleh warga Jawa Barat pada tahun 2023 adalah air isi ulang dengan jumlah pemakaian 9828, disusul sumur bor/pompa, kemudian sumur terlindung. Sedangkan sumber air utama digunakan paling sedikit adalah air hujan dengan jumlah pemakaian 10. Grafik yang diurutkan lebih menarik dan mudah diterima oleh pembaca karena bisa menarik kesimpulan yang terbanyak digunakan dan yang paling sedikit.

2. Visualisasi Sebaran

Histogram

ggplot(datasusenas)+
  geom_histogram(aes(x=R1804), binwidth = 50, fill="maroon", color="#e9ecef", alpha=0.8)+
  labs(title="Sebaran Luas Lantai Bangunan Jawa Barat 2023")+
  xlab("Luas Lantai Bangunan")+
  ylab("Frekuensi")+
  theme_classic()

Histogram menunjukkan bahwa luas lantai bangunan di Jawa Barat pada 2023 memiliki ekor panjang ke kanan, menunjukkan adanya beberapa bangunan besar. Hal ini membuat nilai mean > median > modus. Data ekstrim dengan luas 935m² menonjol, sementara sebagian besar bangunan memiliki luas 0-250m². Hal ini menunjukkan variasi luas bangunan di Jawa Barat, dengan sebagian besar kecil dan beberapa yang sangat besar.

Density plot

ggplot(datasusenas)+
  geom_density(aes(x=R1804,fill= "luas lantai" ),color="maroon", alpha=0.5)+
  labs(title="Sebaran Luas Lantai Bangunan di Jawa Barat 2023")+
  xlab("Luas Lantai Bangunan")+
  ylab("Frekuensi")

Density plot terkait sebaran luas lantai bangunan di Jawa Barat 2023 menunjukkan bahwa luas lantai bangunan di Jawa Barat pada 2023 memiliki ekor panjang ke kanan, menunjukkan adanya beberapa bangunan besar. Hal ini membuat nilai mean > median > modus. Data ekstrim dengan luas 935m² menonjol, sementara sebagian besar bangunan memiliki luas 0-250m². Hal ini menunjukkan variasi luas bangunan di Jawa Barat, dengan sebagian besar kecil dan beberapa yang sangat besar.

3. Visualisasi Komposisi

Pie Chart

datasusenas$makan_bergizi <- case_when(
         datasusenas$R1702 == 1 ~ "ya",
         datasusenas$R1702 == 5 ~ "tidak",
         datasusenas$R1702 == 8 ~ "tidak tahu",
         datasusenas$R1702 == 9 ~ "menolak menjawab",
         )
library(ggplot2)

ggplot(datasusenas, aes(x = "", fill = makan_bergizi)) +
  geom_bar(width = 1, stat = "count") +
  coord_polar(theta = "y") +
  labs(title = "Apakah ada saat dimana tidak dapat menyantap makanan sehat dan bergizi?",
       fill = "Respon") +
  scale_fill_manual(values = c("ya" = "green", "tidak" = "coral","tidak tahu" = "purple","menolak menjawab" = "blue")) + # Mengganti warna
  theme_void() +
  geom_text(aes(label = after_stat(count)), stat = "count", position = position_stack(vjust = 0.5), parse = FALSE, check_overlap = FALSE, na.rm = FALSE, size = 3) 

dapat dilihat dari pie chart di atas bahwa jawaban ‘tidak’ atas pertanyaan “Apakah ada saat dimana tidak dapat menyantap makanan sehat dan bergizi?” sangat mendominasi dengan 23697 respon. kemudian disusul jawaban ‘ya’ dan yang paling sedikit adalah responden yang menolak menjawab yakni 10 responden. maka dari itu sebanyak 23 ribu lebih responden tidak pernah memiliki saat dimana tidak bisa menyantap makanan sehat dan bergizi

###Treemap

library(treemap)
## Warning: package 'treemap' was built under R version 4.3.2
# Mengubah data angka menjadi faktor dengan keterangan yang diinginkan
datasusenas$R1810A <- factor(datasusenas$R1810A,
                             labels = c("Air kemasan bermerk",
                                        "Air isi ulang",
                                        "Leding",
                                        "Sumur bor/pompa",
                                        "Sumur terlindung",
                                        "Sumur tak terlindung",
                                        "Mata air terlindung",
                                        "Mata air tak terlindung",
                                        "Air permukaan",
                                        "Air hujan",
                                        "Lainnya"))

datasusenas$R1812 <- factor(datasusenas$R1812,
                             labels = c("Ya", "Tidak", "Tidak tahu"))

# Visualisasi treemap dengan keterangan yang sudah diubah
treemap(datasusenas, 
        index = c("R1812", "R1810A"), 
        vSize = "R1811A",
        draw = TRUE,
        title = "Treemap: Kekurangan air dan sumber air utama yang digunakan",
        fontsize.title = 14,
        fontsize.labels = 12,
        fontcolor.labels = "white")

Treemap menunjukkan mayoritas responden tidak mengalami kekurangan air. Mereka cenderung menggunakan sumber air isi ulang, sumur bor, atau sumur terlindung. Sedikit yang tidak tahu tentang status air mereka. Ini menandakan akses yang stabil terhadap pasokan air, berpotensi mendukung kesejahteraan dan kesehatan masyarakat. Implikasinya, program-program untuk meningkatkan akses air bersih mungkin fokus pada pengembangan dan pemeliharaan sumber-sumber air yang sudah ada.