library(readxl)
library(sf)
## Warning: package 'sf' was built under R version 4.3.2
## Linking to GEOS 3.11.2, GDAL 3.7.2, PROJ 9.3.0; sf_use_s2() is TRUE
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.2
## 
## 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(stringr)
## Warning: package 'stringr' was built under R version 4.3.2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.3.2

Baca Data

data <- read_xlsx("C:/Users/acer/Downloads/Data Tugas 1 AED.xlsx")
## New names:
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
data
## # A tibble: 37 × 5
##    Provinsi         Tingkat Pengangguran Terbuka Menurut Pro…¹ ...3  ...4  ...5 
##    <chr>            <chr>                                      <chr> <chr> <chr>
##  1 <NA>             2022                                       <NA>  2023… <NA> 
##  2 <NA>             Februari                                   Agus… Febr… Agus…
##  3 ACEH             5.97                                       6.17  5,75  6,03 
##  4 SUMATERA UTARA   5.47                                       6.16  5,24  5,89 
##  5 SUMATERA BARAT   6.17                                       6.28  5,9   5,94 
##  6 RIAU             4.40                                       4.37  4,25  4,23 
##  7 JAMBI            4.70                                       4.59  4,5   4,53 
##  8 SUMATERA SELATAN 4.74                                       4.63  4,53  4,11 
##  9 BENGKULU         3.39                                       3.59  3,21  3,42 
## 10 LAMPUNG          4.31                                       4.52  4,18  4,23 
## # ℹ 27 more rows
## # ℹ abbreviated name: ¹​`Tingkat Pengangguran Terbuka Menurut Provinsi (Persen)`

Cleaning dan Subsetting Data

data1  <- data[-(1:2),]
data1 <- data1[-35,]
data1 <- as.data.frame(lapply(data1, function(x) gsub("\\,", ".", x))) #substitusi koma menjadi titik
View(data1)

Perbaikan Case Teks Data Provinsi untuk ngehubungin ke data geomchart

data1$Provinsi <- lapply(data1$Provinsi, function(x) str_to_title(x))

data1[11,1] <- "DKI Jakarta"
data1[14,1] <- "DI Yogyakarta"
colnames(data1) <- c("Provinsi", "Februari 2022", "Agustus 2022", "Februari 2023", "Agustus 2023")

Casting data menjadi numerik

data1$`Februari 2022`<- as.numeric(data1$`Februari 2022`)
data1$`Februari 2023`<- as.numeric(data1$`Februari 2023`)
data1$`Agustus 2022`<- as.numeric(data1$`Agustus 2022`)
data1$`Agustus 2023`<- as.numeric(data1$`Agustus 2023`) 

#Buat Variabel Baru
{
feb22 <- as.numeric(data1$`Februari 2022`)
feb23 <- as.numeric(data1$`Februari 2023`)
agt22 <- as.numeric(data1$`Agustus 2022`)
agt23 <- as.numeric(data1$`Agustus 2023`)
}

#dataframe Baru
yr2022 <- data.frame(feb22, agt22)
yr2023 <- data.frame(feb23, agt23)

#Ubah provinsi jadi faktor
provinsi <- as.factor(unlist(data1$Provinsi))
data2 <- data.frame(provinsi, feb22, agt22, feb23, agt23)
mean22 <- mean(c(mean(feb22),mean(agt22)))
mean23 <- mean(c(mean(feb23),mean(agt23)))

#Buat kolom rataan tiap tahun
data1$`Tahun 2022` <- rowMeans(data2[, c("feb22", "agt22")])
data1$`Tahun 2023` <- rowMeans(data2[, c("feb23", "agt23")])

#biar rapih
data3 <- data.frame(provinsi, feb22, agt22, feb23, agt23, data1$`Tahun 2022`, data1$`Tahun 2023`)
colnames(data3) <- c("Provinsi", "Februari 2022", "Agustus 2022", "Februari 2023", "Agustus 2023", "Tahun 2022", "Tahun 2023")

Buat data pulau

Pulau <- c(rep("Sumatera",10), rep("Jawa",6), rep("Nusa Tenggara",3), rep("Kalimantan",5), rep("Sulawesi",6), rep("Maluku",2), rep("Papua",2)) 

Subset Pulau

#memecah pulau berdasarkan pulau yang sesuai
data.pulau <- data.frame(data1, Pulau)
{
sumatera <- subset(data.pulau, Pulau == "Sumatera")
jawa <- subset(data.pulau, Pulau == "Jawa")
kalimantan <- subset(data.pulau, Pulau == "Kalimantan")
sulawesi <- subset(data.pulau, Pulau == "Sulawesi")
papua <- subset(data.pulau, Pulau == "Papua")
}

