library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse) #Include beberapa packages termasuk ggplot
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.2
## Warning: package 'forcats' 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 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.4.4     ✔ stringr   1.5.0
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ── 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(treemap)
## Warning: package 'treemap' was built under R version 4.3.2
library(treemapify)
## Warning: package 'treemapify' was built under R version 4.3.2
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
## 
## Attaching package: 'GGally'
## 
## The following object is masked from 'package:ggmosaic':
## 
##     happy
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

Input Data

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.2
Datavisdat<-read_xlsx("D:/Semester 4/Visualisasi Data/Praktikum.xlsx")
str(Datavisdat)
## tibble [84,689 × 9] (S3: tbl_df/tbl/data.frame)
##  $ Kabupaten                  : num [1:84689] 7 7 7 7 72 72 6 6 6 72 ...
##  $ Kota/Desa                  : num [1:84689] 2 2 2 2 1 1 2 2 2 1 ...
##  $ Umur                       : num [1:84689] 68 46 16 6 62 38 54 41 10 40 ...
##  $ Jenis_Kelamin              : num [1:84689] 2 2 2 1 2 1 1 2 2 1 ...
##  $ Kegiatan_Waktu_Terbanyak   : num [1:84689] 3 3 3 0 3 1 1 3 2 1 ...
##  $ Status_Kedudukan_Pekerjaan : num [1:84689] 0 0 0 0 0 5 1 0 0 4 ...
##  $ Jumlah_jamkerja_Utama      : num [1:84689] 0 0 0 0 0 48 50 0 0 48 ...
##  $ Jumlah_Jamkerja_keseluruhan: num [1:84689] 0 0 0 0 0 48 50 0 0 97 ...
##  $ Menggunakan_teleponseluler : num [1:84689] 5 1 1 5 1 1 1 1 1 1 ...

Sebaran Besaran

Barchart

DataKegiatan <- data.frame(kode = c(1,2,3,4), Kegiatan = c("Bekerja", "Sekolah", "Mengurus Rumah Tangga", "Lainnya selain kegiatan Pribadi"))

