Ελληνική κοινότητα επιστήμης δεδομένων

Μία περιγραφική ανάλυση σχετικά με τους Έλληνες χρήστες του Kaggle, που αποτελεί τη πλατφόρμα με αναλυτές και επιστήμονες δεδομένων. Με βάση τα στοιχεία της έρευνας των χρηστών της πλατφόρμας του 2021, πώς συγκρίνονται οι Έλληνες χρήστες με τον υπόλοιπο κόσμο;

R
Περιγραφική Ανάλυση
Συγγραφέας

stesiam

Δημοσιευμένο

6 Μαΐου 2023

Εισαγωγή

To Kaggle είναι από τις πιο γνωστές πλατφόρμες αναλυτών / επιστημόνων δεδομένων μιας και έχει πάνω από 10 εκατομμύρια χρήστες (Heads or Tails, 2020). Εκτός από αυτό, το Kaggle προσφέρει πάρα πολλές λειτουργίες, όπως: - Δημιουργία notebooks, άρθρα που περιέχουν εκτελέσιμο κώδικα και περιέχουν και τα αποτελέσματα αυτού (γραφήματα, στατιστικά αποτελέσματα κτλ.) - Επικοινωνία χρηστών μέσω του φόρουμ συζήτησης και επίλυσης αποριών - Προσφορά αρκετού υλικού επιμόρφωσης των χρηστών και διάφορων μαθημάτων, όπου τα περισσότερα βασίζονται στη Python και σε βιβλιοθήκες της για οπτικοποίηση δεδομένων και θέματα ανάλυσης δεδομένων, μηχανικής και βαθιάς μάθησης - Πολλούς διαγωνισμούς στους οποίους μπορεί να συμμετέχει ο χρήστης

Αξίζει να σημειωθεί ότι υπάρχουν και άλλες παρόμοιες πλατφόρμες με το Kaggle, ωστόσο καμία τους δεν έχει ούτε τη αντίστοιχη βάση χρηστών, ούτε προσφέρει αντίστοιχες λειτουργίες. Μία εναλλακτική του Kaggle μπορεί να θεωρηθεί το DrivenData, όσον αφορά το κομμάτι των διαγωνισμών μηχανικής/βαθιάς μάθησης. Προφανώς, δεν μπορείς να δημιουργήσεις δικό σου notebooks στη πλατφόρμα συμμετέχουν αρκετά λιγότεροι χρήστες.

Λογότυπο της πλατφόρμας Kaggle

Η έρευνα μηχανικής μάθησης και επιστήμης δεδομένων (Kaggle Machine Learning & Data Science Survey) είναι μία έρευνα η οποία υλοποιείται σε ετήσια βάση από την ίδια τη πλατφόρμα. Οι χρήστες της απαντάνε σε διάφορα δημογραφικά στοιχεία και The platform asks its users to analyze users’ data in the context of a competition. In this notebook, I conduct an analysis based on 2021’s survey in order to compare Greek data analysts with the rest of the world.

Προετοιμασία

Εισαγωγή βιβλιοθηκών

Σε αυτό το άρθρο θα χρειαστώ να εισάγω και να τροποποιήσω τα δεδομένα μου, συνεπώς η σουίτα πακέτων του tidyverse κρίνεται απαραίτητη μιας και θα αξιοποιήσω λειτουργίες από πακέτα όπως το readr, το dplyr & το tidyr. Ο όγκος των δεδομένων είναι τεράστιος που μας δίνει αρκετές επιλογές ανάλυσης και μας δίνεται η ευκαιρία να οπτικοποιήσουμε αρκετά δεδομένα, μέσω του πακέτου highcharter. Τέλος, σε μεταβλητές οι οποίες έχουν αρκετές τιμές (π.χ. χώρες) ενδεχομένως να χρειαστεί να αναλύσω τα δεδομένα μου και σε πίνακε και για αυτό το λόγο ενδείκνειται η χρήση πινάκων μέσω των πακέτων reactable ή reactablefmtr.

