library(tidyverse) #all u can use package
library(highcharter) #data visualization package
library(splitstackshape) #4 split DF## Warning: package 'splitstackshape' was built under R version 4.0.4
library(cluster) #clustering package## Warning: package 'cluster' was built under R version 4.0.4
library(fmsb) #radar chart## Warning: package 'fmsb' was built under R version 4.0.3
library(janitor) #count categories package## Warning: package 'janitor' was built under R version 4.0.5
Sumber gambar: https://www.ingeniumweb.com/blog/post/8-ways-to-improve-work-life-balance-when-working-from-home/4975/
COVID-19 telah merubah segala aspek didalam kehidupan umat manusia, khususnya termasuk merubah kebiasaan dan interaksi antar manusia dalam kehidupan sehari-hari. Bahkan COVID-19 merubah segala lini perekonomian masyarakat, baik perusahaan-perusahaan besar maupun pedagang kaki lima. Setelah pandemi COVID-19, beberapa kebijakan perusahaan juga berubah, banyak yang menerapkan Work From Home (WFH), tetapi masih ada beberapa yang menerapkan Work From Office (WFO) walaupun dibatasi jumlah karyawan yang hadir dan WFO. Tetapi setelah pandemi dan banyak perusahaan menerapkan sistem WFH, banyak karyawan atau pekerja lainnya merasa bahwa jam kerja mereka menjadi lebih panjang. Sehingga banyak karyawan atau pekerja lainnya merasa work life balance mereka tidak seimbang saat pandemi. Bahkan kejadian seperti ini tidak hanya terjadi di Indonesia, tapi di seluruh belahan dunia juga terdampak. Tetapi di negara lain khususnya di wilayah Eropa, permasalah ini sudah diatur dan dibatasi oleh undang-undang Right to Disconnect pada negara-negara lain seperti Perancis, Belgia, Italia, dan Spanyol.
Lalu, bagaimana para pekerja atau karyawan di Indonesia? Dataset ini bertujuan untuk melihat bagaimana work-life-balance karyawan atau pekerja di Indonesia selama pandemi COVID-19 dan melihat bagaimana perusahaan dapat improve kinerja karyawan dengan kebijakan yang dapat membantu atau menjaga work-life balance karyawan menjadi seimbang. Selain itu, adakah intisari atau kesimpulan yang bisa kita dapatkan sebagai bahan evaluasi bagi Perusahaan maupun karyawan dari jam kerja selama masa pandemi?
Dengan menggunakan metode clustering, kebijakan perusahaan dan divisi HR dapat mengetahui usulan kebijakan baru yang dapat meng-improve kinerja karyawan. Selain diimplementasikan pada divisi HR, beberapa contoh Clustering yang dapat diterapkan adalah meningkatkan pelayanan, fasilitas, dan transportasi umum terhadap customer berbasis customer review pada perusahaan transportasi atau pun perusahaan lainnya. Selain itu, dengan Clustering perusahaan dapat mengelompokkan berbagai macam customer sehingga dapat merekomendasikan produk layanan terhadap beberapa customer dengan tepat.
Dataset ini diharapkan dapat menjadi masukan atau bahan evaluasi bagi divisi HR atau perusahaan untuk menentukan apakah lebih baik diadakan kebijakan atau peraturan internal baru untuk masa pandemi agar kinerja karyawan dapat meningkat. Kuisioner ini ditujukan kepada karyawan yang bekerja secara WFH maupun WFO dan respondent tidak dibatasi umur atau bidang pekerjaannya. Selain itu, dari kuisioner ini diharapkan dapat memproyeksi bagaimana work-life balance karyawan di pandemi.
Sebelum ke tahap menentukan apa yang dapat divisi HR lakukan dengan clustering dari hasil survey, beberapa insight didapatkan. Pertama, mari kita lihat 10 data pertama yg telah didapat.
#read dataset
wlb <- read.csv("data/Working Hours During Pandemic.csv")
#show 5 upper data from dataset
head(wlb)#remove `Timestamp` column
wlb <- wlb[-1]
head(wlb)Setelah melihat sebagian dari dataset tersebut, mari kita olah terlebih dahulu agar data mudah di proses.
Agar mempermudah proses EDA, lebih baik dilakukan penamaan ulang bagi nama per kolom.
# check each column names
names(wlb)## [1] "Gender"
## [2] "Usia..Contoh..17."
## [3] "Pekerjaan"
## [4] "Bidang.pekerjaan.yang.anda.geluti"
## [5] "Domisili..Tempat.tinggal."
## [6] "Anda.termasuk.karyawan"
## [7] "Masa.keterikatan.kontrak.anda.dengan.perusahaan.tempat.anda.bekerja.adalah"
## [8] "Sistem.kerja.perusahaan.anda.saat.ini."
## [9] "Bagaimanakah.sistem.absen.di.tempat.anda.bekerja.selama.pandemi.COVID.19."
## [10] "Bila.perusahaan.anda.mengutamakan.WFH..berapa.lamakah.anda.benar.benar.bekerja...Mohon.jawab.dengan.jujur."
## [11] "Bila.anda.bekerja.lebih.dari.8.jam.sehari.ketika.WFH..apakah.anda.mengirim.atau.mengisi.formulir.lembur."
## [12] "Bila.anda.lembur...bekerja.lebih.dari.8.jam.sehari..apakah.anda.masih.mendapat.hak...co..uang.lembur."
## [13] "Selama.masa.pandemi.dan.anda.WFH..apakah.anda.merasa.waktu.untuk.istirahat.menjadi.lebih.berkurang."
## [14] "Selama.masa.pandemi.dan.anda.WFO..apakah.anda.merasa.waktu.untuk.istirahat.menjadi.lebih.berkurang."
## [15] "Selama.masa.pandemi.dan.anda.WFO..apakah.anda.takut.tertular.COVID.19.di.kantor.maupun.saat.perjalanan.pergi...pulang."
## [16] "Seberapa.baikkah.perusahaan.anda.bekerja.dalam.menanggapi.pandemi.COVID.19."
## [17] "Apakah.anda.mendapat.fasilitas.tertentu.saat.anda.WFO.dari.tempat.anda.bekerja..co..multivitamin..masker.kain...kesehatan..dll.."
## [18] "Apakah.anda.mendapat.fasilitas.tertentu.saat.anda.walaupun.anda.WFH.dari.tempat.anda.bekerja..co..multivitamin..masker.kain...kesehatan..dll.."
## [19] "Seberapa.baikkah.Work.Life.Balance.anda.selama.masa.pandemi."
## [20] "Apakah.anda.setuju.bila.diadakannya.undang.undang.yang.mengatur.tentang.jam.kerja.selama.WFH..co..Right.to.Disconnect."
## [21] "Pilih.beberapa.penyataan.berikut.yang.menurut.anda.baik.untuk.diterapkan.selama.pandemi.COVID.19"
## [22] "Apakah.ada.perasaan.anda.ingin.resign.dari.pekerjaan.anda.selama.masa.pandemi."
## [23] "Alasan.anda.ingin.resign.dari.pekerjaan.anda.selama.masa.pandemi..pilih.yang.paling.mendekati."
## [24] "Apakah.anda.khawatir.bila.anda.resign..anda.tidak.mendapatkan.tempat.yang.lebih.baik.dari.tempat.anda.bekerja.sekarang."
# rename columns
wlb_clean <- wlb %>%
rename(Usia = 'Usia..Contoh..17.',
Field = 'Bidang.pekerjaan.yang.anda.geluti',
Domisili = 'Domisili..Tempat.tinggal.',
Pegawai = 'Anda.termasuk.karyawan',
Kontrak = 'Masa.keterikatan.kontrak.anda.dengan.perusahaan.tempat.anda.bekerja.adalah',
Sistem_kerja = 'Sistem.kerja.perusahaan.anda.saat.ini.',
Absensi = 'Bagaimanakah.sistem.absen.di.tempat.anda.bekerja.selama.pandemi.COVID.19.',
Jam_kerja1 = 'Bila.perusahaan.anda.mengutamakan.WFH..berapa.lamakah.anda.benar.benar.bekerja...Mohon.jawab.dengan.jujur.',
Lembur1 = 'Bila.anda.bekerja.lebih.dari.8.jam.sehari.ketika.WFH..apakah.anda.mengirim.atau.mengisi.formulir.lembur.',
Hak_lembur = 'Bila.anda.lembur...bekerja.lebih.dari.8.jam.sehari..apakah.anda.masih.mendapat.hak...co..uang.lembur.',
Istirahat_wfh = 'Selama.masa.pandemi.dan.anda.WFH..apakah.anda.merasa.waktu.untuk.istirahat.menjadi.lebih.berkurang.',
Istirahat_wfo = 'Selama.masa.pandemi.dan.anda.WFO..apakah.anda.merasa.waktu.untuk.istirahat.menjadi.lebih.berkurang.',
Tertular_covid_wfo = 'Selama.masa.pandemi.dan.anda.WFO..apakah.anda.takut.tertular.COVID.19.di.kantor.maupun.saat.perjalanan.pergi...pulang.',
Tanggap_covid = 'Seberapa.baikkah.perusahaan.anda.bekerja.dalam.menanggapi.pandemi.COVID.19.',
Fasilitas_covid_wfo = 'Apakah.anda.mendapat.fasilitas.tertentu.saat.anda.WFO.dari.tempat.anda.bekerja..co..multivitamin..masker.kain...kesehatan..dll..',
Fasilitas_covid_wfh = 'Apakah.anda.mendapat.fasilitas.tertentu.saat.anda.walaupun.anda.WFH.dari.tempat.anda.bekerja..co..multivitamin..masker.kain...kesehatan..dll..',
Work_life_balance = 'Seberapa.baikkah.Work.Life.Balance.anda.selama.masa.pandemi.',
Right_to_disconnect = 'Apakah.anda.setuju.bila.diadakannya.undang.undang.yang.mengatur.tentang.jam.kerja.selama.WFH..co..Right.to.Disconnect.',
Aturan_baru = 'Pilih.beberapa.penyataan.berikut.yang.menurut.anda.baik.untuk.diterapkan.selama.pandemi.COVID.19',
Resign = 'Apakah.ada.perasaan.anda.ingin.resign.dari.pekerjaan.anda.selama.masa.pandemi.',
Alasan = 'Alasan.anda.ingin.resign.dari.pekerjaan.anda.selama.masa.pandemi..pilih.yang.paling.mendekati.',
Khawatir = 'Apakah.anda.khawatir.bila.anda.resign..anda.tidak.mendapatkan.tempat.yang.lebih.baik.dari.tempat.anda.bekerja.sekarang.') %>%
mutate_if(is.character, as.factor)
# check 5 data
head(wlb_clean)Beberapa insight yang bisa kita dapatkan sebelum melakukan clustering adalah
wlb_clean %>%
group_by(Gender) %>%
tally() %>%
arrange(-n) %>%
hchart("column",
hcaes(Gender, n)) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
table = TRUE,
headerFormat = "<b>Respondent</b>",
pointFormat = paste('<br>{point.Gender} : {point.n}')) %>%
hc_title(text = "Total Respondent Berdasarkan Gender",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_yAxis(title = list(text = "")) %>%
hc_colors("#a29ecd") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_add_theme(hc_theme_ffx())Grafik bar diatas menunjukkan bahwa respondent paling banyak datang dari kalangan Perempuan/Female.
Sebelum menuju pembahasan lebih jauh, mari kita lihat respondent datang dari kalangan usia berapa per kategori gender.
wlb_clean %>%
mutate(Usia = as.factor(Usia)) %>%
group_by(Gender, Usia) %>%
tally() %>%
rename(total = n) %>%
ungroup() %>%
group_by(Usia) %>%
mutate(total_resp = sum(total),
percentage = (total/total_resp)*100) %>%
arrange(Usia) %>%
hchart("column",
hcaes(Usia, total,
group = Gender),
stacking = "percent") %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
headerFormat = 'Usia per Gender',
pointFormat = paste('<br>Usia : <b>{point.Usia} Tahun</b><br>Gender : <b>{point.Gender}</b><br>Persentase : <b>{point.percentage:.0f}%</b>')
) %>%
hc_title(text = "Usia Respondent Berdasarkan Gender",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_subtitle(text = "dalam Persentase",
align = "center") %>%
hc_yAxis(title = list(text = ""),
plotLines = list(
list(value = 50,
color = "red",
width = 3,
zIndex = 4,
dashStyle = "shortdash")
)
) %>%
hc_colors(c("#0e469a",
"#6db6d9")) %>%
hc_legend(enabled = TRUE) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_add_theme(hc_theme_ffx())Dari grafik bar chart diatas didapat bahwa rentang usia renspondent beragam, dari awal 20 tahun sampai awal 50 tahun.
wlb_clean %>%
dplyr::group_by(Pekerjaan) %>%
dplyr::count(Pekerjaan) %>%
dplyr::rename(total = n) %>%
dplyr::arrange(-total) %>%
hchart("column",
hcaes(Pekerjaan, total)) %>%
hc_title(text = "Pekerjaan Respondent",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_yAxis(title = list(text = "Total Respondent")) %>%
hc_xAxis(title = list(text = "Pekerjaan Respondent")) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_tooltip(crossHairs = TRUE,
borderwidth = 3.5,
pointFormat = paste("<br>Total Respondent : <b>{point.total}")) %>%
hc_colorAxis(minColor = "#fc987d",
maxColor = "#c16548") %>%
hc_add_theme(hc_theme_ffx())Grafik diatas menunjukkan bahwa banyak dari respondent adalah Pegawai Swasta.
Visualisasi berikut adalah penggambaran berapakah jumlah respondent berdasarkan gender dan profesi.
wlb_clean %>%
group_by(Gender, Field) %>%
tally() %>%
rename(total = n) %>%
ungroup() %>%
group_by(Field) %>%
mutate(total_resp = sum(total),
percentage = (total/total_resp)*100) %>%
arrange(-total) %>%
hchart("column",
hcaes(Field, total,
group = Gender),
stacking = "percent") %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
headerFormat = 'Profesi per Gender',
pointFormat = '<br>Profesi : <b>{point.Field}</b><br>Gender : <b>{point.Gender}</b><br>Persentase : <b>{point.percentage:.0f}%</b>') %>%
hc_title(text = "Total Respondent Berdasarkan Gender dan Profesi",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_subtitle(text = "dalam Persentase",
align = "center") %>%
hc_yAxis(title = list(text = ""),
plotLines = list(
list(value = 50,
color = "red",
width = 3,
zIndex = 4,
dashStyle = "shortdash")
)
) %>%
hc_xAxis(title = list(text = "Profesi")) %>%
hc_colors(c("#0e469a",
"#6db6d9")) %>%
hc_legend(enabled = TRUE) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_add_theme(hc_theme_ffx())Dari bar chart diatas didapat bahwa rentang profesi respondent beragam, dari Pendidikan sampai dengan Perencanaan.
wlb_clean %>%
dplyr::group_by(Domisili) %>%
dplyr::mutate(Domisili = if_else(Domisili == "Depok", "Jawa Barat",
if_else(Domisili == "Kota bekasi", "Jawa Barat",
if_else(Domisili == "Tangerang Selatan",
"Banten", if_else(Domisili == "Banten",
"Banten", if_else(Domisili == "DKI Jakarta",
"DKI Jakarta", if_else(Domisili == "Jawa Barat", "Jawa Barat",
if_else(Domisili == "Jawa Tengah", "Jawa Tengah",
"Lainnya")
)
)
)
)
)
)
) %>%
dplyr::count(Domisili) %>%
dplyr::rename(total = n) %>%
dplyr::arrange(-total) %>%
#viz
hchart("column",
hcaes(Domisili, total)) %>%
hc_title(text = "Domisili Respondent",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_yAxis(title = list(text = "Total Respondent")) %>%
hc_xAxis(title = list(text = "Domisili Respondent")) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
pointFormat = paste("<br>Total Respondent : <b>{point.total}</b>")) %>%
hc_colorAxis(minColor = "#e86662",
maxColor = "#0e469a") %>%
hc_add_theme(hc_theme_ffx())Grafik diatas menunjukkan bahwa lebih dari setengah respondent berdomisili dari DKI Jakarta.
Setelah berkenalan secara singkat dengan para Respondent, mari kita analisa para respondent lebih jauh dengan menggunakan Clustering agar didapatkan kelompok atau cluster tertentu yang dapat menjadi bahan evaluasi dari jam kerja selama masa pandemi. Sebelumnya, kita dapat melakukan EDA terlebih dahulu agar mempersingkat coding;
#select and EDA
#1st attempt : column `Jam_kerja1` as binary; <8jam = 1, 8 jam = 2, >8 jam = 3
#2nd attempt : column `Resign` as binary; Tidak = 1, Ya = 2, Mungkin = 3
#3rd attempt : column `Pegawai` divided by 3 categories; `Pegawai Kontrak`, `Pegawai Tetap`, `Lainnya`
wlb2 <- wlb_clean %>%
mutate(Jam_kerja1 = if_else(Jam_kerja1=="Kurang dari 8 jam sehari", 1,
if_else(Jam_kerja1=="Rata-rata 8 jam sehari" & Jam_kerja1=="Saya masih WFO", 2,3)),
Resign = if_else(Resign =="Tidak", 1,
if_else(Resign == "Ya", 2,3)),
Pegawai = if_else(Pegawai=="Pegawai Kontrak", "Pegawai Kontrak",
if_else(Pegawai=="Pegawai Tetap", "Pegawai Tetap",
"Lainnya"))
) %>%
select(c(Pegawai,
Sistem_kerja,
Jam_kerja1,
Lembur1,
Tanggap_covid,
Work_life_balance,
Resign)
) %>%
mutate(Pegawai = as.factor(Pegawai),
Jam_kerja1 = as.factor(Jam_kerja1),
Tanggap_covid = as.factor(Tanggap_covid),
Work_life_balance = as.factor(Work_life_balance),
Resign = as.factor(Resign)
)
head(wlb2)Bila kita perhatikan tipe data dari hasil survey, semua tipe data yang terdapat dalam data set adalah bertipe factor/categorical. Biasanya, untuk melakukan clustering dibutuhkan tipe data selain dari kategorikal/ faktor untuk kolom selain dari target (bertipe data interger/numerical). Bagaimana bila semua kolom data bertipe kategorikal? Bagaimana kita Cluster-kan data set yang semua kolomnya bertipe data categorical/factor?
Data set dengan tipe kategorikal biasanya lebih sulit untuk diterapkan atau dilakukan analisa dengan Kmeans biasa dan bahkan untuk menghitung jarak dari setiap data tidak bisa dilakukan karena data yang bertipe kategorikal tidak mempunyai jarak tertentu (anomali/abstrak). Biasanya, untuk menentukan cluster dari data yang mempunyai tipe kategorikal jarang dilakukan dan bila akan dilakukan harus ada tujuan tertentu yang sekiranya dapat dilakukan clustering. Lalu bagaimana caranya agar clustering dapat dilakukan dari hasil survey?
Untuk menghitung jarak dari data set yang mengandung tipe data kategorikal dan numerikal, kita dapat menghitung jarak dari setiap data tersebut dengan Gower Distance dengan menggunakan package Cluster.
Kita dapat menganalisa dissimilarity antar observasi dari data set dengan menggunakan Gower Distance. Dengan menggunakan fungsi daisy dari package Cluster, kita dapat menghitung dissimilarity matrix-nya.
#ML `daisy`
gowerdist <- daisy(wlb2[,-c(7)],metric = "gower")
class(gowerdist)## [1] "dissimilarity" "dist"
summary(gowerdist)## 2415 dissimilarities, summarized :
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.5000 0.6667 0.5878 0.6667 1.0000
## Metric : mixed ; Types = N, N, N, N, N, N
## Number of objects : 70
Setelah kita hitung dissimilarity matrix dari data set, kita dapat menetapkan ukuran dari cluster dengan menggunakan Silhouette Method. Silhouette method adalah suatu perhitungan ukuran konsistensi data, dimana plot silhouette menampilak ukuran seberapa dekat setiap titik dalam satu cluster dengan titik-titik di cluster lainnya.
#calculating silhouette width
sil_width <- c(NA)
for(i in 2:10) {
pam_fit <- pam(gowerdist, diss = TRUE, k = i)
sil_width[i] <- pam_fit$silinfo$avg.width
}
#plotting ideal k for clustering
plot(1:10, sil_width,
xlab = "Number of Cluster",
ylab = "Silhouette Width",
type = "b")Aturan yang dapat kita terapkan bila kita lakukan silhouette assesment adalah memilih angka yang paling maksimal dari koefisien silhouette, karena yang diinginkan adalah cluster yang cukup jauh dianggap terpisah.
Koefisien silhouette berjarak antara -1 dan 1, dimana 1 mengindikasikan konsistensi yang baik dalam cluster, dan -1 mengindikasikan konsistensi yang kurang baik.
Pada plot sebelumnya, konsistensi yang baik didapat pada koefisien 3, sehingga kita dapat memilih angka 3 sebagai nilai K.
#choose the number of cluster with the highest silhouette width
pam_fin <- pam(gowerdist, diss = TRUE, k = 3)
#take a peek on insight of each cluster by summary
pam_result <- wlb2 %>%
mutate(Cluster = pam_fin$clustering) %>%
group_by(Cluster) %>%
do(the_summary = summary(.)) #should we do this?
pam_result$the_summary## [[1]]
## Pegawai Sistem_kerja
## Lainnya :6 Lebih mengutamakan / Full Work From Home (WFH) : 2
## Pegawai Kontrak:5 Masih WFO untuk beberapa ketentuan (co: Meeting): 2
## Pegawai Tetap :4 Partial ( 50:50, WFH:WFO) : 1
## WFO :10
##
##
## Jam_kerja1 Lembur1 Tanggap_covid Work_life_balance Resign Cluster
## 1: 1 Saya WFO:13 2:0 1:0 1:12 Min. :1
## 3:14 Tidak : 1 3:4 2:1 2: 1 1st Qu.:1
## Ya : 1 4:9 3:5 3: 2 Median :1
## 5:2 4:9 Mean :1
## 5:0 3rd Qu.:1
## Max. :1
##
## [[2]]
## Pegawai Sistem_kerja
## Lainnya : 2 Lebih mengutamakan / Full Work From Home (WFH) :10
## Pegawai Kontrak: 3 Masih WFO untuk beberapa ketentuan (co: Meeting): 2
## Pegawai Tetap :16 Partial ( 50:50, WFH:WFO) : 8
## WFO : 1
##
##
## Jam_kerja1 Lembur1 Tanggap_covid Work_life_balance Resign Cluster
## 1:12 Saya WFO: 0 2: 1 1: 1 1:15 Min. :2
## 3: 9 Tidak :20 3: 1 2: 3 2: 3 1st Qu.:2
## Ya : 1 4: 2 3: 1 3: 3 Median :2
## 5:17 4:10 Mean :2
## 5: 6 3rd Qu.:2
## Max. :2
##
## [[3]]
## Pegawai Sistem_kerja
## Lainnya : 0 Lebih mengutamakan / Full Work From Home (WFH) :17
## Pegawai Kontrak:10 Masih WFO untuk beberapa ketentuan (co: Meeting): 6
## Pegawai Tetap :24 Partial ( 50:50, WFH:WFO) :10
## WFO : 1
##
##
## Jam_kerja1 Lembur1 Tanggap_covid Work_life_balance Resign Cluster
## 1: 1 Saya WFO: 2 2: 4 1: 5 1: 9 Min. :3
## 3:33 Tidak :26 3:10 2: 5 2:14 1st Qu.:3
## Ya : 6 4:15 3:19 3:11 Median :3
## 5: 5 4: 2 Mean :3
## 5: 3 3rd Qu.:3
## Max. :3
Setelah didapat summary dari cluster dengan Gower Distance, didapatkan dari 70 Respondent ternyata terbagi menjadi 3 cluster. Dimana setiap cluster ternyata memiliki karakteristik atau pola tersendiri. Untuk perbandingan, hasil dari pam_result bagian the_summary di join kan dengan data set wlb2.
#DF after joining with the cluster
wlb3 <- wlb2 %>%
mutate(Cluster = pam_fin$clustering) %>%
group_by(Cluster) %>%
mutate(Cluster = if_else(Cluster == 1, "Pekerja Keras",
if_else(Cluster == 2, "Moderat", "Burn-out")
)
)
head(wlb3)Agar perbandingan terlihat secara signifikan, mari kita visualisasikan hasil join.
Pertama, mari kita presentasikan berapa banyak respondent dari tiap clusternya.
#viz 1 : Total Respondent of each cluster
wlb3 %>%
dplyr::group_by(Cluster) %>%
dplyr::count(Cluster) %>%
hchart("column",
hcaes(Cluster, n)
) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
table = TRUE,
pointFormat = paste('<br> Total respondent : <b>{point.n}</b>')
) %>%
hc_title(text = "Total Respondent per Cluster",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_yAxis(title = list(text = "Total Respondent")
) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_add_theme(hc_theme_ffx()) %>%
hc_colorAxis(minColor = "#fec3c3",
maxColor = "#d12851")Dari grafik diatas menunjukkan bahwa cluster dengan respondent terbanyak adalah cluster Burn-out dengan jumlah respondent sebanyak 34 respondent.
Tiap cluster mempunyai karakteristik/pola yang mana di-representasikan oleh nama tiap cluster tersendiri. Karakteristik yang akan divisualisasikan berdasarkan dari;
Sistem kerja kantor respondent selama pandemi,
Jam kerja respondent selama pandemi,
Kepuasan respondent pada tanggap atau tidaknya kantor respondent terhadap pandemi, dan
Minat resign atau tidaknya respondent selama pandemi.
Tiap karakteristik tersebut akan di visualisasikan.
#EDA-characteristic 1
polar2 <- wlb3 %>%
dplyr::group_by(Cluster) %>%
dplyr::count(Sistem_kerja) %>%
dplyr::rename(total = n) %>%
dplyr::mutate(total_res = sum(total))
#cluster 1
polar2_1 <- polar2 %>%
filter(Cluster == "Pekerja Keras") %>%
mutate(percent = round((total/total_res)*100))
#cluster 2
polar2_2 <- polar2 %>%
filter(Cluster == "Moderat") %>%
mutate(percent = round((total/total_res)*100))
#cluster 3
polar2_3 <- polar2 %>%
filter(Cluster == "Burn-out") %>%
mutate(percent = round((total/total_res)*100))
#visualization
highchart() %>%
hc_chart(polar = TRUE) %>%
hc_title(text = "Sistem Kerja Selama Pandemi",
style = list(fontWeight = "bold"),
align = "center"
) %>%
hc_subtitle(text = "Berdasarkan Cluster dalam Persentase",
align = "center") %>%
hc_xAxis(categories = polar2$Sistem_kerja,
style = list(fontWeight = "bold")
) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021"
) %>%
hc_series(
list(name = "Total Respondent Cluster Pekerja Keras (%)",
data = polar2_1$percent,
type = "line",
color = "steelblue"),
list(name = "Total Respondent Cluster Moderat (%)",
data = polar2_2$percent,
type = "line",
color = "#a00a4d"),
list(name = "Total Respondent Cluster Burn-out (%)",
data = polar2_3$percent,
type = "line",
color = "#fa8742")
) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5) %>%
hc_add_theme(hc_theme_ffx())Dari grafik diatas didapatkan bahwa;
Sistem kerja respondent berasal dari cluster Pekerja Keras selama masa pandemi lebih condong WFO,
Sistem kerja respondent berasal dari cluster Moderat selama masa pandemi seimbang antara yang diterapkannya Partial (50:50, WFO:WFH) dengan yang WFH, dan
Sistem kerja respondent berasal dari cluster Burn-out selama masa pandemi lebih condong WFH.
#viz 3: insight on working hours during pandemic
wlb3 %>%
dplyr::group_by(Cluster) %>%
dplyr::count(Jam_kerja1) %>%
dplyr::rename(total = n) %>%
dplyr::mutate(Jam_kerja1 = if_else(Jam_kerja1 == 1,
"Kurang dari 8h",
if_else(Jam_kerja1 == 2, "8h", "Lebih dari 8h")
),
total_resp = sum(total),
percentage = (total/total_resp)*100
) %>%
#visualization
hchart("column",
hcaes(Cluster, total,
group = Jam_kerja1),
stacking = "percent"
) %>%
hc_title(text = "Jam Kerja Respondent Selama Pandemi",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_subtitle(text = "Berdasarkan Cluster dalam Persentase",
align = "center") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021"
) %>%
hc_yAxis(title = list(text = ""),
plotLines = list(
list(value = 50,
color = "red",
width = 3,
zIndex = 4,
dashStyle = "shortdash")
)
) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
headerFormat = '<b>Jam Kerja Respondent</b>',
pointFormat = paste('<br><b>{point.Jam_kerja1}</b>
<br>Persentase : <b>{point.percentage:.0f}%</b>')
) %>%
hc_colors(c("#bcac9a",
"#996969")
) %>%
hc_add_theme(hc_theme_ffx())Dari grafik diatas dapat disimpulkan bahwa;
Lebih dari 90% respondent dari cluster Burn-out dan Pekerja Keras bekerja lebih dari 8 jam per harinya,
sedangkan untuk respondent dari cluster Moderat lebih dari 50% bekerja kurang dari 8 jam per hari.
#EDA - joining `Clustering` with `wlb_clean`
wlb4 <- wlb_clean %>%
mutate(Cluster = pam_fin$clustering,
Cluster = if_else(Cluster == 1, "Pekerja Keras",
if_else(Cluster == 2, "Moderat", "Burn-out")
))
#visualization
wlb4 %>%
select(c(Tanggap_covid,
Cluster)) %>%
group_by(Cluster) %>%
count(Tanggap_covid) %>%
rename(total = n) %>%
mutate(total_resp = sum(total),
percentage = (total/total_resp)*100) %>%
#viz
hchart("column",
hcaes(Tanggap_covid, total,
group = Cluster),
stacking = "percent") %>%
hc_yAxis(title = list(text = ""),
plotLines = list(
list(value = 50,
color = "red",
width = 3,
zIndex = 4,
dashStyle = "shortdash")
)
) %>%
hc_xAxis(title = list(text = "Skala Kepuasan Respondent")) %>%
hc_title(text = "Kepuasan Respondent Pada Tanggap atau Tidaknya Kantor Respondent Terhadap Pandemi",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_subtitle(text = "Berdasarkan per Cluster dalam Persentase",
align = "center") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021"
) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
headerFormat = '<b>Kepuasan Respondent Pada Tanggap/Tidaknya Kantor Respondent</b>',
pointFormat = paste('<br>Skala Kepuasan: <b>{point.Tanggap_covid}</b>
<br>Cluster : <b>{point.Cluster}</b>
<br>Persentase : <b>{point.percentage:.0f}%</b>')
) %>%
hc_colors(c("#806290",
"#8e5875",
"#af8a9e")) %>%
hc_add_theme(hc_theme_ffx())Pada grafik diatas menunjukkan bahwa dari skala 1 sampai 5 (Sangat Tidak Puas ~ Sangat Puas);
Banyak dari respondent yang berasal dari cluster Pekerja Keras puas akan tanggap atau tidaknya kantor para respondent terhadap pandemi,
Sedangkan respondent yang berasal dari cluster Moderat banyak yang sangat puas akan tanggap atau tidaknya kantor para respondent terhadap pandemi,
Tetapi respondent yang berasal dari cluster Burn-out lebih banyak yang tidak puas akan tanggap atau tidapnya kantor para respondent terhadap pandemi.
#EDA
coba1 <- wlb3 %>%
dplyr::group_by(Cluster) %>%
dplyr::count(Resign) %>%
dplyr::rename(total = n) %>%
mutate(Resign = if_else(Resign == 1, "Tidak",
if_else(Resign == 2, "Ya", "Mungkin")
),
total_res = sum(total)
)
#EDA: Cluster 1
coba1_1 <- coba1 %>%
filter(Cluster == "Pekerja Keras") %>%
mutate(percentage = round((total/total_res)*100))
#EDA: Cluster 2
coba1_2 <- coba1 %>%
filter(Cluster == "Moderat") %>%
mutate(percentage = round((total/total_res)*100))
#EDA: Cluster 3
coba1_3 <- coba1 %>%
filter(Cluster == "Burn-out") %>%
mutate(percentage = round((total/total_res)*100))
#visualization
highchart() %>%
hc_chart(polar = TRUE) %>%
hc_title(text = "Minat Resign Respondent Selama Pandemi",
style = list(fontWeight = "bold"),
align = "center"
) %>%
hc_subtitle(text = "Berdasarkan Cluster dalam Persentase",
align = "center") %>%
hc_xAxis(categories = coba1$Resign,
style = list(fontWeight = "bold")
) %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021") %>%
hc_add_theme(hc_theme_ffx()) %>%
hc_series(
list(name = "Total Respondent Cluster Pekerja Keras (%)",
data = coba1_1$percentage,
type = "line",
color = "#f19df8"),
list(name = "<br>Total Respondent Cluster Moderat (%)",
data = coba1_2$percentage,
type = "line",
color = "#58836d"),
list(name = "<br>Total Respondent Cluster Burn-out (%)",
data = coba1_3$percentage,
type = "line",
color = "#b3937f")
) %>%
hc_legend(enabled = TRUE) %>%
hc_tooltip(
crosshairs = TRUE,
borderWidth = 3.5,
headerFormat = "<b>Minat Resign</b><br>"
)Dari grafik diatas dapat disimpulkan bahwa;
80% respondent dari cluster Pekerja Keras dan 71% respondent dari cluster Moderat tidak berminat resign selama masa pandemi,
Sedangkan sebanyak 41% respondent dari cluster Burn-out berminat untuk resign selama masa pandemi dan 32% respondent dari cluster Burn-out ada pertimbangan untuk resign selama pandemi walau mungkin belum dilakukan.
Setelah di analisa, bagaimana solusi menghadapi beberapa cluster yang dapat menjadi bahan evaluasi baik untuk perusahaan maupun karyawan/respondent? Solusinya dapat diterapkan aturan atau regulasi baru selama masa pandemi.
Secara general, grafik dibawah ini menunjukkan kecenderungan respondent dalam memilih usulan aturan/regulasi baru yang dapat diterapkan selama masa pandemi secara general tanpa melihat respondent berasal dari cluster tertentu.
#EDA
regulasi <- wlb4 %>%
select(c(Aturan_baru,
Cluster)) %>%
cSplit("Aturan_baru", ";") %>%
group_by(Cluster) %>%
pivot_longer(cols = c("Aturan_baru_1",
"Aturan_baru_2",
"Aturan_baru_3",
"Aturan_baru_4"),
names_to = "regulasi"
) %>%
ungroup() %>%
rename(aturan = value) %>%
group_by(Cluster,
aturan) %>%
count(aturan) %>%
drop_na() %>%
rename(total = n)
#visualization 1
regulasi %>%
ungroup() %>%
group_by(aturan) %>%
mutate(total_reg = sum(total)) %>%
filter(Cluster == "Moderat") %>%
arrange(-total_reg) %>%
#viz
hchart("column",
hcaes(aturan, total_reg)
) %>%
hc_title(text = "Usulan Regulasi/Aturan Baru Selama Pandemi",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021"
) %>%
hc_xAxis(title = list(text = "Usulan Regulasi/Aturan Baru")) %>%
hc_yAxis(title = list(text = "Total Respondent")) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
pointFormat = paste('<br>Total Respondent : <b>{point.total_reg}</b>')
) %>%
hc_colorAxis(minColor = "#cbdcbd",
maxColor = "#072a42") %>%
hc_add_theme(hc_theme_ffx())Lalu bila kita ingin meminimalisir suatu cluster tertentu, kita dapat memisahkan usulan aturan/regulasi baru selama pandemi per clusternya. Dimana ditunjukkan oleh grafik dibawah ini.
#viz 2: proporsi aturan baru
regulasi %>%
ungroup() %>%
group_by(aturan) %>%
mutate(total_reg = sum(total),
percentage = (total/total_reg)*100) %>%
arrange(-total_reg) %>%
#visualization
hchart("column",
hcaes(aturan, total,
group = Cluster),
stacking = "percent"
) %>%
hc_title(text = "Usulan Regulasi/Aturan Baru Selama Pandemi",
style = list(fontWeight = "bold"),
align = "center") %>%
hc_subtitle(text = "Berdasarkan per Cluster dalam Persentase",
align = "center") %>%
hc_credits(enabled = TRUE,
text = "Data Source: Survey during Feb ~ Mar 2021"
) %>%
hc_yAxis(title = list(text = ""),
plotLines = list(
list(value = 50,
color = "red",
width = 3,
zIndex = 4,
dashStyle = "shortdash")
)
) %>%
hc_xAxis(title = list(text = "Usulan Regulasi/Aturan Baru")) %>%
hc_tooltip(crossHairs = TRUE,
borderWidth = 3.5,
headerFormat = '<b>Usulan Regulasi/Aturan Baru Selama Pandemi</b>',
pointFormat = paste('<br><b>{point.aturan}</b>
<br>Cluster : <b>{point.Cluster}</b>
<br>Persentase : <b>{point.percentage:.0f}%</b>')
) %>%
hc_colors(c("#cab8b0",
"#a96467",
"#b3937f")
) %>%
hc_add_theme(hc_theme_ffx())Dari grafik diatas didapat kesimpulan bahwa;
Respondent dari cluster Burn-out lebih condong untuk diterapkannya aturan/regulasi baru tidak menghubungi karyawan melalui aplikasi chatting pribadi,
Untuk respondent dari cluster Moderat lebih condong untuk diterapkannya aturan/regulasi baru Jam kerja yang fleksible (tidak harus bekerja mulai dari jam 8, asalkan bekerja 8 jam per harinya) walaupun ada yang menyukai untuk diterapkannya aturan/regulasi baru Boleh WFO tetapi dikarenakan pandemi sehingga tidak direkomendasikan,
Sedangkan respondent dari cluster Pekerja Keras lebih menyukai bila diterapkannya Undang-undang Righ-To-Disconnect.
Dengan clustering, kita dapat memetakan/mengelompokkan/memisahkan per cluster dimana menjadi bahan evaluasi baik bagi perusahaan maupun karyawan/respondent terhadap jam kerja selama masa pandemi. Selain untuk HR Division, clustering juga dapat diterapkan untuk yang lainnya. Contohnya bila Rumah Sakit ingin memetakan pola hidup dari pasien seperti apa atau kepuasan customer terhadap suatu produk.