Visualisasi Data: Tugas Praktikum Oci

Packages

library(tidyverse)
## 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
library(ggmosaic)
## Warning: package 'ggmosaic' was built under R version 4.3.2
library(ggridges)
## Warning: package 'ggridges' was built under R version 4.3.2
library(GGally)
## 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
library(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

Visualisasi Besaran

Bar Chart

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data akhir alphabet.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    84688 obs. of  1 variable:
##  $ ijazah: chr  "SD" "D3" "SMP" "TIDAK PUNYA IJAZAH SD" ...
data_house %>%
  count(ijazah) %>%
  slice_max(n = 10, order_by = n) %>% # gunakan arrange(n) untuk mengurutkan sebaliknya
  ggplot() +
  geom_col(aes(x = fct_reorder(as.factor(ijazah), n), y = n), fill = "lightgreen", width = 0.4) +
  geom_text(aes(x = fct_reorder(as.factor(ijazah), 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("Manakah Ijazah yang Paling Banyak Dimilikki?") +
  xlab("") +
  ylab("Jumlah Ijazah") +
  theme_classic() +
  theme(plot.title = element_text(hjust = 0.5, size = 15))

Dari Bar Chart di atas, kita bisa mendapatkan informasi bahwa di Provinsi Jawa Barat, sebanyak 22586 individu memiliki Ijazah SD sebagai ijazah pendidikan terakhir. Dilanjut dengan sebanyak 13673 individu memiliki Ijazah SMP sebagai ijazah pendidikan terakhir, dan seterusnya sampai terdapat 528 individu yang memiliki Ijazah MI sebagai ijazah pendidikan terakhir. Khalayak juga bisa mendapatkan informasi bahwa di Provinsi Jawa Barat paling banyak dihuni oleh masyarakat yang mengampu SD sebagai pendidikan terakhir.

Lollipop Chart

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data akhir alphabet.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    84688 obs. of  1 variable:
##  $ ijazah: chr  "SD" "D3" "SMP" "TIDAK PUNYA IJAZAH SD" ...
data_house%>%count(ijazah)%>%
  mutate(ijazah=fct_reorder(as.factor(ijazah),desc(n)))%>%
  ggplot()+
  geom_segment(aes(x=ijazah,xend=ijazah, y=0, yend=n), color="lightblue")+
  geom_point(aes(x=ijazah,y=n),color="darkblue", size=2)+ 
  scale_y_continuous(expand = c(0,0))+
  coord_flip() +
  ggtitle("Lollipop Chart Ijazah") +
  xlab("Keterangan Ijazah") +
  ylab("Jumlah each Ijazah") +
  theme_light() +
  theme(plot.title = element_text(hjust = 0.5))

Dari Lollipop Chart di atas, kita bisa mendapatkan informasi bahwa di Provinsi Jawa Barat, masyarakatnya paling banyak mengampu pendidikan terakhir di tingkat Sekolah Dasar (SD) karena ijazah pendidikan terakhir ada di variabel SD.

Visualisasi Sebaran

Density Plot

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data akhir histo.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    25890 obs. of  1 variable:
##  $ Luas.Bangunan: int  110 35 96 300 84 300 100 42 54 80 ...
ggplot(data_house)+
  geom_density(aes(x=Luas.Bangunan,fill= "Luas Bangunan" ),color="#7FFFD4", alpha=0.4)+
  labs(title="Density Plot Luas Bangunan Rumah di Jawa Barat 2023")+
  xlab("Luas Bangunan")+
  ylab("Jumlah")+
  xlim(0,500)
## Warning: Removed 8 rows containing non-finite values (`stat_density()`).

Dari Density Plot di atas, kita dapat melihat bahwa Plot tersebut skewed to the right yg artinya modus terdapat di bagian kiri. Luas Bangunan yang paling banyak dimiliki oleh masyarakat di Jawa Barat terdapat di range 0-100. Pada data ini terdapat outlier di range 900-1000 namun tak terlihat karena hanya ada 1-2 data, maka dari itu range Xlim hanya dari 0-500 supaya data yang ada terlihat lebih jelas.

Histogram

library(plotly)

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data akhir histo.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    25890 obs. of  1 variable:
##  $ Luas.Bangunan: int  110 35 96 300 84 300 100 42 54 80 ...
ggplot(data_house)+
  geom_histogram(aes(x=Luas.Bangunan),fill="#69b3a2", color="#e9ecef", alpha=0.4)+
  labs(title="Histogram Sebaran Luas Bangunan Tahun 2023")+
  xlab("Luas Bangunan")+
  ylab("Jumlah")+
  xlim(0,500)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 8 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

Dari Histogram di atas, kita dapat melihat bahwa Histogram tersebut skewed to the right yg artinya modus terdapat di bagian kiri. Luas Bangunan yang paling banyak dimiliki oleh masyarakat di Jawa Barat terdapat di range 0-100. Pada data ini terdapat outlier di range 900-1000 namun tak terlihat karena hanya ada 1-2 data, maka dari itu range Xlim hanya dari 0-500 supaya data yang ada terlihat lebih jelas.

Interactive Scatter Plot

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data akhir visdat.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    12 obs. of  2 variables:
##  $ Ijazah                  : chr  "SD" "SMP" "MTs" "SMA" ...
##  $ Frekuensi.Pemilik.Ijazah: int  22586 13673 1008 13292 437 3512 883 155 3864 281 ...
interactive.plot<- ggplot(data_house) +
  geom_point(aes(x = Ijazah,y = Frekuensi.Pemilik.Ijazah),color="steelblue",size=2) +
  ggtitle("Scatter Pemilik Ijazah") +
  ylab("Frekuensi Ijazah") +
  xlab("Ijazah") + 
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

ggplotly(interactive.plot)

Dari Scatter Plot di atas, kita bisa mendapatkan informasi bahwa di Provinsi Jawa Barat, sebanyak 22586 individu memiliki Ijazah SD sebagai ijazah pendidikan terakhir. Dilanjut dengan sebanyak 13673 individu memiliki Ijazah SMP sebagai ijazah pendidikan terakhir, dan seterusnya sampai terdapat S3 individu yang memiliki Ijazah S3 sebagai ijazah pendidikan terakhir. Khalayak juga bisa mendapatkan informasi bahwa di Provinsi Jawa Barat paling banyak dihuni oleh masyarakat yang mengampu SD sebagai pendidikan terakhir. Di Interactive Scatter Plot, kita dapat menggerakkan kursor ke point-point tiap variabel dan dapat terlihat berapa frekuensi dari setiap variabel.

Visualisasi Komposisi

Donut Chart

data <- data.frame(
  category=c("Listrik PLN dengan meteran", "Listrik PLN non meteran", "Listrik non PLN", "Bukan listrik"),
  count=c(24515, 1353, 500, 391)
)
 
data$fraction = data$count / sum(data$count)
data$ymax = cumsum(data$fraction)
data$ymin = c(0, head(data$ymax, n=-1))
 
ggplot(data, aes(ymax=ymax, ymin=ymin, xmax=3, xmin=2, fill=category)) +
    geom_rect() +
    coord_polar(theta="y") +
    xlim(c(0, 5)) +
    labs(title = "Komposisi Pemakaian Listrik")+
    theme_classic()

Dari Donut Chart di atas, kita bisa mendapatkan informasi bahwa di Provinsi Jawa Barat, masyarakatnya paling banyak memakai listrik menggunakan Listrik PLN dengan meteran, dan terdapat sedikit masyarakat yang tidak memakai listrik dari PLN atau tidak memakai listrik.

Pie Chart

data_house <- read.csv("D:/tugas ngampus hampir gila/smt 4/visdut/data treemap.csv", header = TRUE, sep=",")
str(data_house)
## 'data.frame':    84688 obs. of  1 variable:
##  $ R915: int  0 0 0 0 0 0 0 0 0 0 ...
data <- data.frame(
  R915 = c("1", "2", "3", "4", "5+"),
  count = table(cut(data_house$R915, breaks=c(0,1,2,3,4,Inf), labels=c("1", "2", "3", "4", "5+")))
)

ggplot(data, aes(x = "", y = count.Freq , fill = R915)) +
  geom_bar(stat = "identity", width = 3) +
  coord_polar("y", start = 1) +
  scale_fill_brewer(palette = "Set3") +
  theme_void() +
  theme(legend.position = "left") +
  labs(title = "Komposisi Jumlah Kejahatan", fill = "Kejahatan yang Terjadi") +
  geom_text(aes(label = count.Freq), position = position_stack(vjust = 0.5))

Dari Pie Chart di atas kita dapat melihat bahwa masyarakat di Jawa Barat pernah mengalami kejahatan. Dari data yang didapat, terdapat 82000+ masyarakat yang tidak pernah mengalami kejahatan, namun data tersebut terlalu besar sehingga data signifikan yang lain tidak dapat terlihat, maka dari itu di Pie Chart di atas hanya ingin memperlihatkan data signifikan atau data masyarakat yang pernah mengalami kejahatan.