Siapkan paket

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'ggplot2' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── 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
library(dplyr)
library(ggplot2)
library(ggmosaic)
## Warning: package 'ggmosaic' was built under R version 4.3.3
## 
## Attaching package: 'ggmosaic'
## 
## The following object is masked from 'package:GGally':
## 
##     happy

Read data

data <- read.csv("D:\\IPB\\Statistika Sem 4\\Visualisasi Data\\Tugas akhir visdat\\2023 Maret JABAR - SUSENAS KOR INDIVIDU PART1.csv",sep=";")

Ambil variabel dan filter

#ambil variabel R105,R616 ke dalam data1 dan R105,R616 ke dalam data2
data1 <- data[,c("R105","R616")]
data2 <- data[,c("R105","R615")]
head(data1)
##   R105 R616
## 1    2    0
## 2    2    0
## 3    2    5
## 4    2    5
## 5    1    0
## 6    1    0
head(data2)
##   R105 R615
## 1    2    0
## 2    2    0
## 3    2    5
## 4    2    5
## 5    1    0
## 6    1    0
#filter R611 di data1 yang bernilai selain 0 dan 5 lalu masukan ke variabel data1
data1 <- data1[data1$R616 != 0,]
data1 <- data1[data1$R616 != 5,]
head(data1)
##     R105 R616
## 61     1    1
## 87     1    1
## 146    2    1
## 172    2    1
## 188    2    1
## 235    2    1
#filter R615 di data2 yang bernilai selain 0 dan 5, kemudian ubah nilai 2 menjadi 1 karena sama-sama mengartikan "ya"
data2 <- data2[data2$R615 != 0,]
data2 <- data2[data2$R615 != 5,]
data2$R615 <- ifelse(data2$R615 == 2,1,data2$R615)
data2$R615 <- as.numeric(data2$R615)
head(data2)
##     R105 R615
## 55     1    1
## 87     1    1
## 138    1    1
## 154    1    1
## 155    1    1
## 172    2    1
#filter data1 dimana R105 bernilai 1 kedalam variabel datapip_kota
datapip_kota <- data1[data1$R105 == 1,]
#filter data1 dimana R105 bernilai 2 kedalam variabel datapip_desa
datapip_desa <- data1[data1$R105 == 2,]

#filter data2 dimana R105 bernilai 1 kedalam variabel datakip_kota
datakip_kota <- data2[data2$R105 == 1,]
#filter data2 dimana R105 bernilai 2 kedalam variabel datakip_desa
datakip_desa <- data2[data2$R105 == 2,]

Memerge data

#satukan datapip_kota dan datapip_desa kedalam variabel daerahpip dan hitung frekuensi masing-masing
Daerahpip <- rbind(datapip_kota,datapip_desa)
table(Daerahpip$R105)
## 
##    1    2 
## 1983 1108
#satukan datakip_kota dan datakip_desa kedalam variabel daerahkip dan hitung frekuensi masing-masing
Daerahkip <- rbind(datakip_kota,datakip_desa)
table(Daerahkip$R105)
## 
##    1    2 
## 1945 1126

Ubah variabel

#ubah variabel 1 dan 2 menjadi perkotaan dan pedesaan
Daerahpip$R105 <- factor(Daerahpip$R105,levels=c(1,2),labels=c("Perkotaan","Pedesaan"))
table(Daerahpip$R105)
## 
## Perkotaan  Pedesaan 
##      1983      1108
Daerahkip$R105 <- factor(Daerahkip$R105,levels=c(1,2),labels=c("Perkotaan","Pedesaan"))
table(Daerahkip$R105)
## 
## Perkotaan  Pedesaan 
##      1945      1126
#ubah R105 menjadi variabel Keterangan
names(Daerahpip)[names(Daerahpip)=="R105"] <- "Keterangan"
names(Daerahkip)[names(Daerahkip)=="R105"] <- "Keterangan"

Membuat bar chart

#penerima program PIP
library(ggplot2)
ggplot(Daerahpip,aes(x=Keterangan,fill=Keterangan))+
  geom_bar()+
  geom_text(stat='count',aes(label=..count..),vjust=-0.5)+
  labs(title="Frekuensi Penerima Program PIP",x="Daerah",y="Frekuensi")+
  scale_fill_brewer(palette = "Set2")
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

