1 Latar Belakang

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.

2 Business Question

  1. Karakteristik seorang Data Scientist yang diminati di dunia profesional

  2. Sebagai mahasiswa dan berkeinginan part-time/freelance, maka:

  • Posisi apa yang dibuka?
  • Bagaimana jika kerja secara daring?
  • Berapa besar gaji yang di terima?
  • Apa level experience yang dibutuhkan?

3 Dataset

Data Science Job Salaries Dataset terdiri atas 11 kolom, yakni:

  1. work_year: Tahun gaji dibayarkan.
  2. experience_level: Tingkat pengalaman dalam pekerjaan (SE : Senior, EN : Entry level, EX : Executive level, MI : Mid/Intermediate level)
  3. employment_type: Tipe pekerja (CT: Contractor, FC: Freelancer, FT: Full time, PT: Part time)
  4. job_title: Jenis Pekerjaan
  5. salary: Jumlah total gaji kotor yang dibayarkan
  6. salary_currency: Mata uang gaji yang dibayarkan, dengan kode mata uang ISO 4217.
  7. salaryinusd: Gaji dalam mata uang USD
  8. employee_residence: Negara tempat tinggal karyawan selama tahun kerja, dengan kode negara ISO 3166.
  9. remote_ratio: Jumlah rasio keseluruhan pekerjaan yang diselesaikan secara remote
  10. company_location: Negara kantor pusat atau cabang kontrak pemberi kerja
  11. company_size: Jumlah rata-rata orang yang bekerja untuk perusahaan (Small: 100, Middle: 500, Large: 100)

sumber: https://www.kaggle.com/datasets/arnabchaki/data-science-salaries-2023

3.1 Import Library

library(dplyr)

3.2 Membaca Dataset

gaji_ds <- read.csv("ds_salaries.csv")

head(gaji_ds)

4 Data Wrangling & EDA

4.1 Inspeksi data

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", "~

4.2 Merubah Tipe Data

# 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"){
        gaji_ds[,i] <- as.factor(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

gaji_ds$work_year <- as.factor(gaji_ds$work_year)

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, ~

4.3 Pengecekan missing value

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

4.4 Ringkasan

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:

  1. Urutan tahun data terbanyak ialah 2023 > 2022 > 2021 > 2020
  2. Level pengalaman terbanyak ialah Senior, lebih dari 60% total data
  3. Tipe pekerja yang terbanyak ialah full-time sekitar 95% dari total data
  4. Title pekerjaan terbanyak ialah Data Engineer, sekitar 30% dari total data
  5. salary_currency, employee_residence, dan company_location terbanyak ialah di Amerika sekitar 80-90% dari total data

4.5 Karakteristik Data Scientist

4.5.1 Distribusi nominal gaji dalam mata uang USD

boxplot(gaji_ds$salary_in_usd,
        col = "blue")

hist(gaji_ds$salary_in_usd, breaks = 50,
     col = "blue")

Insight:

  1. Pusat distribusi gaji berada di rentang 100000-200000 USD, dengan nilai median 135000 USD
  2. Persebaran gaji terdistribusi normal, jika outlier dihilangkan (> 300.000 USD)
  3. Terdapat beberapa outlier di atas nilai 300000 USD

4.5.2 Tipe Pekerja vs Gaji

plot(gaji_ds$employment_type, gaji_ds$salary_in_usd,
     col = "blue")

Insight:

  1. Pekerja full-time memiliki gaji paling tinggi, sedangkan part-time terendah
  2. Pekerja kontraktor memiliki gaji lebih tinggi daripada pekerja freelance

4.5.2.1 Analisis pekerja dengan tipe ‘full-time’

# Mengambil pekerja dengan tipe full-time saja
agg_FT <- gaji_ds[gaji_ds$employment_type == "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:

  1. Secara umum urutan gaji berdasarkan level pengalaman pekerja ialah Executive > Senior > Middle > Entry
  2. Terdapat pekerja dengan level pengalaman Senior dan Middle yang lebih tinggi daripada level Execcurtive
  3. Gaji tertinggi diperoleh pekerja dengan level middle, sebagai outlier
4.5.2.1.1 Analisis pekerja dengan level pengalaman Senior dan Middle yang memiliki gaji diatas ambang batas level Executive
# Mendapatkan nilai upper whisker dari boxplot gaji pekerja dengan level pengalaman Executive
agg_FT_EX <- agg_FT[agg_FT$experience_level == "EX",]

upper_whisker <- boxplot.stats(agg_FT_EX$salary_in_usd)$stats[5]
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 
FT_Mi_n_SE <- agg_FT[agg_FT$experience_level %in% c("SE", "MI") & agg_FT$salary_in_usd > upper_whisker,]

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

4.5.3 Ukuran Perusahaan vs Gaji

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”

4.5.4 Pengalaman vs Ukuran perusahaan

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”

4.5.5 Title Pekerjaan dengan gaji tertinggi

agg_jobtitle <- gaji_ds %>% 
  select(job_title, salary_in_usd) %>% 
  group_by(job_title) %>% 
  summarise(salary_in_usd = mean(salary_in_usd)) %>% 
  arrange(-salary_in_usd)

agg_jobtitle
agg_jobtitle5 <- droplevels(head(agg_jobtitle, 5))

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”

4.6 Analisis Tipe Pekerja Freelance dan Part-Time

# Agregasi data pekerja bertipe freelance atau part-time
FL_PT <- gaji_ds %>% 
  filter(employment_type %in% c("PT", "FL"))

head(FL_PT)

4.6.1 Experience Level

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:

  1. Pekerja part-time kebanyakan ialah seorang yang masih baru masuk atau tingkat pengalamannya ialah Entry Level
  2. Tidak terdapat pekerja dengan level Executive yang bekerja sebagai freelance maupun part-time
  3. Pekerja bertipe freelance kebanyakan memiliki tingkat level Middle
  4. Tidak terdapat pekerja dengan level Senior yang bekerja sebagai part-time

4.6.2 Remote Ratio

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:

  1. Kebanyakan pekerjaan seorang freelancer dan part-time dilakukan secara remote
  2. Tipe part-time jauh lebih banyak melaksanakan pekerjaannya secara remote dibandingkan freelancer

4.6.3 Title Pekerjaan

FLPT_jobtitle <- FL_PT %>% 
  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”

4.6.4 Gaji (USD)

FLPT_salary <- FL_PT %>% 
  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”

5 Kesimpulan & Rekomendasi

5.1 Kesimpulan

  1. 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.

  2. 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.

5.2 Rekomendasi

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.