datpulau5 <- rbind(sumatera, jawa, kalimantan, sulawesi, papua)
colnames(datpulau5) <- c("Provinsi", "Februari 2022", "Agustus 2022", "Februari 2023", "Agustus 2023", "Tahun 2022", "Tahun 2023", "Pulau")

Fungsi Statistika Deskriptif

statdesc <- function(a){
  x <- as.numeric(a)
  Max <- round(max(x), 2)
  Min <- round(min(x),2)
  Mean <- round(mean(x),2)
  Qrt.1 <- round(quantile(x,0.25),2)
  Med <- round(median(x),2)
  Qrt.3 <- round(quantile(x,0.75),2)
  Var <- round(var(x),2)
  Stdev <- round(sqrt(Var),2)
  Range <- round((Max-Min),2)
  
  frek <- table(x)
  Mod <- as.numeric(names(frek)[frek == max(frek)])

  dt <- as.data.frame(rbind(Max, Min, Mod, Mean, Qrt.1, Med, Qrt.3, Var, Stdev, Range))
  colnames(dt) <- "Statistik Deskriptif"
  return(dt)
}
(statdesc(feb22))
##       Statistik Deskriptif   NA
## Max                   8.53 8.53
## Min                   3.11 3.11
## Mod                   4.20 5.75
## Mean                  5.12 5.12
## Qrt.1                 3.98 3.98
## Med                   4.78 4.78
## Qrt.3                 5.92 5.92
## Var                   2.31 2.31
## Stdev                 1.52 1.52
## Range                 5.42 5.42

Redefine New Data Data perbulan Mengubah dataset dari wide to long (Meleburkan)

{
feb22name <- rep("Februari 2022", 34)
feb23name <- rep("Februari 2023", 34)
agt22name <- rep("Agustus 2022", 34)
agt23name <- rep("Agustus 2023", 34)
}

data1melt <- melt(data = data1, id.var = "Provinsi", variable.name = "Bulan",
                  value.name = "Nilai TPT")

Bulan <- as.factor(rbind(c(feb22name, agt22name, feb23name, agt23name)))
Angka <- as.numeric(rbind(c(feb22, agt22, feb23, agt23)))

newdat <- data.frame(Bulan,Angka)
reord <- reorder(newdat$Bulan, newdat$Angka, FUN = median) #ngurutin newdat berdasarkan median

ggplot()+
  geom_boxplot(data=newdat, aes(x = Bulan, y = Angka))+
  labs(x = NULL, y = "Persentase TPT")

Buat Boxplot

# Mengubah variabel Bulan menjadi faktor dengan urutan yang diinginkan
newdat$Bulan <- factor(newdat$Bulan, levels = c("Februari 2022", "Agustus 2022", "Februari 2023", "Agustus 2023"))

ggplot(data = newdat, aes(x = Bulan, y = Angka, fill = Bulan , color=Bulan)) +
  geom_boxplot(color="black") +
  geom_jitter(alpha = 0.5)+
  theme()+
  scale_fill_manual(values = c("#711DB0", "#C21292", "#EF4040", "#FFA732")) +
  labs(x = NULL, y = "Persentase TPT")

Data per tahun

{
  tahun22 <- rep("Tahun 2022", 34)
  tahun23 <- rep("Tahun 2023", 34)
}

Tahun <- as.factor(rbind(c(tahun22, tahun23)))
Tahun22 <- as.factor(tahun22)
Tahun23 <- as.factor(tahun23)

Nilai <- as.numeric(rbind(c(data1$`Tahun 2022`, data1$`Tahun 2023`)))
Nilai22 <- as.numeric(data1$`Tahun 2022`)
Nilai23 <- as.numeric(data1$`Tahun 2023`)


newdatyr <- data.frame(Tahun, Nilai)
newdatyr22 <- data.frame(Tahun22, Nilai22)
newdatyr23 <- data.frame(Tahun23, Nilai23)


reord2 <- reorder(newdatyr$Tahun, newdatyr$Nilai, FUN = median)

Data pulau

data.pulau <- data.frame(data1, Pulau)
{
sumatera <- subset(data.pulau, Pulau == "Sumatera")
jawa <- subset(data.pulau, Pulau == "Jawa")
kalimantan <- subset(data.pulau, Pulau == "Kalimantan")
sulawesi <- subset(data.pulau, Pulau == "Sulawesi")
papua <- subset(data.pulau, Pulau == "Papua")
}

datpulau5 <- rbind(sumatera, jawa, kalimantan, sulawesi, papua)
colnames(datpulau5) <- c("Provinsi", "Februari 2022", "Agustus 2022", "Februari 2023", "Agustus 2023", "Tahun 2022", "Tahun 2023", "Pulau")
orderp <- reorder(data.pulau$Pulau,data.pulau$Tahun.2023, FUN = median)

