Tugas Praktikum Visualisasi Data
Identitas
Nama : Nabil Bintang Prayoga
NIM : G1401221017
Visualisasi Data - STA1262
Inisialisasi Library
## 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.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
## Warning: package 'ggmosaic' was built under R version 4.3.2
## Warning: package 'treemap' was built under R version 4.3.2
## Warning: package 'treemapify' was built under R version 4.3.2
## Warning: package 'ggridges' was built under R version 4.3.2
## Warning: package 'GGally' was built under R version 4.3.2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
##
## Attaching package: 'GGally'
##
## The following object is masked from 'package:ggmosaic':
##
## happy
## 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
Untuk membuat visualisasi data menggunakan R Studio dibutuhkan beberapa library yang menyimpan berbagai syntax chart. Setiap library digunakan untuk kebutuhan syntax yang berbeda dan harus diinisialisasi terlebih dahulu agar syntax bisa berjalan dengan baik. Jika belum diinstall, maka bisa install terlebih dahulu dengan syntax install.packages(“nama library”).
Pemanggilan Data
dataA <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KP 2023.xlsx")
dataB <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KOR INDIVIDU 2023.xlsx")
dataC <- read_xlsx("D:\\KULIAHH\\SEMESTER 4\\VISDAT\\KOR RUMAH TANGGA 2023.xlsx")Pada praktik kali ini, digunakan 3 data yang berbeda namun bersumber
pada data yang sama, yaitu Susenas Provinsi Jawa Barat Tahun 2023. Data
tersebut yaitu data konsumsi pengeluaran (dataA), data pokok individu
(dataB), dan data keterangan pokok rumah tangga (dataC). Data diambil
berdasarkan sampel individu setiap Kabupaten/Kota dalam suatu rumah
tangga. Berikut informasi terkait kode wilayah Kabupaten/Kota pada data
ini:
1 <- Bogor
2 <- Sukabumi
3 <- Cianjur
4 <- Bandung
5 <- Garut
6 <- Tasikmalaya
7 <- Ciamis
8 <- Kuningan
9 <- Cirebon
10 <- Majalengka
11 <- Sumedang
12 <- Indramayu
13 <- Subang
14 <- Purwakarta
15 <- Karawang
16 <- Bekasi
17 <- Bandung Barat
18 <- Pangandaran
71 <- Kota Bogor
72 <- Kota Sukabumi
73 <- Kota Bandung
74 <- Kota Cirebon
75 <- Kota Bekasi
76 <- Kota Depok
77 <- Kota Cimahi
78 <- Kota Tasikmalaya
79 <- Kota Banjar
Besaran Data
Visualisasi besaran data dapat menggambarkan keadaan suatu waktu, kondisi, maupun entitas, serta perbandingan antarkategori dan antarwaktu.
Bar Chart
data1A <- dataA %>%
filter(KODE %in% 2)
data1A %>%
group_by(R102) %>%
summarize(total=sum(B41K6)) %>%
arrange(desc(total)) %>%
ggplot(aes(x = reorder(R102, total), y = total)) +
geom_col(fill="#a3c6ca") +
coord_flip() +
ggtitle(" Banyaknya Konsumsi Satu Rumah Tangga Berdasarkan Pembelian Beras
Selama Seminggu di Setiap Kabupaten/Kota Provinsi Jawa Barat Tahun 2023") +
xlab("Kode Kabupaten/Kota") +
ylab("Banyaknya Agregasi Pembelian Beras (rupiah)") +
theme_classic()
Data yang digunakan berasal dari dataA dengan filter Kode = 2 yaitu
komoditi Beras. Data dikelompokkan dan diurutkan berdasarkan wilayah
sebagai hasil dari agregasi konsumsi keseluruhan rumah tangga (variabel
B41K6). Diperoleh data bahwa wilayah dengan kode 1, yaitu Kabupaten
Bogor, menjadi wilayah dengan agregasi pengeluaran pembelian beras
setiap minggunya, diikuti dengan wilayah berkode 4 (Kabupaten Bandung)
dan 16 (Kabupaten Bekasi). Berbanding terbalik dengan wilayah berkode 18
yang menjadi wilayah dengan agregasi pengeluaran beras setiap minggu
paling sedikit, yaitu Kabupaten Pangandaran.
Grouped Bar Chart
data2A <- dataA %>%
filter(KODE %in% c(66, 67, 68, 69))
ggplot(data2A, aes(x = as.factor(R105), y = B41K5, fill = as.factor(KODE))) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
labs(fill = "Jenis Telur") +
ggtitle("Total Konsumsi Telur Seminggu per Rumah Tangga
Berdasarkan Jenis Telur dan Kelompok Wilayah") +
xlab("Kelompok Wilayah") +
ylab("Total Konsumsi") +
scale_fill_manual(values = c("66" = "#9290f3", "67" = "#3290d7", "68" = "#33e7cd", "69" = "#a4f7df")) +
theme_minimal()
DataA dengan filter kode 66, 67, 68, 69 merupakan komoditi telur dengan
setiap jenisnya secara berurutan adalah telur ayam ras, telur ayam
kampung, telur itik/telur itik manila, dan telur lainnya (puyuh, asin
mentah/matang, penyu, angsa, dan sebagainya). Data dikelompokkan
beradasarkan kelompok wilayah, dengan kode 1 adalah perkotaan dan kode 2
adalah pedesaan. Diagram menunjukkan bahwa total konsumsi telur per
rumah tangga selama seminggu di perkotaan didominasi dengan telur ayam
ras dengan telur itik/telur itik manila memiliki konsumen paling
sedikit. Pada wilayah pedesaan, dominasi konsumsi telur sama pada jenis
telur ayam ras, namun telur itik/telur itik manila tidak menjadi telur
dengan konsumsi paling sedikit. Malah telur ayam kampung menjadi jenis
yang paling sedikit dikonsumi oleh masyarakat pedesaan.
Lolipop Chart
dataB %>%
group_by(`Tahun Lahir`) %>%
summarize(total=sum(`Tahun Lahir`)/mean(`Tahun Lahir`)) %>%
arrange(desc(total)) %>%
slice_head(n = 15) %>%
ggplot(aes(x = reorder(`Tahun Lahir`, total), y = total)) +
geom_segment(aes(xend = reorder(`Tahun Lahir`, total), yend = 1), color = "darkgrey") +
geom_point(color = "blue", size = 4) +
geom_text(aes(label = total), vjust = -0.5, color = "black", size = 3) +
coord_flip() +
ggtitle("TOP 10 Banyaknya Responden KOR Individu Berdasarkan Tahun Kelahiran") +
xlab("Tahun Kelahiran") +
ylab("Jumlah") +
theme_classic()
Diagram ini menggambarkan 10 besar tahun kelahiran masyarakat Jawa Barat
yang menjadi responden dari Susenas pada tahun 2023. Orang kelahiran
tahun 1982 menjadi responden terbanyak pada survei ini dengan total 1619
orang, disusul dengan kelahiran tahun 2011 dan 2013 masing-masing
sebanyak 1616 dan 1615 orang. Pada posisi 9 dan 10 terdapat 1429
responden dengan tahun kelahiran 2006 dan 1972.
Sebaran Data
Visualisasi ini digunakan untuk mengetahui sebaran data sehingga dapat membantu untuk melihat rentang data, mendeteksi outlier, hingga mendeteksi keberadaan kelompok pada suatu data.
Histogram
data3A <- dataA %>%
filter(KODE %in% 185)
ggplot(data3A)+
geom_histogram(aes(x=B41K6),fill="darkblue", color="#e9ecef", alpha=0.8)+
labs(title="Histogram Sebaran Pengeluaran Air Minum Galon
oleh Rumah Tangga dalam Seminggu")+
xlab("Pengeluaran Seminggu")+
ylab("Frekuensi")+
xlim(10000,50000)## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 5531 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).
Pemfilteran dataA dilakukan untuk mengambil data pada kode nomor 185,
yaitu air kemasan galon. Sumbu X merupakan variabel B41K6 yang merupakan
nilai pengeluatan seminggu satu rumah tangga untuk pembelian air kemasan
galon. Data menunjukkan kemenjuluran ke kanan dengan mayoritas rumah
tangga memiliki pengeluaran untuk hal tersebut dengan rentang 10 hingga
20 ribu.
Density Plot
data4A <- dataA %>%
filter(KODE %in% 110)
ggplot(data4A)+
geom_density(aes(x=B41K6,fill= "B41K6" ),color="#e9ecef", alpha=0.4)+
labs(title="Sebaran Pengeluaran Pembelian Buah
per Minggu Setiap Rumah Tangga")+
xlab("Pengeluaran")+
ylab("Jumlah")+
xlim(10000,100000)## Warning: Removed 7178 rows containing non-finite values (`stat_density()`).
DataA difilter pada kode 110 sebagai komiditi Buah dengan dasar sebaran
B41K6 yaitu nilai pengeluaran selama satu minggu. Terdapat dua
kemungkinan yang diperoleh dari sebaran tersebut, dengan rentang paling
banyak pada harga 10 ribu rupiah hingga 25 ribu rupiah, maka bisa jadi
harga buah cukup murah di Provinsi Jawa Barat sehingga pengeluarannya
pun tidak terlalu tinggi, atau tingkat konsumsi buah di Jawa Barat yang
rendah sehingga sangat sedikit yang membeli buah-buahan.
Violin Plot
data1B<-dataB %>%
filter(R409 > 0)
ggplot(data1B, aes(x = "", y = R409)) +
geom_violin(fill = "#3290a7") +
labs(title = "Umur Perkawinan Pertama Responden KOR Individu",
x = NULL,
y = "Umur Perkawinan Pertama") +
theme_minimal()
Violin plot merupakan plot sebaran yang merupakan perluasan hasil
pencerminan density plot. Data diambil dari dataB dan difilter pada
cariabel R409 yang lebih dari 0, yaitu usia perkawinan pertama setiap
responden, karena jika tertera 0 tahun maka dipastikan responden
tersebut belum menikah. Dari sebaran tersebut diperoleh bahwa kebanyakan
ressponden memiliki usia perkawinan sekitar 20 tahun, terlihat dari
penggembungan area tersebut. Namun hal yang menarik adalah adanya garis
panjang violin menuju ke arah 100 tahun, ternyata terdapat responden
kelahiran 1920an sehingga memiliki usia perkawinan pertama yang juga
cukup lama.
Boxplot
grafik <- ggplot(
data = dataB, mapping = aes(y = `Tahun Lahir`,
fill = as.factor(`Tahun Lahir`))
)
grafik + geom_boxplot(fill = "#5190e4", alpha = 0.8, color = "darkblue") + theme_classic() +
labs(title="Tahun Lahir Responden KOR Individu")
Boxplot ini menggambarkan tahun responden pada KOR Individu. Median dari
sebaran data ini sekitar tahun 1990an dengan satu pencilan, yaitu
responden yang lahir pada tahun di bawah 1925. Pencilan ini membuktikan
data violin plot bahwa memang ada yang memiliki usia perkawinan pertama
yang cukup lama.
Komposisi
Visualisasi ini digunakan untuk melihat bagaimana kontribusi setiap
populasi terhadap sub-populasi lain atau populasi itu sendiri, dapat
menjelaskan terkait persentase dan distribusi relatif suatu topik
tertentu.
## Pie Chart
dataC$R1816B1 <- as.numeric(dataC$R1816B1)
data1C <- dataC %>%
count(R1816B1) %>%
mutate(percentage = prop.table(n) * 100)
ggplot(data1C, aes(x = "", y = percentage, fill = factor(R1816B1))) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
scale_fill_brewer(palette = "Blues") +
theme_void() +
theme(legend.position = "right") +
labs(title = "Komposisi Tegangan Listrik yang Terpasang
pada Meteran Pertama", fill = "Kategori Tegangan Listrik") +
geom_text(aes(label = paste0(round(percentage), "%")), position = position_stack(vjust = 0.5))
Data diambil dari dataC variabel R1816B (tegangan listrik pada meteren
pertama) yang sebelumnya diubah dulu jenisnya menjadi numerik,
dikelompokkan, dan diubah menjadi persentase. Dari pie chart tersebut
terdapat 5% responden yang tidak menjawab atau tidak ada di rumah saat
surveyor datang (kategori 0). Kategori tegangan listrik terbanyak adalah
kategori 1 (450 watt) dengan 49%, diikuti dengan kategori 2 (900 watt)
sebanyak 34% dan kategori 3 (1300 watt atau lebih) sebanyak 11%.
Donut Chart
data2C <- data.frame(
Category=c(1,2,3,4,5),
count=c(21385,1444,2978,77,6)
)
data2C$fraction = data2C$count / sum(data2C$count)
data2C$ymax = cumsum(data2C$fraction)
data2C$ymin = c(0, head(data2C$ymax, n=-1))
ggplot(data2C, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=Category)) +
geom_rect() +
coord_polar(theta="y") +
scale_fill_gradient(low = "#1c9099", high = "#ece2f0") +
xlim(c(2, 4)) +
labs(title = "Komposisi Status Kepemilikan Bangunan Tempat Tinggal",
fill = "Kategori Status Kepemilikan") +
theme_classic()
Data diambil dari dataC pada variabel status kepemilikan rumah.
Diperoleh bahwa sudah banyaak masyarakat Jawa Barat yang memiliki rumah
sendiri (kode 1), selanjutnya rumah kontrak/sewa (2), bebas sewa (3),
dinas (4), dan sedikit yang menjawab lainnya (5).
Mosaic Plot
ggplot(dataB) +
geom_mosaic(aes(x = product(R404, R405), fill = R404)) +
scale_fill_brewer(palette = "Set2") +
labs(title = "Jenis Kelamin vs Status Perkawinan",
x = "Jenis Kelamin", y = "Status Perkawinan") +
theme_classic()## 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.
Data berasal dari dataB dengan pengelompokkan sumbu Y berasal dari
variabel R405 sebagai jenis kelamin (1=laki-laki, 2=perempuan) dan sumbu
X dari variabel R404 sebagai status perkawinan (1=belum kawin, 2=kawin,
3=cerai hidup, 4=cerai mati). Hasil menunjukkan bahwa jumlah responden
laki-laki yang belum menikah lebih banyak dibandingkan dengan perempuan
dan jumlah responden cerai mati perempuan lebih banyak dibandingkan
dengan laki-laki.
Tree Map
treemap(dataB,
index=c("R102","R404"),
vSize="R102",
draw=TRUE,
title="Banyak Responden per Wilayah Berdasarkan Status Perkawinan",
fontsize.title=17,
fontsize.labels=12,
fontcolor.labels="black")
Ukuran setiap kotak utama didasarkan pada variabel R102 yaitu banyaknya
responden setiap wilayahnya, dengan kotak-kotak kecil di dalamnya
merupakan hasil variabel R404, yaitu Status perkawinan (1=belum kawin,
2=kawin, 3=cerai hidup, 4=cerai mati). Kode angka yang lebih tebal di
setiap kotak berbeda warna menunjukkan kode wilayah, sedangkan kode di
dalam kotak utama adalah kode status perkawinan. Responden paling banyak
berasal dari wilayah berkode 75, yaitu Kota Bekasi, di wilayaah ini
lebih banyak responden yang belum kawin dan sangat sedikit yang cerai
mati.
Terima Kasih ~ Nabil Bintang Prayoga/G1401221017