#Penerima program KIP
ggplot(Daerahkip,aes(x=Keterangan,fill=Keterangan))+
  geom_bar()+
  geom_text(stat='count',aes(label=..count..),vjust=-0.5)+
  labs(title="Frekuensi Penerima KIP",x="Daerah",y="Frekuensi")+
  scale_fill_brewer(palette = "Set2")

Mengambil variabel dan memanipulasi datanya

#ambil hanya kolom R105 dan R616 dan R615
data1 <- data[,c("R105","R616","R615")]

#hapus baris yang memiliki variabel R616 bernilai 0 dan R615 bernilai 0
data1 <- data1[data1$R616 != 0,]

#ubah nilai 2 menjadi 1 pada variabel R615
data1$R615 <- ifelse(data1$R615 == 2,1,data1$R615)

#jika R616 = 1 dan R615 = 5 lalu buat variabel bernama Keterangan dengan nilai "penerima pip"
data1$Keterangan <- ifelse(data1$R616 == 1 & data1$R615 == 5,"PIP",NA)

#jika R616 = 5 dan R615 = 1 lalu buat variabel bernama Keterangan dengan nilai "penerima kip"
data1$Keterangan <- ifelse(data1$R616 == 5 & data1$R615 == 1,"KIP",data1$Keterangan)

#jika R616 = 1 dan R615 = 1 lalu buat variabel bernama Keterangan dengan nilai "penerima pip dan kip"
data1$Keterangan <- ifelse(data1$R616 == 1 & data1$R615 == 1,"PIP dan KIP",data1$Keterangan)

#jika R616 = 5 dan R615 = 5 lalu buat variabel bernama Keterangan dengan nilai "bukan penerima pip dan kip"
data1$Keterangan <- ifelse(data1$R616 == 5 & data1$R615 == 5,"Non Penerima",data1$Keterangan)

head(data1)
##    R105 R616 R615   Keterangan
## 3     2    5    5 Non Penerima
## 4     2    5    5 Non Penerima
## 9     2    5    5 Non Penerima
## 12    1    5    5 Non Penerima
## 13    1    5    5 Non Penerima
## 14    1    5    5 Non Penerima

Ubah type data dan variabel

#ubah type data R105 menjadi factor
data1$R105 <- factor(data1$R105,levels=c(1,2),labels=c("Perkotaan","Pedesaan"))

#ubah R105 menjadi variabel Daerah
names(data1)[names(data1)=="R105"] <- "keterangan"
head(data1)
##    keterangan R616 R615   Keterangan
## 3    Pedesaan    5    5 Non Penerima
## 4    Pedesaan    5    5 Non Penerima
## 9    Pedesaan    5    5 Non Penerima
## 12  Perkotaan    5    5 Non Penerima
## 13  Perkotaan    5    5 Non Penerima
## 14  Perkotaan    5    5 Non Penerima

Membuat mosaic plot

ggplot(data1) +
  geom_mosaic(aes(x = product(keterangan, Keterangan))) +
  labs(title = "Mosaic Plot: Penerima Program PIP dan KIP", 
       x = "Program", y = "Daerah") +
  theme(axis.text.x = element_text(angle = 60, hjust = 1))
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `unite()` instead.
## ℹ The deprecated feature was likely used in the ggmosaic package.
##   Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Membuat stacked bar chart

#100% stacked bar chart
data1 %>%
  ggplot(aes(x = Keterangan, fill = keterangan)) +
  geom_bar(position = "fill") +
  labs(title = "100 Percent Stacked Bar Chart: Penerima Program PIP dan KIP", 
       x = "Program", y = "Persentase") +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5)) +
  scale_fill_brewer(palette = "Set2")

#stacked bar chart
data1 %>%
  ggplot(aes(x = Keterangan, fill = keterangan)) +
  geom_bar() +
  labs(title = "Stacked Bar Chart: Penerima Program PIP dan KIP", 
       x = "Program", y = "Frekuensi") +
  scale_fill_brewer(palette = "Set2")