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.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(ggmosaic)
library(treemap)
library(treemapify)
library(ggridges)
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(dplyr)
data<- read.csv("C:/Users/MyBook Hype/Downloads/data bersih.csv")
str(data)
## 'data.frame':    84688 obs. of  100 variables:
##  $ X    : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ URUT : int  500001 500001 500001 500001 500002 500002 500003 500003 500003 500004 ...
##  $ PSU  : int  12448 12448 12448 12448 31373 31373 12092 12092 12092 31135 ...
##  $ SSU  : int  123442 123442 123442 123442 311039 311039 119908 119908 119908 308689 ...
##  $ WI1  : int  12435 12435 12435 12435 31360 31360 12079 12079 12079 31122 ...
##  $ WI2  : int  123427 123427 123427 123427 311024 311024 119893 119893 119893 308674 ...
##  $ R101 : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ R102 : int  7 7 7 7 72 72 6 6 6 72 ...
##  $ R105 : int  2 2 2 2 1 1 2 2 2 1 ...
##  $ R401 : int  1 2 3 4 1 2 1 2 3 1 ...
##  $ R403 : int  1 3 6 6 1 3 1 2 3 1 ...
##  $ R404 : int  4 2 1 1 3 1 2 2 1 2 ...
##  $ R405 : int  2 2 2 1 2 1 1 2 2 1 ...
##  $ R407 : int  68 46 16 6 62 38 54 41 10 40 ...
##  $ R408 : int  0 5 0 0 0 0 1 1 0 1 ...
##  $ R409 : int  20 22 0 0 16 0 27 18 0 16 ...
##  $ R406A: int  5 2 23 17 6 28 10 12 21 26 ...
##  $ R406B: int  4 10 1 8 12 7 11 11 4 3 ...
##  $ R406C: int  1954 1976 2007 2016 1960 1984 1968 1981 2012 1982 ...
##  $ R410 : int  2 2 2 2 1 1 2 2 2 2 ...
##  $ R501 : int  1 1 0 0 2 0 1 1 0 1 ...
##  $ R502 : int  1 2 3 4 1 1 1 1 1 1 ...
##  $ R503 : int  0 1 2 2 0 1 0 0 2 0 ...
##  $ R504 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R506 : int  2 2 2 1 2 1 1 2 2 1 ...
##  $ R507 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R508 : int  5 2 2 2 2 1 5 5 1 1 ...
##  $ R509 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R601 : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ R602 : int  7 7 7 7 72 72 6 6 6 72 ...
##  $ R603 : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ R604 : int  7 7 7 7 72 72 6 6 6 72 ...
##  $ R605 : int  0 0 0 3 0 0 0 0 4 0 ...
##  $ R606 : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ R607 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R608 : int  1 1 1 1 5 5 1 1 1 1 ...
##  $ R609 : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R610 : int  3 3 3 2 3 3 3 3 2 3 ...
##  $ R611 : int  0 0 0 1 0 0 0 0 1 0 ...
##  $ R612 : int  3 19 15 3 3 3 13 8 3 8 ...
##  $ R613 : int  8 8 1 1 8 8 8 8 5 8 ...
##  $ R614 : int  3 19 8 25 3 3 13 8 25 8 ...
##  $ R615 : int  0 0 5 5 0 0 0 0 5 0 ...
##  $ R616 : int  0 0 5 5 0 0 0 0 5 0 ...
##  $ R617 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R618 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R619 : int  0 0 3 1 0 0 0 0 2 0 ...
##  $ R620 : int  0 0 0 0 0 0 0 0 3 0 ...
##  $ R621 : int  0 0 0 0 0 0 0 0 4 0 ...
##  $ R701 : int  1 1 5 5 5 1 1 5 5 1 ...
##  $ R702 : int  1 5 5 5 5 5 1 5 5 1 ...
##  $ R704 : int  3 3 3 0 3 1 1 3 2 1 ...
##  $ R705 : int  5 5 5 0 5 0 0 5 5 0 ...
##  $ R706 : int  0 0 0 0 0 11 12 0 0 13 ...
##  $ R707 : int  0 0 0 0 0 5 1 0 0 4 ...
##  $ R708 : int  0 0 0 0 0 48 50 0 0 48 ...
##  $ R709 : int  0 0 0 0 0 48 50 0 0 97 ...
##  $ R801 : int  5 1 1 5 1 1 1 1 1 1 ...
##  $ R802 : int  5 1 1 5 1 1 1 1 1 1 ...
##  $ R808 : int  5 1 1 5 5 5 1 1 1 1 ...
##  $ R812 : int  5 5 1 5 5 5 5 5 5 5 ...
##  $ R901 : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R902 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R903 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R904 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R905 : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R906 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R907 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R908 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R909 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R910 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R911 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R912 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R913 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R914 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R915 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R916 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R1001: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R1002: int  4 4 4 4 4 4 4 4 4 4 ...
##  $ R1003: int  8 8 8 8 8 8 8 8 8 8 ...
##  $ R1004: int  4 4 4 4 4 4 4 4 4 4 ...
##  $ R1005: int  8 8 8 8 8 8 8 8 8 8 ...
##  $ R1006: int  4 4 4 4 4 4 4 4 4 4 ...
##  $ R1007: int  8 8 8 8 8 8 8 8 8 8 ...
##  $ R1008: int  4 4 4 4 4 4 4 4 4 4 ...
##  $ R1009: int  8 8 8 8 8 8 8 8 8 8 ...
##  $ R1010: int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1102: int  5 5 1 1 5 5 5 5 5 5 ...
##  $ R1103: int  0 0 5 5 0 0 0 0 0 0 ...
##  $ R1104: int  0 0 1 1 0 0 0 0 0 0 ...
##  $ R1105: int  0 0 5 5 0 0 0 0 0 0 ...
##  $ R1106: int  0 0 5 5 0 0 0 0 0 0 ...
##  $ R1108: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R1201: int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1203: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ R1206: int  5 5 5 5 5 5 5 5 5 5 ...
##  $ R1207: int  5 5 5 5 5 1 1 5 5 1 ...
##  $ R1208: int  0 0 0 0 0 35 49 0 0 112 ...
##  $ R1209: int  5 5 5 5 5 1 1 5 5 1 ...
##   [list output truncated]

