Disusun Oleh:

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.

Baca Data

data.visdat <- read.csv("C:/Users/ACER/Downloads/ds_salaries (2).csv",sep = ",")
str(data.visdat)
## '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" ...

1. Visualisasi Nilai

10 job title dengan rata rata gaji tertinggi

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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Menggunakan fungsi aggregate untuk menghitung rata-rata gaji berdasarkan job_title
avg.salary <- aggregate(salary_in_usd ~ job_title, data = data.visdat, FUN = mean)

# Membuat Rangking berdasarkan gaji
avg.salary <- avg.salary %>% mutate(Ranking = rank(salary_in_usd))  # Menggunakan nilai positif untuk mengurutkan dari bawah ke atas

# Filter 10 job title dengan gaji tertinggi
top10_job <- avg.salary %>%
  top_n(10, wt = salary_in_usd)

# Memplot menggunakan ggplot2 dengan pengurutan berdasarkan Ranking dan memberi warna
ggplot(data = top10_job,
       aes(x = salary_in_usd, y = reorder(job_title, Ranking), fill = salary_in_usd)) + 
  geom_bar(stat = "identity") +
  geom_text(aes(label = salary_in_usd), hjust = 1, color = "white", size = 3) +
  labs(title = "Job Title berdasarkan Gaji",
       subtitle = "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")

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.

Jumlah Pekerjaan Berdasarkan Remote Ratio

library(ggplot2)

# Data
data_remote <- table(data.visdat$remote_ratio)
data_remote <- data.frame(value = names(data_remote), frequency = as.numeric(data_remote))

# Membuat bar chart
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(axis.text.x = element_text(angle = 0, hjust = 1))

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.

2. Visualisasi Sebaran

Boxlot Sebaran Gaji Berdasarkan Experience Level

# Mengubah variabel Bulan menjadi faktor dengan urutan yang diinginkan
data.visdat$experience_level <- factor(data.visdat$experience_level, levels = c("EN", "MI", "SE", "EX"))

ggplot(data = data.visdat, aes(x = experience_level, y = salary_in_usd, fill = experience_level , color=experience_level)) +
  geom_boxplot(color="black") +
  theme()+
  scale_fill_manual(values = c("coral", "#EF4040","pink", "#C21292")) +
  labs(x = NULL, y = "Besar Gaji (US Dollar")

Violin plot Sebaran Gaji Berdasarkan Experience Level

data.visdat$experience_level <- factor(data.visdat$experience_level, levels = c("EN", "MI", "SE", "EX"))
ggplot(data.visdat, aes(experience_level, salary_in_usd)) + 
  geom_violin(aes(col = experience_level), fill = NA, draw_quantiles = c(0.25,0.5,0.75))  +
  labs(title = "Violin Plot Sebaran Data Gaji Berdasarkan Pengalaman Kerja",
       caption = "Sumber: Badan Pusat Statistik")

Keterangan - EN: Entry-level - MI: Mid-level - SE: Senior-level - EX: Executive-level Berdasarkan sebaran boxplot dan violin plot 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.

Density Plot Sebaran Gaji berdasarkan Tahun

ggplot(data = data.visdat) +
  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.

3. Visualisasi Proporsi

Perbandingan/Proporsi Job Title

#Membuat data baru job title berdasarkan frekuensi job title 
data.job <- table(data.visdat$job_title)
data.job <- data.frame(value = (names(data.job)), frequency = as.numeric(data.job))

# Memasukkan library treemap
library(treemap)
## Warning: package 'treemap' was built under R version 4.3.3
# Membuat treemap
treemap(data.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%.

Proporsi Salary Currency

library(d3Tree)
## Warning: package 'd3Tree' was built under R version 4.3.3
salary_data <- c(data.visdat$salary_currency)
data_frame <- data.frame(salary_currency = salary_data)
table(data.visdat$salary_currency)
## 
## AUD BRL CAD CHF CLP CNY DKK EUR GBP HUF INR JPY MXN PLN SGD TRY USD 
##   2   2  18   1   1   2   2  95  44   2  27   3   2   3   2   3 398
datavis <- data.frame(
  jenis = c("AUD","BRL","CAD","CHF","CLP","CNY","DKK","EUR","GBP","HUF","INR","JPY","MXN","PLN","SGD","TRY","USD"),
  jumlah = c(2, 2, 18, 1, 1, 2, 2, 95, 44, 2, 27, 3, 2, 3, 2,  3, 398)
)
treemap(datavis,
        index="jenis",
        vSize="jumlah",
        type="index",
        title="Proporsi salary currency",
        fontcolor.labels = "white",
        fontsize.labels = 10,
        fontsize.title=13,
        border.lwds = 0,
        border.col = "white")

Dalam analisis yang mengacu pada treemap, dapat diamati bahwa proporsi Salary Currency menunjukkan dominasi yang signifikan, terutama pada USD yang mencapai 65,56%. Selain itu, EUR juga memberikan kontribusi yang cukup besar dengan persentase sebesar 15,65%. Analisis mendalam terhadap distribusi nilai ini memberikan wawasan tentang struktur mata uang yang digunakan dalam kaitannya dengan gaji, dengan USD sebagai pemimpin utama diikuti oleh kontribusi yang substansial dari EUR.

Proporsi Company Size berdasarkan Experience Level

library(reshape2)
## Warning: package 'reshape2' was built under R version 4.3.3
library(dplyr)
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
#Subset data
exp.S <- subset(data.visdat[,c("company_size","experience_level")], company_size == "S")
exp.S <- exp.S[,"experience_level"] 

exp.M <- subset(data.visdat[,c("company_size","experience_level")], company_size == "M")
exp.M <- exp.M[,"experience_level"] 

exp.L <- subset(data.visdat[,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.

Proporsi Work Year

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'tibble' was built under R version 4.3.2
## Warning: package 'tidyr' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.2
## Warning: package 'purrr' was built under R version 4.3.2
## Warning: package 'stringr' 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     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ✔ readr     2.1.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ plyr::arrange()   masks dplyr::arrange()
## ✖ purrr::compact()  masks plyr::compact()
## ✖ plyr::count()     masks dplyr::count()
## ✖ plyr::desc()      masks dplyr::desc()
## ✖ plyr::failwith()  masks dplyr::failwith()
## ✖ dplyr::filter()   masks stats::filter()
## ✖ plyr::id()        masks dplyr::id()
## ✖ dplyr::lag()      masks stats::lag()
## ✖ plyr::mutate()    masks dplyr::mutate()
## ✖ plyr::rename()    masks dplyr::rename()
## ✖ plyr::summarise() masks dplyr::summarise()
## ✖ plyr::summarize() masks dplyr::summarize()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
table(data.visdat$work_year)
## 
## 2020 2021 2022 
##   72  217  318
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.
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")

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.