Data Science manjadi salah satu bidang ilmu yang paling diminati pada era kemajuan teknologi ini. Hal itu didasari oleh implementasinya yang hampir dibutuhkan pada semua bidang. Meskipun demikian, persaingan untuk menjadi data scientist sangat tinggi. Banyak lembaga membuka kursus Data Science, tutorial yang melimpah di youtube, website, tiktok, instagram, dan sebagainya. Maka, sebagai calon Data Scientist mengenali karakterisitik yang diminati perusahaan ialah hal penting untuk sukses dalam berkarir.
Kemampuan dan pengalaman erat kaitannya seseorang diterima dalam pekerjaan, termasuk juga dengan besar gaji yang akan diterima. Analisis terhadap dataset yang menyediakan informasi karir Data Scientist akan memberikan gambaran lebih pasti. Melalui analisis tersebut, calon Data Scientist dapat menyiapkan diri untuk menghadapi dunia karir.
Karakteristik seorang Data Scientist yang diminati di dunia profesional
Sebagai mahasiswa dan berkeinginan part-time/freelance, maka:
Data Science Job Salaries Dataset terdiri atas 11 kolom, yakni:
sumber: https://www.kaggle.com/datasets/arnabchaki/data-science-salaries-2023
library(dplyr)
<- read.csv("ds_salaries.csv")
gaji_ds
head(gaji_ds)
glimpse(gaji_ds)
#> Rows: 3,755
#> Columns: 11
#> $ work_year <int> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 202~
#> $ experience_level <chr> "SE", "MI", "MI", "SE", "SE", "SE", "SE", "SE", "SE~
#> $ employment_type <chr> "FT", "CT", "CT", "FT", "FT", "FT", "FT", "FT", "FT~
#> $ job_title <chr> "Principal Data Scientist", "ML Engineer", "ML Engi~
#> $ salary <int> 80000, 30000, 25500, 175000, 120000, 222200, 136000~
#> $ salary_currency <chr> "EUR", "USD", "USD", "USD", "USD", "USD", "USD", "U~
#> $ salary_in_usd <int> 85847, 30000, 25500, 175000, 120000, 222200, 136000~
#> $ employee_residence <chr> "ES", "US", "US", "CA", "CA", "US", "US", "CA", "CA~
#> $ remote_ratio <int> 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, 0, 100, 100~
#> $ company_location <chr> "ES", "US", "US", "CA", "CA", "US", "US", "CA", "CA~
#> $ company_size <chr> "L", "S", "S", "M", "M", "L", "L", "M", "M", "M", "~
# Melakukan pengecakan jumlah nilai unik dari setiap kolom yang bertipe data "character"
# Prosedur pengecekan dengan Looping
for (i in 1:11){
if (class(gaji_ds[,i]) == "character"){
cat("kolom",c(colnames(gaji_ds))[i],"memiliki nilai unik:", as.character(length(unique(gaji_ds[,i]))), "(", as.character(round(length(unique(gaji_ds[,i]))/nrow(gaji_ds)*100, 2)), "% dari total data )","\n")
else {
}next
} }
#> kolom experience_level memiliki nilai unik: 4 ( 0.11 % dari total data )
#> kolom employment_type memiliki nilai unik: 4 ( 0.11 % dari total data )
#> kolom job_title memiliki nilai unik: 93 ( 2.48 % dari total data )
#> kolom salary_currency memiliki nilai unik: 20 ( 0.53 % dari total data )
#> kolom employee_residence memiliki nilai unik: 78 ( 2.08 % dari total data )
#> kolom company_location memiliki nilai unik: 72 ( 1.92 % dari total data )
#> kolom company_size memiliki nilai unik: 3 ( 0.08 % dari total data )
Melihat hasil bahwa nilai unik dari setiap kolom “character” memilki proporsi yang kecil dibanding jumlah semua barisnya, maka dilakukan perubahan tipe data menjadi “factor”
for (i in 1:11){
if (class(gaji_ds[,i]) == "character"){
<- as.factor(gaji_ds[,i])
gaji_ds[,i] else {
}next
} }
unique(gaji_ds$work_year)
#> [1] 2023 2022 2020 2021
Melihat kolom year hanya memiliki 4 nilai unik, maka dilakukan perubahan tipe data menjadi “factor” juga
$work_year <- as.factor(gaji_ds$work_year)
gaji_ds
glimpse(gaji_ds)
#> Rows: 3,755
#> Columns: 11
#> $ work_year <fct> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 202~
#> $ experience_level <fct> SE, MI, MI, SE, SE, SE, SE, SE, SE, SE, SE, SE, SE,~
#> $ employment_type <fct> FT, CT, CT, FT, FT, FT, FT, FT, FT, FT, FT, FT, FT,~
#> $ job_title <fct> Principal Data Scientist, ML Engineer, ML Engineer,~
#> $ salary <int> 80000, 30000, 25500, 175000, 120000, 222200, 136000~
#> $ salary_currency <fct> EUR, USD, USD, USD, USD, USD, USD, USD, USD, USD, U~
#> $ salary_in_usd <int> 85847, 30000, 25500, 175000, 120000, 222200, 136000~
#> $ employee_residence <fct> ES, US, US, CA, CA, US, US, CA, CA, US, US, US, US,~
#> $ remote_ratio <int> 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, 0, 100, 100~
#> $ company_location <fct> ES, US, US, CA, CA, US, US, CA, CA, US, US, US, US,~
#> $ company_size <fct> L, S, S, M, M, L, L, M, M, M, M, M, M, L, L, M, M, ~
colSums(is.na(gaji_ds))
#> work_year experience_level employment_type job_title
#> 0 0 0 0
#> salary salary_currency salary_in_usd employee_residence
#> 0 0 0 0
#> remote_ratio company_location company_size
#> 0 0 0
Insight: Tidak terdapat missing value
summary(gaji_ds)
#> work_year experience_level employment_type job_title
#> 2020: 76 EN: 320 CT: 10 Data Engineer :1040
#> 2021: 230 EX: 114 FL: 10 Data Scientist : 840
#> 2022:1664 MI: 805 FT:3718 Data Analyst : 612
#> 2023:1785 SE:2516 PT: 17 Machine Learning Engineer: 289
#> Analytics Engineer : 103
#> Data Architect : 101
#> (Other) : 770
#> salary salary_currency salary_in_usd employee_residence
#> Min. : 6000 USD :3224 Min. : 5132 US :3004
#> 1st Qu.: 100000 EUR : 236 1st Qu.: 95000 GB : 167
#> Median : 138000 GBP : 161 Median :135000 CA : 85
#> Mean : 190696 INR : 60 Mean :137570 ES : 80
#> 3rd Qu.: 180000 CAD : 25 3rd Qu.:175000 IN : 71
#> Max. :30400000 AUD : 9 Max. :450000 DE : 48
#> (Other): 40 (Other): 300
#> remote_ratio company_location company_size
#> Min. : 0.00 US :3040 L: 454
#> 1st Qu.: 0.00 GB : 172 M:3153
#> Median : 0.00 CA : 87 S: 148
#> Mean : 46.27 ES : 77
#> 3rd Qu.:100.00 IN : 58
#> Max. :100.00 DE : 56
#> (Other): 265
Insight:
boxplot(gaji_ds$salary_in_usd,
col = "blue")
hist(gaji_ds$salary_in_usd, breaks = 50,
col = "blue")
Insight:
plot(gaji_ds$employment_type, gaji_ds$salary_in_usd,
col = "blue")
Insight:
# Mengambil pekerja dengan tipe full-time saja
<- gaji_ds[gaji_ds$employment_type == "FT",]
agg_FT
nrow(agg_FT)
#> [1] 3718
Insight: lebih dari 95 % pekerja bertipe full-time
# Plot level pengalaman vs gaji (USD)
plot(agg_FT$experience_level, agg_FT$salary_in_usd,
col = "blue")
Insight:
# Mendapatkan nilai upper whisker dari boxplot gaji pekerja dengan level pengalaman Executive
<- agg_FT[agg_FT$experience_level == "EX",]
agg_FT_EX
<- boxplot.stats(agg_FT_EX$salary_in_usd)$stats[5]
upper_whisker upper_whisker
#> [1] 353200
# Gaji paling besar yang diperoleh oleh pekerja full-time dengan level pengalaman Executive
max(agg_FT_EX$salary_in_usd)
#> [1] 353200
# Mengambil baris pekerja full-time dengan level pengalaman Middle dan Senior yang memiliki gaji diatas upper whisker level Executive
<- agg_FT[agg_FT$experience_level %in% c("SE", "MI") & agg_FT$salary_in_usd > upper_whisker,]
FT_Mi_n_SE
head(FT_Mi_n_SE, 10)
summary(FT_Mi_n_SE)
#> work_year experience_level employment_type
#> 2020:2 EN: 0 CT: 0
#> 2021:1 EX: 0 FL: 0
#> 2022:5 MI: 3 FT:13
#> 2023:5 SE:10 PT: 0
#>
#>
#>
#> job_title salary salary_currency
#> Data Analyst :2 Min. : 350000 USD :11
#> Data Scientist :2 1st Qu.: 375000 GBP : 1
#> Research Scientist :2 Median : 380000 ILS : 1
#> AI Scientist :1 Mean : 474699 AUD : 0
#> Applied Data Scientist :1 3rd Qu.: 412000 BRL : 0
#> Applied Machine Learning Scientist:1 Max. :1500000 CAD : 0
#> (Other) :4 (Other): 0
#> salary_in_usd employee_residence remote_ratio company_location
#> Min. :370000 US :11 Min. : 0.00 US :11
#> 1st Qu.:375000 GB : 1 1st Qu.: 0.00 GB : 1
#> Median :385000 IL : 1 Median : 50.00 IL : 1
#> Mean :398145 AE : 0 Mean : 46.15 AE : 0
#> 3rd Qu.:423000 AM : 0 3rd Qu.:100.00 AL : 0
#> Max. :450000 AR : 0 Max. :100.00 AM : 0
#> (Other): 0 (Other): 0
#> company_size
#> L:6
#> M:7
#> S:0
#>
#>
#>
#>
Insight:
“Pekerja full-time dengan level pengalaman Senior berjumlah 10 orang dan Middle 3 orang yang memiliki gaji diatas ambang batas level Executive. Pekerja tersebut rata-rata bekerja secara remote dan kebanyakan ditahun 2022 serta 2023. Adapun ukuran perusahaan tempat bekerja ialah hanya large dan middle”
# Melihat title pekerjaan
table(droplevels(FT_Mi_n_SE$job_title))
#>
#> AI Scientist Applied Data Scientist
#> 1 1
#> Applied Machine Learning Scientist Data Analyst
#> 1 2
#> Data Analytics Lead Data Architect
#> 1 1
#> Data Science Tech Lead Data Scientist
#> 1 2
#> Machine Learning Software Engineer Research Scientist
#> 1 2
plot(gaji_ds$company_size, gaji_ds$salary_in_usd,
col = "blue")
aggregate(salary_in_usd~company_size, gaji_ds, "mean")
Insight:
“Urutan besar rata-rata nominal gaji berdasarkan dengan ukuran perusahaan ialah Middle > Large > Small”
Tabel Aggregat Jumlah pekerja sesuai pengalaman vs ukuran perusahaan
table(gaji_ds$experience_level, gaji_ds$company_size)
#>
#> L M S
#> EN 100 171 49
#> EX 13 95 6
#> MI 134 621 50
#> SE 207 2266 43
Level Pengalaman Entry
barplot(prop.table(table(gaji_ds$experience_level, gaji_ds$company_size)[1,]),
col = "green")
Level Pengalaman Middle
barplot(prop.table(table(gaji_ds$experience_level, gaji_ds$company_size)[3,]),
col = "green")
Level Pengalaman Senior
barplot(prop.table(table(gaji_ds$experience_level, gaji_ds$company_size)[4,]),
col = "green")
Level Pengalaman Executive
barplot(prop.table(table(gaji_ds$experience_level, gaji_ds$company_size)[2,]),
col = "green")
Insight:
“Semakin tinggi level pengalaman pekerja, maka meningkatkan potensi untuk bekerja di perusahaan yang memiliki ukuran besar”
<- gaji_ds %>%
agg_jobtitle select(job_title, salary_in_usd) %>%
group_by(job_title) %>%
summarise(salary_in_usd = mean(salary_in_usd)) %>%
arrange(-salary_in_usd)
agg_jobtitle
<- droplevels(head(agg_jobtitle, 5))
agg_jobtitle5
barplot(agg_jobtitle5$salary_in_usd,
names.arg = agg_jobtitle5$job_title,
col = rainbow(10),
cex.names = 0.55,
cex.axis = 0.8)
Insight:
“Pekerja yang memiliki rata-rata gaji (USD) dalam peringkat lima tertinggi, semuanya berkedudukan sebagai pemimpin atau kepala”
# Agregasi data pekerja bertipe freelance atau part-time
<- gaji_ds %>%
FL_PT filter(employment_type %in% c("PT", "FL"))
head(FL_PT)
barplot(table(droplevels(FL_PT$experience_level), droplevels(FL_PT$employment_type)),
beside = TRUE,
ylab = "Count",
col = c("lightblue", "mistyrose", "lightcyan"),
legend.text = T)
Insight:
barplot(table(droplevels(FL_PT$employment_type),FL_PT$remote_ratio),
beside = TRUE,
col = c("lightblue", "lightcyan"),
xlab = "Remote Ratio",
ylab = "Count",
legend.text = T)
Insight:
<- FL_PT %>%
FLPT_jobtitle select(job_title) %>%
mutate(job_title = droplevels(job_title)) %>%
group_by(job_title) %>%
summarise(count = length(job_title)) %>%
arrange(-count)
head(FLPT_jobtitle)
barplot(FLPT_jobtitle$count,
names.arg = FLPT_jobtitle$job_title,
col = heat.colors(20),
las = 3,
cex.names = 0.55,
cex.axis = 0.8)
Insight:
“Urutan lima besar Title pekerjaan paling banyak bagi freelancer & part-timer ialah Data Analyst > Data Scientist > Data Engineer > AI Scientist > Computer Vision Engineer”
<- FL_PT %>%
FLPT_salary mutate(employment_type = droplevels(employment_type)) %>%
select(employment_type, salary_in_usd) %>%
group_by(employment_type) %>%
summarise(mean_salary = mean(salary_in_usd))
FLPT_salary
barplot(FLPT_salary$mean_salary,
names.arg = FLPT_salary$employment_type,
col = rainbow(2))
insight:
“Rata-rata gaji seorang freelancer lebih besar sekitar 10.000 USD dibanding part-timer”
Tingkat pengalaman seorang Data Scientist berhubungan erat dengan besar gaji yang diterima, posisi/jabatan dalam pekerjaan, maupun tipe pekerja.Di mana semakin tinggi tingkat pengalaman, maka semakin tinggi juga gaji yang diterima, begitu juga jabatan serta tipe pekerja (Full-time). Meskipun demikian, tidak menutup kemungkinan seorang dengan level sedang atau senior memiliki gaji yang jauh lebih tinggi daripada level eksekutif, sebagaimana yang teramati pada dataset Data Scientist Salaries. Terdapat 10 level senior dan 3 level sedang yang memiliki gaji di atas gaji tertinggi dari level eksekutif.
Agar dapat menjadi seorang freelancer maupun part-timer, tidak diperlukan level yang terlalu tinggi. Banyak Data Scientist dengan tingkat junior (Entry Level) maupun sedang yang memilih sebagai freelancer maupun part-timer. Secara umum tanggung jawab pekerjaan juga dilaksanakan secara remote. Lima besar title pekerjaan yang paling diminati ialah Data Analyst > Data Scientist > Data Engineer > AI Scientist > Computer Vision Engineer. Adapun rata-rata gaji seorang freelancer lebih besar sekitar 10.000 USD dibanding part-timer. Rata-rata gaji part-time ialah sekitar 40.000 USD.
Meningkatkan pengalaman adalah salah satu kunci utama meningkatkan peluang diterima kerja full-time dengan gaji yang tinggi. Sebagai junior Data Scientist dan seorang mahasiswa, sebaiknya bekerja secara part-time maupun freelance untuk mendongkrak pengalaman guna meningkatkan level. Alangkah baiknya juga pekerjaan yang dipilih dapat dilaksanakan secara remote, mengingat pekerjaan bertipe part-time maupun freelance dominan remote, sehingga tidak menganggu aktivitas sebagai mahasiswa dan dapat meningkatkan kapabilitas diri sebagai Data Scientist.