Visualisasi Komposisi

Pie Chart

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

ggplot(data_pie, aes(x = "", y = percentage , fill = R802 )) +
  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 Telepon Seluler di Daerah Jawa Barat Tahun 2023", fill = "Kategori") +
  geom_text(aes(label = paste0(round(percentage), "%")), position = position_stack(vjust = 0.5))

Treemap

treemap(data, 
        index=c("R102", "R407"), 
        vSize="R802",
        algorithm="pivotSize",
        draw = TRUE,
        title="Treemap: internet",
        fontsize.title=20,
        fontsize.labels=12,
        fontcolor.labels="white")

VISUALISASI SEBARAN

Density Plot

ggplot(data)+
  geom_density(aes(x=R708,fill= "pekerjaan utama" ),color="white", alpha=0.4)+
  geom_density(aes(x=R709,fill= "seluruh pekerjaan" ),color="grey", alpha=0.4)+
  labs(title="Density Plot Sebaran Jumlah Jam Kerja")+
  xlab("Jam Kerja")+
  ylab("Jumlah")+
  xlim(1, 100)
## Warning: Removed 46465 rows containing non-finite values (`stat_density()`).
## Removed 46465 rows containing non-finite values (`stat_density()`).

Dari perbandingan density plot diatas dapat diketahui bahwa masyarakat Jawa Barat dalam sampel cenderung menghabiskan lebih banyak waktu untuk melakukan pekerjaan utama dibandingkan dengan waktu untuk melakukan pekerjaan secara keseluruhan.

Histogram

ggplot(data)+
  geom_histogram(aes(x=R407),fill="lightyellow", color="grey", alpha=0.8)+
  labs(title="Histogram Sebaran Umur ART di Jawa Barat Tahun 2023")+
  xlab("Umur")+
  ylab("Jumlah")+
  xlim(1,100)+
  scale_x_continuous(breaks = seq(0, 100, by = 10))
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Dari hasil analisis didapat histogram bimodal karena memiliki dua puncak, yang artinya ada dua kelompok interval umur Anggota Rumah Tangga (ART) di mayoritas sampel masyarakat Jawa Barat. Interval umur tersebut berada diantara umur 10 hingga 20 tahun dan umur 40 hingga 50 tahun. ## VISUALISASI BESARAN

Bar Chart

data %>%
  count(R614) %>%
  slice_max(n = 4, order_by = n) %>% 
  ggplot() +
  geom_col(aes(x = fct_reorder(as.factor(R614), n), y = n), fill = "lightgreen", width = 0.7) +
  geom_text(aes(x = fct_reorder(as.factor(R614), 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 4 Ijazah/STTBTertinggi yang Dimiliki oleh Masyarakat Jawa Barat") +
  xlab("Ijazah/STTB") +
  ylab("") +
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5, size = 15))

Bar chart di atas menampilkan top 4 ijazah yang dimiliki oleh masyarakat Jawa Barat yang berada dalam sampel. Mayoritas ijazah yang dimiliki masyarakat adalah ijazah/STTB tingkat SD (3) sebanyak 22.586 orang, diikuti ijazah/STTB tingkat SMP (8) sebanyak 13.673 orang, lalu sebanyak 13.663 orang mengatakan tidak memiliki ijazah SD (25), dan terakhir ijazah/STTB tingkat SMA (13) sebanyak 13.292 orang.

Stacked Bar Chart

# Filter Data
data_stacked <- data %>%
  filter(R620 %in% c("3", "4", "8", "13", "15", "20", "21")) %>%
  filter(R617%in% c("450000", "500000", "750000", "4200000"))%>%
  filter(R611%in% c("1", "2"))%>%
  filter(R404%in% c("1", "2", "3","4"))%>%
  filter(R405%in% c("1", "2"))

ggplot(data_stacked, aes(x = as.factor(R611), y = R617, fill = as.factor(R620))) +
  geom_bar(stat = "identity") +
  labs(fill = "Jenjang Pendidikan") +
  ggtitle("Jumlah Uang PIP per Jenjang Pendidikan dan Kategori Sekolah") +
  xlab("Kategori Sekolah") +
  ylab("Jumlah Uang PIP") +
  scale_fill_brewer(palette = "Accent") +
  theme_minimal()

Dari hasil analisis melalui stacked bar chart diatas dengan data sampel masyarakat di Jawa Barat dapat diketahui bahwa jumlah uang PIP lebih banyak untuk mereka yang menjalani pendidikan di sekolah negeri (1) dengan jenjang pendidikan SD (3) dan diikuti jenjang pendidikan SMP (8) di Jawa Barat. Sedangkan untuk mereka yang menjalani pendidikan di sekolah swasta lebih sedikit yang menerima uang PIP dan jumlah uang PIP yang diterima paling banyak ada di jenjang SD (3), SMP (8), dan S1 (21) dengan nominal yang hampir sama.