# Βιβλιοθήκες της R για γενική χρήση
library(readr)
library(dplyr)
library(tidyr)
library(glue)
library(forcats)

# Δημιουργία πινάκων
library(kableExtra)
library(reactablefmtr)

# Δημιουργία διαγραμμάτων
library(highcharter)
library(showtext)
library(sysfonts)

Εισαγωγή δεδομένων

Το Kaggle μας προσφέρει το σύνολο των δεδομένων σε ένα αρχείο csv, συνεπώς θα χρειαστώ την εντολή read_csv από το πακέτο readr. Θα φορτώσω το αντίστοιχο σύνολο δεδομένων ονομάζοντάς το kaggle_2021. Σε αυτό το σύνολο περιλαμβάνεται στη πρώτη σειρά και η ερώτηση που έθεσε στους χρήστες η οποία καλό θα ήταν να μην τη συμπεριλάβω για να διευκολύνω την ανάλυσή μου.

kaggle_2021 = read_csv("data/kaggle_survey_2021.csv")

# Delete second line
kaggle_2021 = kaggle_2021[-c(1),]

Προετοιμασία δεδομένων

Σε αυτό το σημείο χρειάζεται να κάνω ορισμένα βήματα πριν ξεκινήσω. Με δεδομένο ότι η ανάλυσή μου έχει ως κύριο σκοπό να συγκρίνει τα χαρακτηριστικά των Ελλήνων χρηστών με των υπολοίπων χρηστών θα πρέπει να διακρίνω τα δεδομένα με αυτό το κριτήριο. Υπάρχουν δύο τρόποι με τους οποίους μπορείς να γίνει αυτό:

  • Δημιουργία νέας μεταβλητής και ομαδοποίηση δεδομένων
  • Φιλτράρισμα και διαχωρισμός συνόλου δεδομένων σε δύο υποσύνολα (Ελλήνων και ξένων χρηστών)

Με οποιονδήποτε από τους δύο τρόπους θα είμαστε σε θέση να συγκρίνουμε βασικά χαρακτηριστικά των χρηστών.

# Recoding Q2 variable

kaggle_2021$Q2 <- kaggle_2021$Q2 |>
  fct_recode(
    "Άνδρας" = "Man",
    "Μη δυαδικό" = "Nonbinary",
    "Άλλο" = "Prefer not to say",
    "Άλλο" = "Prefer to self-describe",
    "Γυναίκα" = "Woman"
  )

kaggle_2021$Q3_iso2c <- countrycode::countrycode(kaggle_2021$Q3, "country.name.en", "iso2c") |>
  fct_na_value_to_level("Άλλο")

kaggle_2021$Q3 <- countrycode::countrycode(kaggle_2021$Q3, "country.name.en", "cldr.name.el") |>
  fct_na_value_to_level("Άλλο")

kaggle_2021$Q4 <- kaggle_2021$Q4 |>
  fct_recode(
    "Προπτυχιακό" = "Bachelor’s degree",
    "Διδακτορικό" = "Doctoral degree",
    "Άλλο" = "I prefer not to answer",
    "Μεταπτυχιακό" = "Master’s degree",
    "Απόφοιτος Λυκείου" = "No formal education past high school",
    "Διδακτορικό" = "Professional doctorate",
    "Μεταλυκειακές σπουδές" = "Some college/university study without earning a bachelor’s degree"
  )

kaggle_2021$Q5 <- kaggle_2021$Q5 |>
  fct_recode(
    "Αναλυτής Επιχειρήσεων" = "Business Analyst",
    "Άνεργος" = "Currently not employed",
    "Αναλυτής Δεδομένων" = "Data Analyst",
    "Μηχανικός Δεδομένων" = "Data Engineer",
    "Επιστήμονας Δεδομένων" = "Data Scientist",
    "Μηχανικός Βάσης Δεδομένων" = "DBA/Database Engineer",
    "Υπεύθυνος Σχέσεων/Υποστήριξης Προγραμματιστών" = "Developer Relations/Advocacy",
    "Μηχανικός Μηχανικής Μάθησης" = "Machine Learning Engineer",
    "Άλλο" = "Other",
    "Project Manager" = "Program/Project Manager",
    "Μηχανικός Έρευνας" = "Research Scientist",
    "Μηχανικός Λογισμικού" = "Software Engineer",
    "Στατιστικός" = "Statistician",
    "Φοιτητής" = "Student"
  )