neworder <- reorder(datpulau5$Pulau, datpulau5$`Tahun 2023`, FUN = median)

ggplot(data=datpulau5, aes(x = neworder, y = `Tahun 2023`, color = Pulau)) +
  geom_boxplot()+
  geom_jitter(alpha = 0.5) + 
  theme()+
  labs(x = NULL, y = "Tingkat Pengangguran Terbuka Indonesia Tahun 2023")+
  scale_x_discrete()

Histogram

ggplot(data = newdat, aes(x=Angka)) +
  geom_histogram(aes(fill=Bulan)) +
  scale_fill_brewer(palette="Set2") +
  facet_wrap( ~ Bulan, ncol=1) +
  xlab("TPT Indonesia") +
  ylab("Frekuensi") +
  theme_bw() +
  ggtitle("Angka TPT per Bulan\n")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Top 10 TPT tertinggi di Indo

library(dplyr)
library(ggplot2)

# Menambahkan kolom baru yang berisi rangking TPT yang diurutkan secara menurun
data3 <- data3 %>%
  mutate(Ranking = rank(`Tahun 2022`))

#filter 10 provinsi
top10_provinsi <- data3 %>%
  top_n(10, `Tahun 2022`)

# Memplot menggunakan ggplot2 dengan pengurutan berdasarkan Ranking dan memberi warna
ggplot(data = top10_provinsi,
       aes(x = `Tahun 2022`, y = reorder(Provinsi, Ranking), fill = `Tahun 2022`)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = `Tahun 2022`), hjust = 1.2, color = "white", size = 3) +
  labs(title = "Tingkat Pengangguran Terbuka",
       subtitle = "10 Povinsi dengan Tingkat Pengangguran Terbuka Tertinggi di Indonesia Tahun 2022",
       caption = "Sumber: Badan Pusat Statistik", y = "Provinsi", x = "TPT (%)") +
  scale_fill_gradient(low = "orange", high = "red")

Boxplot

reord <- reorder(newdat$Bulan, newdat$Angka, FUN = median)
orderp <- reorder(data.pulau$Pulau, data.pulau$Tahun.2023, FUN = median)

neworder <- reorder(datpulau5$Pulau, datpulau5$`Tahun 2023`, FUN = median)

ggplot(data=datpulau5, aes(x = neworder, y = `Tahun 2023`, color = Pulau)) +
  geom_boxplot()+
  geom_jitter(alpha = 0.5) + 
  theme()+
  labs(x = NULL, y = "Tingkat Pengangguran Terbuka Indonesia Tahun 2023")+
  scale_x_discrete()

Violin

library(plyr)
## Warning: package 'plyr' was built under R version 4.3.2
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
rataan<-ddply(datpulau5, "Pulau", summarise, rata2=mean(`Tahun 2022`))

ggplot(datpulau5, aes(neworder, `Tahun 2022`)) + 
  geom_violin(aes(col = Pulau), fill = "white", draw_quantiles = c(0.25,0.5,0.75))  +
  geom_boxplot(width=.1, fill= "#4B5768", outlier.colour=NA)+
  geom_jitter(position = position_jitter(width = 0.2), col="red", size=1.5)+
  geom_hline(data=rataan, aes(yintercept=rata2, color=Pulau),
             linetype="dashed", alpha = 2)+
  # kuantil 1,2, dan 3
  labs(x = NULL, y = "Tingkat Pengangguran Terbuka Indonesia Tahun 2022")+
  stat_summary(fun.y=median,geom="point",fill="blue",shape=21,size=2.5)
## Warning: The `fun.y` argument of `stat_summary()` is deprecated as of ggplot2 3.3.0.
## ℹ Please use the `fun` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

data3_melted <- melt(data3[,c(1,6:7)], id.vars = "Provinsi", variable.name = "Tahun", value.name = "TPT")
data4 <- melt(data3[,c(1:5)], id.vars = "Provinsi", variable.name = "Bulan", value.name = "TPT")

