#remotes::install_github(c("ropensci/tabulizerjars", "ropensci/tabulizer"))
Εισαγωγή
Το άρθρο αναμένεται να ενημερώνεται συχνά, μέχρις ότου αναιρεθεί αυτή η σημείωση.
Ο πρόσφατος οδηγός σπουδών περιλαμβάνει δεδομένα σχετικά με όσους επιβιώνουν (αποφοιτούν) από τη σχολή όπως το μέσο βαθμό αποφοίτησης και τα έτη που χρειάστηκαν για αυτή. Αρχικά, παρατηρούμε ότι τα δεδομένα για τα οποία ενδιαφερόμαστε είναι σε μία σχετικά οργανωμένη μορφή, σε πίνακες (το οποίο είναι καλό 😀), βέβαια δεν τα έχουμε σε μορφή αρχείου, αλλά είναι μέρος ενός αρχείου pdf (το οποίο δεν είναι καλό 😢). Ευτυχώς, ανάμεσα σε αυτό το χάος 20,000 και πλέον πακέτων υπάρχει και το πακέτο tabulizer που δίνει τη λύση σε τέτοιου είδους προβλήματα μιας και μπορεί να διαβάσει τους πίνακες εντός αρχείων pdf.
Το άρθρο είναι λίγο παλιό. Το πακέτο όταν είχα γράψει αυτό το άρθρο λεγόταν tabulizer
. Λίγα χρόνια αργότερα, όταν επιχείρησα να κάνω μερικές αλλαγές παρατήρησα ένα σφάλμα στο συγκεκριμένο άρθρο. Το πακέτο πλέον έχει μετονομαστεί και μπορείτε να το βρείτε ως tabulapdf
. Επομένως, προσέξτε το καθώς διάφορες πηγές στο διαδίκτυο ακόμα αναφέρονται σε αυτό με το παλιό όνομα.
Εισαγωγή βιβλιοθηκών
Όπως εξηγήσαμε και προηγουμένως, δεδομένου ότι θα πρέπει να εξάγω δεδομένα και δει πίνακες από αρχείο pdf, το πακέτο tabulizer (νυν tabulapdf
) είναι απαραίτητο. Δυστυχώς, καθώς προσπαθούσα να το εγκαταστήσω λάμβανα συνεχώς ένα μήνυμα σφάλματος παρόμοιο με αυτό. Το πρόβλημα φαίνεται να σχετιζόταν με το πακέτο rJava
και προκειμένου να επιλύσω το πρόβλημα ακολούθησα τις επισημάνσεις αυτού του σχολίου. Έπειτα την εγκατάσταση του rJava, κατάφερα να εγκαταστήσω το πακέτο ως εξής:
Εξαγωγή δεδομένων
Ο οδηγός σπουδών ξεκινάει δίνοντας κάποιες πληροφορίες για το πανεπιστήμιο, συνεχίζει με βασικά στοιχεία της σχολής το εκπαιδευτικό προσωπικό, τις προϋποθέσεις για τη λήψη πτυχίου και συνεζίζεται με αναλυτικότερα περιγραφή κάθε μαθήματος του τμήματος. Στο τέλος του οδηγού σπουδών του τμήματός μας έχει καθιερωθεί να δημοσιεύονται κάποια βασικά στατιστικά στοιχεία των φοιτητών. Θα ασχοληθούμε με τον πρόσφατα αναρτημένο οδηγό σπουδών του 2022, όπου περιέχει δεδομένα των εισαγωγών στο τμήμα, των αποφοίτων, της δομής των σπουδαστών και άλλα δεδομένα από το 2004. Όπως είναι εμφανές απλά μας ενδιαφέρουν οι τελευταίες σελίδες, από έναν πολυσέλιδο οδηγό σπουδών μιας και αποτελείται από 200 σελίδες. Θα ξεκινήσουμε κατεβάζοντας τον οδηγό από τον δοσμένο σύνδεσμο και στη συνέχεια θα επιλέξω με τη βοήθεια του πακέτου pdftools
τις τελευταίες σελίδες, από την 186η μέχρι την 190η σελίδα, ώστε να εξαγάγω στη συνέχεια μόνο τους απαραίτητους πίνακες.
url = "https://www.unipi.gr/faculty/mbouts/anak/OS_22_23.pdf"
download.file(url,
destfile = "sg22.pdf",
method = "wget",
extra = "--no-check-certificate")
pdf_subset('sg22.pdf',
pages = 186:190, output = "subset.pdf")
Αυτός ο περιορισμός είναι αρκετά σημαντικός έτσι ώστε να μειώσω το διάστημα αναζήτησης για τους πίνακες, συνεπώς έχω μια πιο γρήγορη εκτέλεση της εντολής (5 σελίδες αντί για 200). Στη συνέχεια αναλαμβάνει έργο το πακέτο tabulapdf
από το οποίο θα χρειαστούμε την εντολή extract_tables που συλλέγει όλους τους πίνακες από ένα pdf και τους συγκεντρώνει σε μία λίστα. Στη δικιά μας περίπτωση εντοπίστηκαν πέντε πίνακες συνεπώς έλαβα ως αποτέλεσμα μία λίστα που περιείχε πέντε data.frames - πίνακες δεδομένων.. Είναι εκπληκτικό ότι μέσα σε λίγα δευτεόλεπτα έλαβα όλη τη πληροφορία σε μία μορφή έτοιμη για ανάλυση. Αν προσπαθούσα να εισάγω τα δεδομένα με πιο παραδοσιακούς τρόπους, όπως αντιγραφή - επικόλληση θα είχα ξοδέψει πάνω από 1 ώρα!
statistics_tables <- extract_tables(
file = "subset.pdf",
method = "decide",
output = "tibble")
New names:
New names:
New names:
New names:
New names:
• `` -> `...1`
Εισακτέοι φοιτητές
Ο πρώτος πίνακας που έχω λάβει είναι σχετικά με τους εισακτέους φοιτητές, δηλαδή με όσους επιτυγχάνουν να εγγραφούν στη σχολή. Για να εγγραφείς σε μία σχολή υπάρχουν τρεις βασικού τρόποι. Ο πρώτος και ο πιο διαδεδομένος τρόπος είναι μέσω Πανελληνιών εξετάσεων, όπου διαγωνίζεσαι με όλους τους μαθητές της Γ Λυκείου για την εισαγωγή στη τριτοβάθμια εκπαίδευση. Ο δεύτερος τρόπος είναι αν είσαι ήδη πτυχιούχος, έχεις το δικαίωμα αντί να περάσεις το μαρτύριο των Πανελληνιών να δώσεις εξετάσεις στη σχολή που σε ενδιαφέρει. Συνήθως αυτές η εξετάσεις διοργανώνονται από την ίδια τη σχολή και όχι από το κράτος όπως στις πανελλήνιες και στις περισσότερες σχολές προγραμματίζονται τον Δεκέμβριο. Μία τρίτη επιλογή είναι να πάρεις μεταγραφή. Αν έχεις περάσει σε ένα τμήμα για το οποίο υπάρχει ένα ομοειδές σε άλλη πόλη μπορείς να ζητήσεις μεταγραφή σε άλλο τμήμα, ωστόσο οι θέσεις είναι περιορισμένες και τα κριτήρια πάρα πολύ αυστηρά. Αν θέλετε να διαβάσετε τη λίστα με τις αντιστοιχίες των σχολών μπορείτε να πατήσετε εδώ. Για παράδειγμα, στο τμήμα μας (Στατιστική, Πειραιά) ερχόντουσαν να παρακολουθήσουν μαθήματα φοιτητές του Στατιστικού του Πανεπιστημίου Αιγαίου στη Σάμο, μιας και ήλπιζαν ότι θα πάρουν μεταγραφή στο δικό μας τμήμα που είναι κοντά στην Αθήνα.
Αφού κάναμε μία σύνοψη των τρόπων εισαγωγής στα τμήματα τριτοβάθμιας εκπαίδευσης ας δούμε τι ισχύει στο δικό μας τμήμα με βάση τα δημοσιευμένα στοιχεία.
Στη σχολή μας οι συνολικοί εισακτέοι από όλες τις κατηγορίες κυμαίνονταν στους 200 μέχρι 250 μέχρι το ακαδημαϊκό έτος 2012-2013. Τα επόμενα δύο έτη έσπασε το φράγμα των 250 εισακτέων. Στη συνέχεια η κατάσταση επανήλθε στα προαναφερόμενα όρια μέχρι το 2019, όπου είχαμε ιστορικό ρεκόρ εισαγωγών στο τμήμα με 292 εισακτέους. Μία σημαντική παρατήρηση που έκανα είναι πόσο όμοιο είναι το σχήμα της γραμμής μεταξύ και πόσο ταυτίζονται οι καμπύλες των συνολικών φοιτητών με αυτή των μεταγραφών, στην ουσία είναι ο απρόβλεπτος παράγοντας για την όποια ισχυρή διακύμανση των εισακτέων.
colors <- c("rgba(52, 152, 219, 0.6)", # blue
"rgba(231, 76, 60, 0.6)", # red
"rgba(46, 204, 113, 0.6)", # green
"rgba(155, 89, 182, 0.6)") # purple
highchart() %>%
hc_chart(type = "areaspline") %>% # smooth stacked lines hc_title(text = "Stacked Line Chart Example") %>%
hc_xAxis(categories = admitted_students$Year) %>%
hc_yAxis(title = list(text = "Αριθμός φοιτητών")) %>%
hc_title(text = "Συνολικές εγγραφές φοιτητών ανά ακαδημαϊκό έτος") %>%
hc_subtitle(text = "Απόλυτος αριθμός εγγραφών με βάση την κατηγορία εισαγωγής") %>%
hc_colors(colors) %>% # apply custom colors
hc_plotOptions(
areaspline = list(
stacking = "normal",
marker = list(enabled = FALSE),
lineWidth = 2, # thicker smooth line
fillOpacity = 0.6 # subtle transparency
)) %>%
hc_add_series(name = "Πανελλήνιες", data = admitted_students$Main_exams) %>%
hc_add_series(name = "Μεταγραφή", data = admitted_students$Transfer) %>%
hc_add_series(name = "Κατατακτήριες", data = admitted_students$Entry_exams) %>%
hc_add_series(name = "Άλλο", data = admitted_students$Other) %>%
hc_tooltip(shared = TRUE)
Αφού μελετήσαμε στο Σχήμα 1 τις απόλυτες τιμές των επιτυχόντων. Ωστόσο, ο αριθμός των φοιτητών αυτή τη τελυταία 20ετία κυμαίνεται μεταξύ του 200 και του 300 που κάνει την σύγκριση μεταξύ των ετών δύσκολη. Έτσι θα υπολογίσω και τη ποσοστιαία συμμετοχή κάθε κατηγορίας ανά έτος. Ένα πολύ ενδιαφέρον στοιχείο είναι ότι κάποια ακαδημαικά έτη ο αριθμός των φοιτητών που εισήλθαν στο τμήμα εκτός Πανελληνιών Εξετάσεων προσέγγιζε το ένα τρίτο των συνολικών εγγραφών. Αυτό φαίνεται να έχει συμβεί σε δύο ακαδημαϊκά έτη, το 2010-2011 και το 2013-2014.
colors <- c("rgba(52, 152, 219, 0.6)", # blue
"rgba(231, 76, 60, 0.6)", # red
"rgba(46, 204, 113, 0.6)", # green
"rgba(155, 89, 182, 0.6)") # purple
highchart() %>%
hc_chart(type = "areaspline") %>% # smooth stacked lines hc_title(text = "Stacked Line Chart Example") %>%
hc_xAxis(categories = admitted_students$Year) %>%
hc_yAxis(title = list(text = "Αριθμός φοιτητών")) %>%
hc_title(text = "Συνολικές εγγραφές φοιτητών ανά ακαδημαϊκό έτος") %>%
hc_subtitle(text = "") %>%
hc_colors(colors) %>% # apply custom colors
hc_plotOptions(
areaspline = list(
stacking = "percent",
marker = list(enabled = FALSE),
lineWidth = 2, # thicker smooth line
fillOpacity = 0.6 # subtle transparency
)) %>%
hc_add_series(name = "Πανελλήνιες", data = admitted_students$Main_exams) %>%
hc_add_series(name = "Μεταγραφή", data = admitted_students$Transfer) %>%
hc_add_series(name = "Κατατακτήριες", data = admitted_students$Entry_exams) %>%
hc_add_series(name = "Άλλο", data = admitted_students$Other) %>%
hc_tooltip(shared = TRUE)
Πληθυσμός φοιτητών
f = statistics_tables[[2]] %>%
setNames(c("Year", "BSc", "MSc_A","MSc_B", "PhD")) %>%
drop_na() %>%
mutate(MSc_B = stringr::str_replace(MSc_B, "-", "0")) %>%
mutate(across(-Year, ~ as.integer(.))) %>%
mutate(MSc = MSc_A + MSc_B) %>%
mutate(PhDperBSc = round((PhD/BSc)*100, digits = 1)) %>%
mutate(PhDperMSc = round((PhD/MSc)*100, digits = 1))
colors <- c("rgba(52, 152, 219, 0.6)", # blue
"rgba(231, 76, 60, 0.6)", # red
"rgba(46, 204, 113, 0.6)")
highchart() %>%
hc_chart(type = "areaspline") %>% # smooth stacked lines hc_title(text = "Stacked Line Chart Example") %>%
hc_xAxis(categories = admitted_students$Year) %>%
hc_yAxis(title = list(text = "Αριθμός φοιτητών")) %>%
hc_title(text = "Συνολικές εγγραφές φοιτητών ανά ακαδημαϊκό έτος") %>%
hc_subtitle(text = "Απόλυτος αριθμός εγγραφών με βάση την κατηγορία εισαγωγής") %>%
hc_colors(colors) %>% # apply custom colors
hc_plotOptions(
areaspline = list(
stacking = "normal",
marker = list(enabled = FALSE),
lineWidth = 2, # thicker smooth line
fillOpacity = 0.6 # subtle transparency
)) %>%
hc_add_series(name = "Προπτυχιακοί", data = f$BSc) %>%
hc_add_series(name = "Μεταπτυχιακοί", data = f$MSc) %>%
hc_add_series(name = "Διδακτορικοί", data = f$PhD) %>%
hc_tooltip(shared = TRUE)
colors <- c("rgba(52, 152, 219, 0.6)", # blue
"rgba(231, 76, 60, 0.6)", # red
"rgba(46, 204, 113, 0.6)", # green
"rgba(155, 89, 182, 0.6)") # purple
highchart() %>%
hc_chart(type = "areaspline") %>% # smooth stacked lines hc_title(text = "Stacked Line Chart Example") %>%
hc_xAxis(categories = admitted_students$Year) %>%
hc_yAxis(title = list(text = "Αριθμός φοιτητών")) %>%
hc_title(text = "Συνολικές εγγραφές φοιτητών ανά ακαδημαϊκό έτος") %>%
hc_subtitle(text = "Απόλυτος αριθμός εγγραφών με βάση την κατηγορία εισαγωγής") %>%
hc_colors(colors) %>% # apply custom colors
hc_plotOptions(
areaspline = list(
stacking = "normal",
marker = list(enabled = FALSE),
lineWidth = 2, # thicker smooth line
fillOpacity = 0.6 # subtle transparency
)) %>%
hc_add_series(name = "Μεταπτυχιακό Εφαρμοσμένη Στατιστική", data = f$MSc_A) %>%
hc_add_series(name = "Μεταπτυχιακό Αναλογιστικά", data = f$MSc_B) %>%
hc_add_series(name = "Διδακτορικοί", data = f$PhD) %>%
hc_tooltip(shared = TRUE)
Κατανομή βαθμών αποφοίτησης
Όλα τα παραπάνω στοιχεία ήταν κατά κάποιο τρόπο δημογραφικά και δεν είχαν και κάποια ιδιαίτερη αξία. Πάμε λοιπόν να εξετάσουμε το πρώτο ενδιαφέρον στοιχείο που που είναι η κατανομή των βαθμών αποφοίτησης. Στα στοιχεία που δημοσιεύει το τμήμα οι βαθμοί έχουν χωριστεί σε τέσσερις κατηγορίες ανάλογα του βαθμού αποφοίτησης:
- Από τη βάση (5) μέχρι 6
- Από 6 εώς 7
- Από 7 μέχρι 8.5 και
- αυτοί που πήραν πάνω από 8.5
graduates_distr_grades = statistics_tables[[4]] %>%
setNames(c("Year", "5to6", "6to7", "7to8p5", "over8p5", "AVG")) %>%
drop_na() %>%
mutate(across(everything(), ~ str_remove(., "\\(.*\\)")),
across(everything(), ~ str_trim(.)),
across(everything(), ~ str_replace_all(.,pattern = ",",replacement = ".")),
across(-Year, ~ round(as.numeric(.), digits = 1)))
colors <- c(
"#E24A4A",
"#FF9090",
"#90C3FF",
"#4A90E2"
)
highchart() %>%
hc_chart(type = "areaspline") %>% # smooth stacked lines hc_title(text = "Stacked Line Chart Example") %>%
hc_xAxis(categories = graduates_distr_grades$Year) %>%
hc_yAxis(title = list(text = "Αριθμός φοιτητών")) %>%
hc_title(text = "Συνολικές εγγραφές φοιτητών ανά ακαδημαϊκό έτος") %>%
hc_subtitle(text = "") %>%
hc_colors(colors) %>% # apply custom colors
hc_plotOptions(
areaspline = list(
stacking = "percent",
marker = list(enabled = FALSE),
lineWidth = 2, # thicker smooth line
fillOpacity = 0.6 # subtle transparency
)) %>%
hc_add_series(name = "Βαθμός 5-6", data = graduates_distr_grades$`5to6`) %>%
hc_add_series(name = "Βαθμός 6-7", data = graduates_distr_grades$`6to7`) %>%
hc_add_series(name = "Βαθμός 7-8.5", data = graduates_distr_grades$`7to8p5`) %>%
hc_add_series(name = "Βαθμός 8.5+", data = graduates_distr_grades$over8p5) %>%
hc_tooltip(shared = TRUE)
Κατανομή έτους αποφοίτησης
graduate_data = statistics_tables[[5]] %>%
setNames(c("Year", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "11Y+","AVGY")) %>%
.[-c(1:2),] %>%
drop_na() %>%
dplyr::filter(Year != "2009-2022") %>%
mutate(across(contains("Y") & !matches("^Year$"), as.numeric)) %>%
mutate("4y" = `4Y`,
"4to6" = `5Y` + `6Y`,
"6to8" = `7Y` + `8Y`,
"9plus" = `9Y` + `10Y` + `11Y+`) %>%
select(Year, `4y`, `4to6`, `6to8`, `9plus`) %>%
mutate(
Year = stringr::str_replace(Year, ".*-", "")
)
Warning: There was 1 warning in `mutate()`.
ℹ In argument: `across(contains("Y") & !matches("^Year$"), as.numeric)`.
Caused by warning:
! NAs introduced by coercion
colors <- c(
"#E24A4A",
"#FF9090",
"#90C3FF",
"#4A90E2"
)
highchart() %>%
hc_chart(type = "area") %>%
hc_title(text = "Κατανομή διάρκειας σπουδών μέχρι την αποφοίτηση") %>%
hc_subtitle(text = "Οι περισσότεροι φοιτητές ξεπερνάνε τα ν+2 έτη για να λάβουν πτυχίο!") %>%
hc_caption(text = "stesiam, 2023") %>%
hc_xAxis(categories = graduate_data$Year,
title = NULL) %>%
hc_yAxis(title = list(text = "Percentage (%)")) %>%
hc_tooltip(shared = TRUE) %>%
hc_add_series(name = "9 Years +", data = graduate_data$`9plus`) %>%
hc_add_series(name = "7 to 8 Years", data = graduate_data$`6to8`) %>%
hc_add_series(name = "5 to 6 Years", data = graduate_data$`4to6`) %>%
hc_add_series(name = "4 Years", data = graduate_data$`4y`) %>%
hc_plotOptions(area = list(
stacking = "percent",
marker = list(enabled = FALSE)
)) %>%
hc_colors(colors)
Σχέση ετών και μέσου όρου
statistics_tables[[5]] %>%
.[,c(1,10)] %>%
drop_na() %>%
.[-c(1),] %>%
setNames(c("GradYear", "AvgGradDuration")) %>%
mutate(AvgGradDuration = stringr::str_remove_all(AvgGradDuration, pattern = " έτη"),
AvgGradDuration = stringr::str_replace(AvgGradDuration, pattern = ",", replacement = "."),
AvgGradDuration = as.numeric(AvgGradDuration))
# A tibble: 14 × 2
GradYear AvgGradDuration
<chr> <dbl>
1 2009-2010 6.5
2 2010-2011 6.4
3 2011-2012 6.4
4 2012-2013 6.7
5 2013-2014 6.5
6 2014-2015 6.2
7 2015-2016 6.7
8 2016-2017 7.1
9 2017-2018 7.4
10 2018-2019 7.8
11 2019-2020 7.7
12 2020-2021 7.9
13 2021-2022 7.6
14 2009-2022 7
# A tibble: 19 × 3
Year Grade Number
<chr> <chr> <chr>
1 2003-2004 6,46 (140)
2 2004-2005 6,54 (219)
3 2005-2006 6,48 (120)
4 2006-2007 6,51 (163)
5 2007-2008 6,41 (154)
6 2008-2009 6,39 (154)
7 2009-2010 6,30 (156)
8 2010-2011 6,40 (159)
9 2011-2012 6,43 (166)
10 2012-2013 6,36 (199)
11 2013-2014 6,33 (331)
12 2014-2015 6,38 (212)
13 2015-2016 6,36 (123)
14 2016-2017 6,35 (117)
15 2017-2018 6,39 (63)
16 2018-2019 6,38 (212)
17 2019-2020 6,39 (220)
18 2020-2021 6,41 (247)
19 2021-2022 6,65 (181)
Αναφορά
@online{2023,
author = {, stesiam},
title = {Στατιστικά των Αποφοίτων Στατιστικής},
date = {2023-07-23},
url = {https://stesiam.com/el/posts/eda-graduates-of-statistics/},
langid = {el}
}