## Recoding kaggle_2021$Q6
kaggle_2021$Q6 <- kaggle_2021$Q6 |>
  fct_recode(
    "< 1" = "< 1 years",
    "1-3" = "1-3 years",
    "10-20" = "10-20 years",
    "20+" = "20+ years",
    "3-5" = "3-5 years",
    "5-10" = "5-10 years",
    "0" = "I have never written code"
  )

kaggle_2021$Q11 <- kaggle_2021$Q11 |>
  fct_recode(
    "Πλατφόρμα Cloud" = "A cloud computing platform (AWS, Azure, GCP, hosted notebooks, etc)",
    "Workstation για βαθιά μάθηση" = "A deep learning workstation (NVIDIA GTX, LambdaLabs, etc)",
    "Λάπτοπ" = "A laptop",
    "Επιτραπέζιο υπολογιστή" = "A personal computer / desktop",
    "Κανένα" = "None",
    "Άλλο" = "Other"
  )

kaggle_2021$Q13 <- kaggle_2021$Q13 |>
  fct_recode(
    "2-5" = "2-5 times",
    "6-25" = "6-25 times",
    "> 25" = "More than 25 times",
    "0" = "Never",
    "1" = "Once"
  )

kaggle_2021$Q21 <- kaggle_2021$Q21 |>
  fct_recode(
    "0-49" = "0-49 employees",
    "> 10,000" = "10,000 or more employees",
    "1000-9,999" = "1000-9,999 employees",
    "250-999" = "250-999 employees",
    "50-249" = "50-249 employees"
  )


kaggle_2021_compare = kaggle_2021 %>%
  mutate(Q3 = if_else(Q3 != "Ελλάδα", "Άλλο", Q3))

Προεπισκόπηση δεδομένων

reactable(head(kaggle_2021_compare))
Πίνακας 1: Προεπισκόπηση πρώτων 5 σειρών του συνόλου δεδομένων

Η κοινότητα του Kaggle

One of the first thing I observed when I signed up on Kaggle was the vast majority of nationalities and the multicultural origin of the platform. Many people from many countries all in one platform gathered sharing the same passion for Data Science and Data Analytics. Something like Facebook but for Statistics :)

Nevermind, I decided to make a reactable to see from which nationalities the platform is comprised from. One out of four users are from India which makes them the most populous nation in platform. By the way, Greek users are way less making a 0.39% of Kaggle’s userbase.

ΣημείωσηΜία σύντομη σημείωση

Θα πρέπει να σημειώσουμε ότι τα δεδομένα και συνεπώς και τα αποτελέσματα προέρχονται αποκλειστικά από την έρευνα που έχει διεξάγει η πλατφορμα του Kaggle. Δεν είναι μία συνολική εικόνα της κοινότητας της επιστήμης δεδομένων. Επίσης, θα πρέπει να σημειωθεί ότι η έρευνα είναι προαιρετική επομένως μελετάμε τα χαρακτηριστικά αυτών που επιθυμούσαν να συμμετέχουν στην έρευνα.

