Deden Ahmad Rabani (G1401221016) || Muhammad Abdan Rofi (G1401221059) || Shalma Kaisya Candradewi (G1401221105)
Industri data telah menjadi salah satu bidang yang paling berkembang dan menjanjikan dalam beberapa tahun terakhir. Untuk mendapatkan wawasan yang lebih dalam tentang dinamika pekerjaan yang berkaitan dengan data, kami memilih untuk menggunakan dataset yang tersedia dari Kaggle. Dataset yang kami gunakan dapat diakses melalui tautan berikut: https://www.kaggle.com/datasets/zain280/data-science-salaries/data . Dataset ini tidak hanya memberikan informasi tentang gaji, tetapi juga memberikan keragaman aspek lainnya, seperti ukuran perusahaan, tingkat pengalaman, dan faktor-faktor lain yang memengaruhi kompensasi di bidang ilmu data. Dengan menganalisis dataset ini, kami berharap dapat memberikan wawasan yang lebih komprehensif tentang tren dan pola dalam industri data.
library (plyr)
## Warning: package 'plyr' was built under R version 4.3.3
library (dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:plyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## 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.3
library (ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library (reshape2)
## Warning: package 'reshape2' was built under R version 4.3.3
library(treemap)
## Warning: package 'treemap' was built under R version 4.3.3
data <- read.csv("C:\\Users\\ade\\Downloads\\ds_salaries.csv", sep= ",")
str (data)
## 'data.frame': 607 obs. of 12 variables:
## $ id : int 0 1 2 3 4 5 6 7 8 9 ...
## $ work_year : int 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
## $ experience_level : chr "MI" "SE" "SE" "MI" ...
## $ employment_type : chr "FT" "FT" "FT" "FT" ...
## $ job_title : chr "Data Scientist" "Machine Learning Scientist" "Big Data Engineer" "Product Data Analyst" ...
## $ salary : int 70000 260000 85000 20000 150000 72000 190000 11000000 135000 125000 ...
## $ salary_currency : chr "EUR" "USD" "GBP" "USD" ...
## $ salary_in_usd : int 79833 260000 109024 20000 150000 72000 190000 35735 135000 125000 ...
## $ employee_residence: chr "DE" "JP" "GB" "HN" ...
## $ remote_ratio : int 0 0 50 0 50 100 100 50 100 50 ...
## $ company_location : chr "DE" "JP" "GB" "HN" ...
## $ company_size : chr "L" "S" "M" "S" ...
View (data)
# Menggunakan fungsi aggregate untuk menghitung rata-rata gaji berdasarkan job_title
rataan_gaji <- aggregate(salary_in_usd ~ job_title, data=data, FUN=mean)
# Mengurutkan gaji yang terbesar
rataan_gaji <- rataan_gaji %>%
arrange(desc(salary_in_usd))
# Membuat top 10 gaji yang terbesar
top_10_gaji <- rataan_gaji %>%
slice_head(n = 10)
# Memplot menggunakan ggplot2 dengan pengurutan berdasarkan top 10 dan memberi warna
ggplot(data= top_10_gaji,
aes(x= salary_in_usd, y= reorder(job_title, salary_in_usd), fill= salary_in_usd)) +
geom_bar(stat= "identity") +
geom_text(aes(label= salary_in_usd), hjust= 1.1, color= "white", size= 3) +
labs(title= "Top 10 Job Title dengan Gaji Tertinggi",
caption= "Sumber: Badan Pusat Statistik", y= "Job title", x= "Gaji (US Dollar)") +
scale_fill_gradient(low= "pink", high= "magenta") +
theme(plot.title = element_text(hjust = 0.5))
Dari grafik tersebut, dapat dikatakan bahwa posisi pekerjaan dengan gaji tertinggi adalah sebagai Data Analytics Leader dengan rata-rata gaji sebesar 405.000 US Dollar. Diikuti oleh Principal Data Enginer dan Financial Data Analyst dengan rata-rata gaji masing-masing sebesar 328.333,3 dan 275.000 dolar US Dollar secara berurutan.
# Memanggil data remote_ratio
data_remote <- table(data$remote_ratio)
# Membuat dataframe baru
data_remote <- data.frame(value= names(data_remote), frequency= as.numeric(data_remote))
# Memplot untuk membuat barchart
ggplot(data_remote, aes(x = value, y = frequency, label = frequency)) +
geom_bar(stat = "identity", fill = "salmon", color = "black") +
geom_text(size = 3, position = position_stack(vjust = 0.5)) +
labs(x = "Remote Ratio", y = "Frequency", title = "Bar Chart of Remote Ratio") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
Remote ratio adalah perbandingan waktu kerja dari jarak jauh dengan waktu kerja di kantor fisik. Semakin tinggi remote ratio, semakin banyak waktu yang dihabiskan untuk bekerja dari jarak jauh. Barchart diatas menunjukkan bahwa paling banyak pekerjaan di bidang data yaitu sebesar 381 pekerjaan, memiliki remote ratio 100, artinya kebanyakan mereka bekerja dari jarak jauh dan tidak pernah di kantor fisik. Hal ini mencerminkan tren kerja modern yang semakin mengadopsi model kerja jarak jauh.
# Membuat data hanya job dan merubah dalam tipe numeric
top10_job <- table(data$job_title)
top10_job <- data.frame(job_title = names(top10_job), frequency = as.numeric(top10_job))
# Mengurutkan job dari yang terbesar ke yang terkecil
top10_job <- top10_job %>%
arrange(desc(frequency))
# Memilih hanya top 10 pekerjaan
top10_job <- top10_job %>%
slice(1:10)
# Membuat plot
ggplot(data= top10_job,
aes(x= frequency, y= reorder(job_title, frequency), fill= frequency)) +
geom_bar(stat= "identity") +
geom_text(aes(label= frequency), hjust= 1.5, color= "white", size= 3) +
labs(title= "Top 10 Job Terbanyak",
caption= "Sumber: Badan Pusat Statistik", y= "Job title", x= "Frequency") +
scale_fill_gradient(low= "lightblue", high= "blue") +
theme(plot.title = element_text(hjust = 0.5))
Dari grafik menunjukkan bahwa pekerjaan dalam bidang data seperti data scientist, data engineer, dan data analyst mendominasi dalam dataset, dengan frekuensi tertinggi dibandingkan dengan pekerjaan lainnya. Hal ini menandakan kesempatan karir yang menjanjikan di bidang data serta permintaan yang tinggi di pasar kerja untuk profesional dengan keterampilan analisis dan pengelolaan data. Kehadiran yang dominan dari pekerjaan di bidang data juga mencerminkan peran yang semakin penting dalam transformasi digital, di mana perusahaan membutuhkan keahlian yang terampil dalam pengelolaan, analisis, dan pemanfaatan data untuk mendukung pengambilan keputusan strategis dan inovasi.
# Membuat density plot
ggplot(data = data) +
geom_density(aes(x = salary_in_usd, fill = as.factor(work_year), color = as.factor(work_year)), alpha = 0.5) +
labs(title = "Density Plot Sebaran Data Gaji Tiap Tahun",
x = "Gaji (US Dollar)",
y = "Jumlah") +
theme(plot.title = element_text(hjust = 0.5))
Dari density plot diatas, terlihat bahwa distribusi gaji cenderung berubah dari tahun ke tahun.Terdapat peningkatan gaji dari tiap tahunnya. Hal ini dibuktikan dengan puncak density plot yang bergeser ke kanan. Dengan memperhatikan pola sebaran gaji tiap tahun, kita dapat mengidentifikasi tren dan pola yang mungkin mempengaruhi keputusan penggajian serta mengantisipasi perubahan dalam struktur penghasilan individu dari waktu ke waktu.
# Membuat violin plot
data$company_size <- factor(data$company_size, levels = c("S", "M", "L"))
ggplot(data, aes(company_size, salary_in_usd)) +
geom_violin(aes(col = company_size), fill = NA, draw_quantiles = c(0.25,0.5,0.75)) +
labs(title = "Violin Plot Sebaran Data Gaji Berdasarkan Ukuran Perusahaan",
caption = "Sumber: Badan Pusat Statistik")
Dari hasil violin plot diatas, perusahaan berukuran S lebih rendah tingkatan gajinya dibandingkan perusahaan berukuran M dan L. Namun, perusahaan berukuran S cenderung lebih banyak orang yang bekerja disana, dibuktikan pada kuartil 2 tersebut terlihat bentuknya lebih gemuk. Perusahaan berukuran M lebih tinggi tingkatan gajinya dibandingkan perusahaan berukuran S namun lebih rendah dibandingkan perusahaan berukuran L. Dalam perusahaan M, terlihat dalam kuartil 2 lebih banyak dibandingkan kuartil 1 dan 3, hal ini menunjukan bahwa orang-orang di perusahaan berukuran M gaji nya lebih banyak di rata-rata. Perusahaan L lebih mendominasi dalam tingkatan gaji yang lebih tinggi, dalam kuartil 1 terlihat bahwa orang-orang lebih banyak mendapatkan gaji dalam rentang tersebut, sedangkan di kuartil 2 dan 3 cenderung lebih sedikit.
# Membuat boxplot
data$experience_level <- factor(data$experience_level, levels = c("EN", "MI", "SE", "EX"))
ggplot(data = data, aes(x = experience_level, y = salary_in_usd, fill = experience_level , color=experience_level)) +
geom_boxplot(color="black") +
theme()+
scale_fill_manual(values = c("#711DB0", "#C21292", "#EF4040", "#FFA732")) +
labs(x = NULL, y = "Besar Gaji (US Dollar")
Keterangan - EN: Entry-level - MI: Mid-level - SE: Senior-level - EX: Executive-level
Berdasarkan sebaran boxplot tersebut dapat terlihat bahwa semakin tinggi pengalaman pekerjaan yang telah dilalui, maka semakin tinggi gaji yang diterima. Hal ini dapat dibuktikan dengan median dari tiap boxplot yang semakin tinggi. Perbedaan gaji antara berbagai tingkat pengalaman tersebut menggambarkan pentingnya akumulasi pengalaman dalam meningkatkan nilai dan penghargaan pekerja.
#Membuat data baru job title berdasarkan frekuensi job title
ds_job <- table(data$job_title)
ds_job <- data.frame(value = (names(ds_job)), frequency = as.numeric(ds_job))
treemap(ds_job,
index = "value", # Kolom untuk kategori
vSize = "frequency", # Kolom untuk ukuran
title = "Proporsi Job title") # Judul treemap
Berdasarkan treemap tersebut, dapat dilihat bahwa pekerjaan di industri data paling dominan ada 3 yaitu Data Scientist, Data Engineer dan Data Analyst dengan proporsi berturut turut sebesar 23,56%, 21,75%, dan 15,98%.
#Subset data
exp.S <- subset(data[,c("company_size","experience_level")], company_size == "S")
exp.S <- exp.S[,"experience_level"]
exp.M <- subset(data[,c("company_size","experience_level")], company_size == "M")
exp.M <- exp.M[,"experience_level"]
exp.L <- subset(data[,c("company_size","experience_level")], company_size == "L")
exp.L <- exp.L[,"experience_level"]
category.exp.S <- table(exp.S)
category.exp.M <- table(exp.M)
category.exp.L <- table(exp.L)
dat.exp.S <- data.frame(value = (names(category.exp.S)), frequency = as.numeric(category.exp.S))
dat.exp.M <- data.frame(value = (names(category.exp.M)), frequency = as.numeric(category.exp.M))
dat.exp.L <- data.frame(value = (names(category.exp.L)), frequency = as.numeric(category.exp.L))
data.exp <- data.frame(dat.exp.S, dat.exp.M[,"frequency"], dat.exp.L[,"frequency"])
colnames(data.exp) <- c("experience_level", "S", "M", "L")
# Melt the data
data.exp.melt <- melt(data.exp, id.vars = "experience_level")
# Calculate proportions
data.exp.melt <- ddply(data.exp.melt, "experience_level", transform, prop = value / sum(value))
# Plot
ggplot(data.exp.melt, aes(x = experience_level, y = prop, fill = variable)) +
geom_bar(stat = "identity") +
geom_text(aes(label = scales::percent(prop), group = variable),
position = position_stack(vjust = 0.5),
color = "white", size = 3) + # Menambahkan label proporsi
scale_y_continuous(labels = scales::percent_format()) +
labs(x = "experience_level", y = "Proportion", fill = "Group") +
ggtitle("Stacked Bar Chart of Proportions") +
theme_minimal()+
theme(plot.margin = margin(0, -5, 0, 0, "pt"))+
coord_flip()
Dari stacked bar chart diatas, menunjukan proporsi antara pengalaman kerja dengan besarnya perusahaan yang ia tempati. Terlihat bahwa mayoritas orang bekerja di perusahaan yang menengah baik itu Entry-level, Mid-level, Senior-level, maupun Executive-level. Fakta lain menunjukan bahwa banyak juga orang dengan pengalaman Entri Level yaitu sebesar 40,85% bekerja di perusahaan yang besar.
# Membuat tabel data workyear
table(data$work_year)
##
## 2020 2021 2022
## 72 217 318
# Membuat dataframe
data.vis <- data_frame(
work_year = c("2020", "2021", "2022"),
nilai = c(72, 217 ,318 )
)
## Warning: `data_frame()` was deprecated in tibble 1.1.0.
## ℹ Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Membuat donut plot
ggplot(data.vis, aes(x = 2, y = nilai, fill = work_year)) +
geom_bar(stat = "identity", color = "white", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = paste0(work_year, ": ", nilai),
y = nilai),
position = position_stack(vjust = 0.5),
color = "black") +
scale_fill_manual(values = c("2020" = "pink",
"2021" = "purple",
"2022" = "lightblue")) + # Sesuaikan warna fill
theme_void() +
xlim(0.5, 2.5) +
labs(title = "Proporsi Work Year") +
theme(legend.position = "right") +
theme(plot.title = element_text(hjust = 0.5))
Dengan merujuk pada representasi visual data dalam bentuk grafik lingkaran donat yang tertera di atas, dapat disimpulkan bahwa pada tahun 2022 tercatat jumlah pekerja yang mencapai puncaknya yakni sebanyak 318 orang. Menariknya, dalam setiap peninjauan tahunan, terlihat pola konsisten dari tahun ke tahun yang menunjukkan peningkatan berkesinambungan dalam jumlah orang yang terlibat dalam dunia kerja.