# Plotting
ggplot(data = data3_melted, aes(x = Provinsi, y = TPT, fill = Tahun)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  theme(axis.text.x = element_text(size = 8,angle = 45, hjust = 1)) +
  labs(
    title = "Tingkat Pengangguran Terbuka",
    subtitle = "Tingkat Pengangguran Terbuka di Indonesia Tahun 2023",
    caption = "Sumber: Badan Pusat Statistik",
    y = "TPT",
    x = "Provinsi"
  )

Cara Input Peta Konsentrasi

#install dulu package devtools
#lepas tu, instal_github("rasyidstat/indonesia")
library(indonesia)
prov <- id_map("indonesia", "provinsi")
colnames(prov) <- c("Provinsi", "geometry")


prov_merge <- merge(prov, data1, by = "Provinsi")
## old-style crs object detected; please recreate object with a recent sf::st_crs()
library(ggplot2)
ggplot(prov) +
  geom_sf()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()

Peta dengan Warna Viridis

library(viridis)
## Warning: package 'viridis' was built under R version 4.3.2
## Loading required package: viridisLite
## Warning: package 'viridisLite' was built under R version 4.3.2
ggplot(prov_merge) +
  geom_sf(aes(fill = `Februari 2022`)) +
  scale_fill_viridis_c(option = "F")

prov_mod <- prov_merge
{
prov_mod$`Februari 2022` <- as.numeric(as.character(prov_mod$`Februari 2022`))
prov_mod$`Februari 2023` <- as.numeric(as.character(prov_mod$`Februari 2023`))
prov_mod$`Agustus 2022` <- as.numeric(as.character(prov_mod$`Agustus 2022`))
prov_mod$`Agustus 2023` <- as.numeric(as.character(prov_mod$`Februari 2023`))
}

Sebaran Peta Kepekatan

ggplot(prov_mod) +
  geom_sf(aes(fill = `Tahun 2023`)) +
  scale_fill_gradient(high = c("orange","red"), low = "#FFEDD2")+
  labs(title = "Tahun 2023")

library(dplyr)
library(ggplot2)

# Menambahkan kolom baru yang berisi rangking TPT yang diurutkan secara menurun
data3 <- data3 %>%
  mutate(Ranking = rank(`Tahun 2022`))

# Filter 10 provinsi dengan tingkat pengangguran terbuka tertinggi
top10_provinsi <- data3 %>%
  top_n(10, `Tahun 2022`)

# Memplot menggunakan ggplot2 dengan pengurutan berdasarkan Ranking dan memberi warna
ggplot(data = top10_provinsi,
       aes(x = `Tahun 2022`, y = reorder(Provinsi, Ranking))) +
  geom_point( color = "orange", size = 4) +  # Menggunakan geom_point() untuk menampilkan titik
  geom_segment(aes(xend = 0, yend = reorder(Provinsi, Ranking)), color = "#EF4040") +  # Menggunakan geom_segment() untuk menghubungkan titik dengan sumbu x
  geom_text(aes(label = `Tahun 2023`), hjust = -0.2, color = "black", size = 3) +  # Menambahkan label
  labs(title = "Tingkat Pengangguran Terbuka",
       subtitle = "10 Provinsi dengan Tingkat Pengangguran Terbuka Tertinggi di Indonesia Tahun 2022",
       caption = "Sumber: Badan Pusat Statistik", y = "Provinsi", x = "TPT (%)") +
  theme_minimal()  # Menambahkan tema minimal agar lebih mudah dibaca

datpul_melt <- melt(datpulau5[,c(2:5, 8)],id.vars = "Pulau", variable.name = "Bulan", value.name = "TPT")
ggplot(data = datpul_melt, aes(x = Pulau, y = TPT, fill = Bulan)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  theme(axis.text.x = element_text(size = 10,angle = 0, hjust = 0.5)) +
  labs(
    title = "Tingkat Pengangguran Terbuka",
    subtitle = "Tingkat Pengangguran Terbuka di Indonesia Tahun 2022 - 2023",
    caption = "Sumber: Badan Pusat Statistik",
    y = "TPT",
    x = "Pulau"
  )

ggplot(data = data3) +
  geom_density(aes(x = `Tahun 2022`, fill = "Tahun 2022"), color = "orange", alpha = 0.4) +
  geom_density(aes(x = `Tahun 2023`, fill = "Tahun 2023"), color = "red", alpha = 0.4) +
  labs(title = "Density Plot Sebaran Data Tingkat Pengangguran Terbuka Indonesia",
       x = "TPT (%)",
       y = "Jumlah") +
  xlim(1, 10.2) +
  scale_fill_manual(name="Tahun",
  values = c("Tahun 2022" = "orange", "Tahun 2023" = "red"))

data3_melted <- melt(data3[,c(1,6:7)], id.vars = "Provinsi", variable.name = "Tahun", value.name = "TPT")
data4 <- melt(data3[,c(1:5)], id.vars = "Provinsi", variable.name = "Bulan", value.name = "TPT")

# Plotting
ggplot(data = data3_melted, aes(x = Provinsi, y = TPT, fill = Tahun)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  theme(axis.text.x = element_text(size = 8,angle = 0, hjust = 0),
        axis.text.y = element_text(size = 7)) +
  labs(
    title = "Tingkat Pengangguran Terbuka",
    subtitle = "Tingkat Pengangguran Terbuka di Indonesia Tahun 2023",
    caption = "Sumber: Badan Pusat Statistik",
    y = "TPT",
    x = "Provinsi"
  )+
  coord_flip()