a = kaggle_2021 %>%
  group_by(Q3) %>%
  summarise(n = n()) %>%
  mutate(pct = round(n/nrow(kaggle_2021) * 100, digits = 2)) %>%
  arrange(desc(pct)) %>%
            reactable(.,
              defaultPageSize = 6,
              theme = espn(),
              columns = list(
                Q3 = colDef(name = "Χώρα"),
                n = colDef(name = "Αριθμός χρηστών", 
                           defaultSortOrder = "desc"),
                pct = colDef(name = "Ποσοστό (%)")),
              defaultColDef = colDef(
                cell = data_bars(data = ., 
                                 text_position = "outside-base",
                                 fill_opacity = 0.5, round_edges = T
                )
              )
            ) %>%
 add_title(
    title = reactablefmtr::html("Πληθυσμιακή κατανομή της Κοινότητας του Kaggle <img src='https://www.svgrepo.com/show/387896/laptop.svg' alt='' width='40' height='40'>"),
    margin = reactablefmtr::margin(t=0,r=0,b=3,l=0)
    )  %>% 
            add_subtitle("Η Ινδία είναι η χώρα με τη μεγαλύτερη εκπροσώπηση σε απόλυτους αριθμούς, ακολουθούμενη από τις ΗΠΑ.", font_size = 14, font_weight = "normal") %>% 
            add_source("stesiam | Δεδομένα : Kaggle Survey 2021", font_size = 12, align = "right")

a

Πληθυσμιακή κατανομή της Κοινότητας του Kaggle

Η Ινδία είναι η χώρα με τη μεγαλύτερη εκπροσώπηση σε απόλυτους αριθμούς, ακολουθούμενη από τις ΗΠΑ.

stesiam | Δεδομένα : Kaggle Survey 2021

Συμμετοχή γυναικών στον κλάδο

Γενικότερα, παρατηρείται διαχρονικά σε παγκόσμιο επίπεδο μία υποεκπρωσόπηση των γυναικών στην αγορά εργασίας. Σύμφωνα με την (2023) μόλις 5 στις 10 γυναίκες απασχολούνται, σε αντίθεση με τους άνδρες όπου η αντίστοιχη αναλογία προσεγγίζει τους 7 στους 10. Εδώ όμως θέλουμε να μελετήσουμε συγκεκριμένα για το πεδίο της επιστήμης δεδομένων. Τελικά, στον κλάδο μας ακολουθείται το ίδιο μοτίβο μη συμπερίληψης; Η απάντηση είναι ΝΑΙ, αλλά με ισχυρές διαφοροποιήσεις ανά χώρα.

data = kaggle_2021 %>%
  group_by(Q3, Q3_iso2c) %>%
  summarise(n = n(),
            Women = sum(factor(Q2) == "Γυναίκα"),
            pct_women = Women/n *100) %>%
  mutate(iso2c = tolower(Q3_iso2c))
library(purrr)
data_decreasing = data %>% dplyr::arrange(-pct_women)

# Add emoji flags
data_decreasing <- data_decreasing %>%
    mutate(flag = map_chr(iso2c, ~ {
        chars <- utf8ToInt(toupper(.x))
        paste0(
            intToUtf8(127397 + chars[1]),
            intToUtf8(127397 + chars[2])
        )
    }))