DataVisdat2 <- left_join(Datavisdat, DataKegiatan, by = c("Kegiatan_Waktu_Terbanyak"= "kode"))
str(DataVisdat2)
## tibble [84,689 × 10] (S3: tbl_df/tbl/data.frame)
##  $ Kabupaten                  : num [1:84689] 7 7 7 7 72 72 6 6 6 72 ...
##  $ Kota/Desa                  : num [1:84689] 2 2 2 2 1 1 2 2 2 1 ...
##  $ Umur                       : num [1:84689] 68 46 16 6 62 38 54 41 10 40 ...
##  $ Jenis_Kelamin              : num [1:84689] 2 2 2 1 2 1 1 2 2 1 ...
##  $ Kegiatan_Waktu_Terbanyak   : num [1:84689] 3 3 3 0 3 1 1 3 2 1 ...
##  $ Status_Kedudukan_Pekerjaan : num [1:84689] 0 0 0 0 0 5 1 0 0 4 ...
##  $ Jumlah_jamkerja_Utama      : num [1:84689] 0 0 0 0 0 48 50 0 0 48 ...
##  $ Jumlah_Jamkerja_keseluruhan: num [1:84689] 0 0 0 0 0 48 50 0 0 97 ...
##  $ Menggunakan_teleponseluler : num [1:84689] 5 1 1 5 1 1 1 1 1 1 ...
##  $ Kegiatan                   : chr [1:84689] "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" NA ...
StatuKedudukan <- data.frame(kode_kedudukan = c(1,2,3,4,5,6), Kedudukan = c("Berusaha Sendiri", "Berusaha dibantu buruh tidak tetap/buruh tidak dibayar", "Berusaha dibantu buruh tetap/Buruh dibayar", "Buruh/Karyawan/pegawai", "Pekerja bebas", "Pekerja keluarga atau tidak dibayar"))
Kedudukan <- left_join(DataVisdat2, StatuKedudukan, by = c("Status_Kedudukan_Pekerjaan"= "kode_kedudukan"))
str(Kedudukan)
## tibble [84,689 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Kabupaten                  : num [1:84689] 7 7 7 7 72 72 6 6 6 72 ...
##  $ Kota/Desa                  : num [1:84689] 2 2 2 2 1 1 2 2 2 1 ...
##  $ Umur                       : num [1:84689] 68 46 16 6 62 38 54 41 10 40 ...
##  $ Jenis_Kelamin              : num [1:84689] 2 2 2 1 2 1 1 2 2 1 ...
##  $ Kegiatan_Waktu_Terbanyak   : num [1:84689] 3 3 3 0 3 1 1 3 2 1 ...
##  $ Status_Kedudukan_Pekerjaan : num [1:84689] 0 0 0 0 0 5 1 0 0 4 ...
##  $ Jumlah_jamkerja_Utama      : num [1:84689] 0 0 0 0 0 48 50 0 0 48 ...
##  $ Jumlah_Jamkerja_keseluruhan: num [1:84689] 0 0 0 0 0 48 50 0 0 97 ...
##  $ Menggunakan_teleponseluler : num [1:84689] 5 1 1 5 1 1 1 1 1 1 ...
##  $ Kegiatan                   : chr [1:84689] "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" NA ...
##  $ Kedudukan                  : chr [1:84689] NA NA NA NA ...
DataVisdat3 <- Kedudukan
str(DataVisdat3)
## tibble [84,689 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Kabupaten                  : num [1:84689] 7 7 7 7 72 72 6 6 6 72 ...
##  $ Kota/Desa                  : num [1:84689] 2 2 2 2 1 1 2 2 2 1 ...
##  $ Umur                       : num [1:84689] 68 46 16 6 62 38 54 41 10 40 ...
##  $ Jenis_Kelamin              : num [1:84689] 2 2 2 1 2 1 1 2 2 1 ...
##  $ Kegiatan_Waktu_Terbanyak   : num [1:84689] 3 3 3 0 3 1 1 3 2 1 ...
##  $ Status_Kedudukan_Pekerjaan : num [1:84689] 0 0 0 0 0 5 1 0 0 4 ...
##  $ Jumlah_jamkerja_Utama      : num [1:84689] 0 0 0 0 0 48 50 0 0 48 ...
##  $ Jumlah_Jamkerja_keseluruhan: num [1:84689] 0 0 0 0 0 48 50 0 0 97 ...
##  $ Menggunakan_teleponseluler : num [1:84689] 5 1 1 5 1 1 1 1 1 1 ...
##  $ Kegiatan                   : chr [1:84689] "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" "Mengurus Rumah Tangga" NA ...
##  $ Kedudukan                  : chr [1:84689] NA NA NA NA ...
DataVisdat3 %>%
  count(Kegiatan) %>%
  ggplot()+
  geom_col(aes(x=fct_reorder(as.factor(Kegiatan),n),y=n), fill="skyblue", 
           width=0.4) +
  geom_text(aes(x = fct_reorder(as.factor(Kegiatan), 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("Banyaknya Jenis Kegiatan") +
    xlab("") +
    ylab("Jumlah") +
    theme_classic() +
    theme(plot.title = element_text(hjust = .5, size = 10))

Interpretasi

Berdasarkan Grafik tersebut, dapat dilihat bahwa jenis kegiatan yang menggunakan waktu paling banyak adalah bekerja, lalu di posisi kedua adalah Mengurus Rumah Tangga, kegita Sekolah, dan di posisi terakhir Kegiatan lain selain kegiatan pribadi. Selain itu dapat terlihat juga pada grafik bahwa banyak data yang NA hal ini mungkin disebabkan karena responden yang mengisi survei tidak menjawab pertanyaan sesuai dengan pilihan yang ada di survei misalnya ada responden yang menjawab 0(dimana 0 ini tidak memiliki arti pada kuisioner), sementara pilihan jawabann yang ada yaitu pilihan angka 1 sampai 6.

Lolipop Chart

DataVisdat3 %>%
  count(Kedudukan) %>%
  arrange(desc(n)) %>% # gunakan arrange(n) untuk mengurutkan sebaliknya
  ggplot() +
  geom_segment(aes(x = fct_reorder(as.factor(Kedudukan), n), xend = fct_reorder(as.factor(Kedudukan), n), y = 0, yend = n), color = "darkblue") +
  geom_point(aes(x = fct_reorder(as.factor(Kedudukan), n), y = n), color = "red", size = 2) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Banyaknya Status Kedudukan Pekerja") +
  xlab("") +
  ylab("Jumlah") +
  theme_light() +
  theme(plot.title = element_text(hjust = 0.5))

Interpretasi

Berdasarkan Grafik tersebut, dapat dilihat bahwa Kedudukan yang menggunakan paling banyak adalah Buruh/Karyawan/pegawai, posisi kedua Berusaha Sendiri,posisi ketiga Pekerja Bebas, posisi Keempat Buruh Tidak Dibayar, Posisi Kelima Pekerja keluarga, dan posisi terakhir Buruh Dibayar. Selain itu dapat terlihat juga pada grafik bahwa banyak data yang NA hal ini mungkin disebabkan karena responden yang mengisi survei tidak menjawab pertanyaan sesuai dengan pilihan yang ada di survei misalnya ada responden yang menjawab 0, sementara pilihan jawabann yang ada yaitu pilihan angka 1 sampai 6.

Sebaran Komposisi

Pie Chart

data_bekerja <- subset(DataVisdat3, Kegiatan == "Bekerja")
data_bekerja
## # A tibble: 35,135 × 11
##    Kabupaten `Kota/Desa`  Umur Jenis_Kelamin Kegiatan_Waktu_Terbanyak
##        <dbl>       <dbl> <dbl>         <dbl>                    <dbl>
##  1        72           1    38             1                        1
##  2         6           2    54             1                        1
##  3        72           1    40             1                        1
##  4        11           2    69             1                        1
##  5        11           2    42             2                        1
##  6        10           2    67             1                        1
##  7         1           1    39             1                        1
##  8         2           1    68             2                        1
##  9         2           1    45             1                        1
## 10        16           1    32             1                        1
## # ℹ 35,125 more rows
## # ℹ 6 more variables: Status_Kedudukan_Pekerjaan <dbl>,
## #   Jumlah_jamkerja_Utama <dbl>, Jumlah_Jamkerja_keseluruhan <dbl>,
## #   Menggunakan_teleponseluler <dbl>, Kegiatan <chr>, Kedudukan <chr>
Pie_chart <- data.frame(
  Jenis_Kelamin  = c("Laki-laki", "Perempuan"),
  count = table(cut(data_bekerja$Jenis_Kelamin, breaks=c(-Inf,1,2), labels=c("Laki-laki", "Perempuan")))
)
Pie_chart
##   Jenis_Kelamin count.Var1 count.Freq
## 1     Laki-laki  Laki-laki      24323
## 2     Perempuan  Perempuan      10812
ggplot(Pie_chart, aes(x = "", y = count.Freq , fill = Jenis_Kelamin  )) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_brewer("Blues")+
  theme_void() +
  theme(legend.position = "right") +
  labs(title = "Komposisi Jenis Kelamin", fill = "Laki2/Perempuan") +
  geom_text(aes(label = count.Freq), position = position_stack(vjust = 0.5))

Interpretasi Pie Chart

Dari diagram Pie Chart tersebut, dapat dilihat bahwa Jumlah laki laki yang bekerja sebanyak 24.323 dan perempuan sebanyak 10.812 orang.

Tree Map

treemap(DataVisdat3, 
          index=c("Jumlah_jamkerja_Utama", "Kota/Desa"), 
          vSize="Jumlah_jamkerja_Utama",
          draw=TRUE,
          title="Treemap: Waktu kerja utama dan daerahnya ",
          fontsize.title=20,
          fontsize.labels=12,
          fontcolor.labels="black",  palette = "Blues")

Innterpretasi Tree Map

Berdasarkan tree map diatas, dapat dilihat bahwa daerah perkotaan memiliki proporsi yang lebih besar dibandingkan daerah perdesaan pada sebagian besar kategori jumlah jam kerja utama. Namun terdapat juga beberapa kategori jam kerja utama yang memiliki komposisi hampir sama antara daerah perdesaan dan perkotaan seperti pada kategori 30 jam dan 36 jam. Dari tree map itu juga kita dapat mengetahui bahwa kategori 48 jam memiliki komposisi paling banyak diantara komposisi kategori jam kerja lainnya.

Histogram dan Density Plot

DataVisdat4 <- na.omit(DataVisdat3)
str(DataVisdat4)
## tibble [38,782 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Kabupaten                  : num [1:38782] 72 6 72 77 11 11 10 1 2 2 ...
##  $ Kota/Desa                  : num [1:38782] 1 2 1 1 2 2 2 1 1 1 ...
##  $ Umur                       : num [1:38782] 38 54 40 52 69 42 67 39 68 45 ...
##  $ Jenis_Kelamin              : num [1:38782] 1 1 1 2 1 2 1 1 2 1 ...
##  $ Kegiatan_Waktu_Terbanyak   : num [1:38782] 1 1 1 3 1 1 1 1 1 1 ...
##  $ Status_Kedudukan_Pekerjaan : num [1:38782] 5 1 4 2 6 2 1 5 1 1 ...
##  $ Jumlah_jamkerja_Utama      : num [1:38782] 48 50 48 35 14 70 56 56 36 60 ...
##  $ Jumlah_Jamkerja_keseluruhan: num [1:38782] 48 50 97 35 18 72 56 58 36 60 ...
##  $ Menggunakan_teleponseluler : num [1:38782] 1 1 1 1 1 1 5 1 5 1 ...
##  $ Kegiatan                   : chr [1:38782] "Bekerja" "Bekerja" "Bekerja" "Mengurus Rumah Tangga" ...
##  $ Kedudukan                  : chr [1:38782] "Pekerja bebas" "Berusaha Sendiri" "Buruh/Karyawan/pegawai" "Berusaha dibantu buruh tidak tetap/buruh tidak dibayar" ...
##  - attr(*, "na.action")= 'omit' Named int [1:45907] 1 2 3 4 5 8 9 11 12 13 ...
##   ..- attr(*, "names")= chr [1:45907] "1" "2" "3" "4" ...
nrow(DataVisdat4)
## [1] 38782
ggplot(DataVisdat4)+
  geom_histogram(aes(x=Jumlah_jamkerja_Utama),fill="#1E90FF", color="#e9ecef", alpha=0.8)+
  labs(title="Histogram Sebaran Waktu pada Pekerjaan Utama")+
  xlab("Waktu")+ 
  ylab("Jumlah")+
  xlim(0,100)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

ggplot(DataVisdat4)+
  geom_density(aes(x=Jumlah_jamkerja_Utama, fill = "Waktu"), color = "#e9ecef", alpha = 0.4)+
  labs(title="Density Plot Sebaran Waktu pada Pekerjaan Utama")+
  xlab("Waktu")+
  ylab("Jumlah")+
  xlim(0,100) +
  scale_fill_manual(values = c("blue")) 

Interpretasi Histogram & Density Plot (Seluruh Pekerjaan)

Berdasarkan Histogram diastas, dapat dilihat bahwa modus dari data tersebut berada diantara selang (25-100) dengan frekuensi tertinggi nya sekitar nilai waktu 40-50 jam an. Di Histogram itu juga terlihat ada 2 pencilan di bagian sebelah kanannya. Selain itu sebaran dari nilai waktu pada Pekerjaan Utama yaitu menjulur kekanan (meskipun dalam histogram ini tidak terlihat jelas) karena dapat dilihat bahwa sebaran data di sebelah kiri puncaknya lebih besar dibandingkan sebelah kanannya. Sebaran dari nilai waktu Pekerjaan Utama ini terlihat lebih jelas menjulur ke kanan saat divisualisasi kan dengan menggunakan density plot seperti grafik diatas. Dengan demikian, sebaran yang menjulur kekanan ini dapat diinterpretasikan bahwa total waktu pada pekerjaan utama lebih banyak menyebar di waktu yang lebih kecil dari 50 jam.

ggplot(DataVisdat4)+
  geom_histogram(aes(x=Jumlah_Jamkerja_keseluruhan),fill="#1E90FF", color="#e9ecef", alpha=0.8)+
  labs(title="Histogram Sebaran Waktu pada Total Pekerjaan")+
  xlab("Waktu")+ 
  ylab("Jumlah")+
  xlim(0,100)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing missing values (`geom_bar()`).

ggplot(DataVisdat4)+
  geom_density(aes(x=Jumlah_Jamkerja_keseluruhan, fill = "Waktu"), color = "#e9ecef", alpha = 0.4)+
  labs(title="Density Plot Sebaran Waktu pada Pekerjaan Utama")+
  xlab("Waktu")+
  ylab("Jumlah")+
  xlim(0,100) +
  scale_fill_manual(values = c("blue")) 

Interpretasi Histogram & Density Plot (Seluruh Pekerjaan)

Berdasarkan Histogram diastas, dapat dilihat bahwa modus dari data tersebut berada diantara selang (25-50) dengan frekuensi tertinggi nya sekitar nilai waktu 40-50 jam an. Di Histogram itu juga terlihat ada 2 pencilan di bagian sebelah kanannya. Selain itu sebaran dari nilai waktu pada total pekerjaan yaitu menjulur kekanan (meskipun dalam histogram ini tidak terlihat jelas) karena dapat dilihat bahwa sebaran data di sebelah kiri puncaknya lebih besar dibandingkan sebelah kanannya. Sebaran dari nilai waktu total pekerjaan ini terlihat lebih jelas menjulur ke kanan saat divisualisasi kan dengan menggunakan density plot seperti grafik diatas. Dengan demikian, sebaran yang menjulur kekanan ini dapat diinterpretasikan bahwa total waktu pada seluruh pekerjaan lebih banyak menyebar di waktu yang lebih kecil dari 50 jam.