highchart() %>%
    hc_chart(type = "bar", inverted = TRUE) %>%
    hc_title(text = "<b>Συμμετοχή γυναικών στη κοινότητα της επιστήμης δεδομένων</b>") %>%
    hc_subtitle(text = glue("Σύμφωνα με τη πρόσφατη έρευνα του Kaggle, οι γυναίκες υποεκπροσωπούνται στην κοινότητα της επιστήμης των δεδομένων. Η χώρα με την ισχυρότερη (αναλογικά) συμμετοχή είναι η Τυνησία και αυτή με τη χαμηλότερη το Περού. Τέλος, η <b>Ελλάδα</b> έχει μία σχετικά απογοητευτική απόδοση στον συγκεκριμένο δείκτη καταλαμβάνοντας τη 40η θέση με ποσοστό 15.7%, και με δεδομένο ότι ο μέσος όρος συμμετοχής είναι στο {round(mean(data$pct_women),digits = 2)} %")  ) %>%
    hc_caption(text="Δεδομένα: Έρευνα χρηστών του Kaggle 2021 | <b>stesiam</b>, 2023") %>%    hc_xAxis(categories = data_decreasing$Q3, title = list(text = NULL)) %>%
    hc_yAxis(title = list(text = "Percent (%)")) %>%
    hc_legend(enabled = FALSE) %>%
    hc_add_series(
        name = "Women %",
        data = map(seq_len(nrow(data_decreasing)), function(i) {
            list(
                y = data_decreasing$pct_women[i],
                Women = data_decreasing$Women[i],
                n = data_decreasing$n[i],
                country = data_decreasing$Q3[i],
                flag = data_decreasing$flag[i]
            )
        })
    ) %>%
    hc_tooltip(
        useHTML = TRUE,
        formatter = JS("
      function() {
        var point = this.point;
        return '<span style=\"font-size:22px\">' + point.flag + '</span> ' +
               '<b>' + point.country + '</b><br>' +
               'Percent: ' + Highcharts.numberFormat(this.y, 2) + '%<br>' +
               'Women: ' + point.Women + ' / ' + point.n;
      }
    ")
    )

Ηλικιακή Κατανομή

Η κοινότητα των Ελλήνων χρηστών αποτελείται από μεγαλύτερης ηλικίας άτομα Greece’s Kaggle Community it is comprised from more elerly people comapred to the rest of Kaggle’s community. More specifically, Greece’s most prevalent age group is 25-29 and a sufficient proportion of users on their 40s. On the contrary, Kaggle’s community is quite youthy with most prevalent the three youngest age groups. Aggrevetating, those groups consist six out of ten userbase of Kaggle’s community.

data1 = kaggle_2021_compare %>%
  select(Q3, Q1) %>%
  group_by(Q3,Q1) %>%
  summarise(n = n()) %>%
  group_by(Q3) %>%
  mutate(total = sum(n),
         pct = round(n/total *100, digits = 1)) %>%
  select(Q3, Q1, pct)
`summarise()` has grouped output by 'Q3'. You can override using the `.groups`
argument.
library(highcharter)

highchart() |>
  hc_chart(type = "areaspline") |>
  hc_title(text = "Ηλικιακή κατανομή χρηστών ανά χώρα προέλευσης (🇬🇷 / 🌍)") |>
  hc_xAxis(categories = unique(data1$Q1)) |>
  hc_yAxis(title = list(text = "Population (%)")) |>
  hc_tooltip(shared = TRUE, valueSuffix = " %") |>
  hc_plotOptions(
    areaspline = list(
      fillOpacity = 0.5  # match the Highcharts demo's fill
    )
  ) |>
  hc_legend(
    layout = "vertical",
    align = "left",
    verticalAlign = "top",
    x = 450,
    y = 100,
    floating = TRUE,
    borderWidth = 1
    ) |>
  hc_add_series(
    name = "Ελλάδα",
    data = data1 %>% dplyr::filter(Q3 =="Ελλάδα") %>% pull(pct)
  ) |>
  hc_add_series(
    name = "Υπόλοιπος Κόσμος",
    data = data1 %>% dplyr::filter(Q3 =="Άλλο") %>% pull(pct)
  )

Εκπαιδευτικό Υπόβαθρο

data3 = kaggle_2021_compare %>%
  select(Q3, Q4) %>%
  group_by(Q3, Q4) %>%
  summarise(n = n()) %>%
  group_by(Q3) %>%
  mutate(pct = round(n/sum(n)*100, digits = 1))  %>%
  ungroup()
`summarise()` has grouped output by 'Q3'. You can override using the `.groups`
argument.
d = data3 %>% dplyr::filter(Q4 %in% c("Προπτυχιακό", "Μεταπτυχιακό", "Διδακτορικό"))
highchart() %>%
  hc_chart(type = "bar") %>%
  hc_title(text = "Εκπαιδευτικό υπόβαθρο χρηστών (🇬🇷 / 🌍)") %>%
  hc_subtitle(text="Οι Έλληνες χρήστες έχουν υψηλότερους τίτλους σπουδών με 77% να έχει μεταπτυχιακό ή διδακτορικό δίπλωμα. Το αντίστοιχο ποσοστό στις υπόλοιπες χώρες είναι 50%.") %>%
  hc_caption(text="Σημείωση: Τα ποσοστά αναφέρονται σε επίπεδο χώρας. <br> stesiam, 2023") %>%
  hc_xAxis(categories = d$Q4,
           title = list(text = NULL)) %>%
  hc_yAxis(min = 0,
           title = list(text = "Ποσοστό (%) ερωτηθέντων ανά χώρα", align = "high"),
           labels = list(overflow = "justify")) %>%
  hc_tooltip(valueSuffix = " %") %>%
  hc_plotOptions(bar = list(dataLabels = list(enabled = TRUE))) %>%
  hc_series(
    list(name = "Ελλάδα", data = d %>% dplyr::filter(Q3 =="Ελλάδα") %>% pull(pct)),
    list(name = "Υπόλοιπος Κόσμος", data = d %>% dplyr::filter(Q3 =="Άλλο") %>% pull(pct))
  ) %>%
  hc_legend(
    align = "center",
    verticalAlign = "top",
    layout = "horizontal"
  )

Αναφορές

Cuilla, K. (2022). reactablefmtr: Streamlined Table Styling and Formatting for Reactable. Ανακτήθηκε από https://kcuilla.github.io/reactablefmtr/
Heads or Tails. (2020). Kaggle has 10 million registered users! Ανακτήθηκε από https://www.kaggle.com/discussions/general/332147
Hester, J., & Bryan, J. (2024). glue: Interpreted String Literals. Ανακτήθηκε από https://glue.tidyverse.org/
Kunst, J. (2022). highcharter: A Wrapper for the Highcharts Library. Ανακτήθηκε από https://jkunst.com/highcharter/
Lin, G. (2023). reactable: Interactive Data Tables for R. Ανακτήθηκε από https://glin.github.io/reactable/
O’Hara-Wild, M. (2018, Ιούλιος 10). Arranging Hex Stickers in R. Ανακτήθηκε από https://mitchelloharawild.github.io/mitchelloharawild.com//blog/hexwall
Qiu, Y., & See file AUTHORS for details., authors/contributors of the included fonts. (2020). showtextdb: Font Files for the showtext Package. https://doi.org/10.32614/CRAN.package.showtextdb
Qiu, Y., & See file AUTHORS for details., authors/contributors of the included fonts. (2024a). sysfonts: Loading Fonts into R. Ανακτήθηκε από https://github.com/yixuan/sysfonts
Qiu, Y., & See file AUTHORS for details., authors/contributors of the included software. (2024b). showtext: Using Fonts More Easily in R Graphs. Ανακτήθηκε από https://github.com/yixuan/showtext
R Core Team. (2025). R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. Ανακτήθηκε από https://www.R-project.org/
The World Bank. (2023). Labor force participation rate (. Ανακτήθηκε από https://genderdata.worldbank.org/indicators/sl-tlf-acti-zs/?geos=WLD&view=trend
Wickham, H. (2023). forcats: Tools for Working with Categorical Variables (Factors). Ανακτήθηκε από https://forcats.tidyverse.org/
Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2023). dplyr: A Grammar of Data Manipulation. Ανακτήθηκε από https://dplyr.tidyverse.org
Wickham, H., Hester, J., & Bryan, J. (2024). readr: Read Rectangular Text Data. Ανακτήθηκε από https://readr.tidyverse.org
Wickham, H., Vaughan, D., & Girlich, M. (2024). tidyr: Tidy Messy Data. Ανακτήθηκε από https://tidyr.tidyverse.org
Zhu, H. (2024). kableExtra: Construct Complex Table with kable and Pipe Syntax. Ανακτήθηκε από http://haozhu233.github.io/kableExtra/

Αναφορά

Αναφορά BibTeX:
@online{2023,
  author = {, stesiam},
  title = {Ελληνική κοινότητα επιστήμης δεδομένων},
  date = {2023-05-06},
  url = {https://stesiam.com/el/posts/kaggle-greek-community/},
  langid = {el}
}
Για απόδοση ευγνωμοσύνης, παρακαλούμε αναφερθείτε σε αυτό το έργο ως:
stesiam. (2023, May 6). Ελληνική κοινότητα επιστήμης δεδομένων. Retrieved from https://stesiam.com/el/posts/kaggle-greek-community/