Εργαλεια & Πρακτικες

Η χαρτογράφηση και η ανάλυση των σχολείων σε αναστολή

Κατεβάστε τα δεδομένα Δες το άρθρο

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

 
ZERO_DAYS = pd.to_timedelta('0 days')

df3['latest_update'] = df3['retrieval_date']

edit_and_keep = []
keep_both = []
keep_last = []

for i,item in df3.iterrows():
    # if school status does not change
    if item['temp_notes_diff'] == float(0):
        # if duplicates have been retrieved on the same date
        if item['retrieval_diff'] == ZERO_DAYS:
            # if suspension time period is the same
            if item['closed_from_diff'] == ZERO_DAYS and item['closed_to_diff'] == ZERO_DAYS:
                keep_both.append(item['school'])
            
            # if closed from date is the same, but closed to date is earlier in the most recent retrieval
            elif item['closed_from_diff'] == ZERO_DAYS and item['closed_to_diff'] < ZERO_DAYS:
                df3.at[i, 'closed_to_date'] = item['closed_to_date'] - item['closed_to_diff']
                keep_last.append(item['school'])
                
            # if closed from date is the same, but the closed to date recently retrieved is later or the same  
            elif item['closed_from_diff'] == ZERO_DAYS and item['closed_to_diff'] >= ZERO_DAYS:
                df3.at[i, 'closed_to_date'] = item['closed_to_date'] + item['closed_to_diff']
                keep_last.append(item['school'])

            elif item['closed_from_diff'] < ZERO_DAYS and item['closed_to_diff'] < ZERO_DAYS:
                keep_last.append(item['school'])
        
        # if duplicates have not been retrieved on the same date
        if item['retrieval_diff'] != ZERO_DAYS:
            if (item['closed_to_date'] - item['closed_to_diff']) <= item['closed_to_date'] and\
            (item['closed_to_date'] - item['closed_to_diff']) >= item['closed_from']:
                df3.at[i, 'closed_from'] = item['closed_from'] - item['closed_from_diff']
                df3.at[i, 'retrieval_date'] = item['retrieval_date'] - item['retrieval_diff']
                keep_last.append(item['school'])
            
            elif (item['closed_to_date'] - item['closed_to_diff']) > item['closed_to_date'] and\
            (item['closed_from'] - item['closed_from_diff']) < item['closed_from']:
                df3.at[i, 'closed_from'] = item['closed_from'] - item['closed_from_diff']
                df3.at[i, 'retrieval_date'] = item['retrieval_date'] - item['retrieval_diff']
                df3.at[i, 'closed_to_date'] = item['closed_to_date'] - item['closed_to_diff']
                keep_last.append(item['school'])
                
            else:   
                keep_both.append(item['school'])
Απόσπασμα του κώδικα για τον «καθαρισμό» των δεδομένων ως προς τις χρονολογικές επικαλύψεις μεταξύ αναστολών.

H χαρτογράφηση και η ανάλυση των μονάδων οι οποίες βρίσκονται σε αναστολή λειτουργίας λόγω κρουσμάτων COVID-19 βασίζεται σε δεδομένα που πρωτογενώς προέρχονται από το Υπουργείο Παιδείας και Θρησκευμάτων: Συγκεκριμένα, από την έναρξη της σχολικής χρονιάς και εφεξής, το Υπουργείο αναρτά ανακοινώσεις αναστολών (εδώ ως και την πρώτη εβδομάδα του Νοεμβρίου και, έπειτα, εδώ), καθεμία από τις οποίες περιέχει τα εξής στοιχεία: 

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

Από τις 26 Σεπτεμβρίου 2020 και εφεξής, το iMEdD Lab συλλέγει ημερησίως τις νέες ανακοινώσεις περί αναστολών στην εν λόγω λίστα και, για κάθε εκπαιδευτική δομή αναφοράς, εμπλουτίζει, με τη χρήση της γλώσσας προγραμματισμού Python, τα δεδομένα ως εξής: 

  • εντοπίζει τις γεωγραφικές συντεταγμένες της. Για τον σκοπό του γεωεντοπισμού, έχει δημιουργηθεί ένα πρόγραμμα, με τη χρήση της βιβλιοθήκης Requests: το πρόγραμμα ζητά από την υπηρεσία γεωεντοπισμού (Geocoding API) της πλατφόρμας Google Maps να μας επιστρέψει το γεωγραφικό πλάτος και μήκος κάθε στοιχείου που περιγράφεται ως Σχολείο, Διεύθυνση, Δήμος. Η απάντηση της Google, μεταξύ άλλων, περιέχει τις γεωγραφικές συντεταγμένες και την αντίστοιχη μορφοποιημένη διεύθυνση (όπως η σύνθεσή της έχει γίνει από τη Google, με βάση τα στοιχεία που της δόθηκαν). 
  • αποδίδει ημερομηνία έναρξης της αναστολής, τοποθετώντας την ημερομηνία ανάκτησης ως τέτοια (εκτός εάν η ημερομηνία έναρξης παρέχεται στη συλλεχθείσα ανακοίνωση)
  • ορίζει την κατάσταση αναστολής του σχολείου: εάν δεν υπάρχουν παρατηρήσεις για την εκάστοτε μονάδα, τότε η κατάσταση είναι «Ολική αναστολή». Ειδάλλως, εάν στο πεδίο των παρατηρήσεων, αναφέρονται συγκεκριμένα τμήματα ή τάξεις που αναστέλλουν τη λειτουργία τους, τότε η κατάσταση αναστολής ορίζεται ως «Μερική αναστολή». 
  • σε επόμενο χρόνο, ενημερώνει την κατάσταση που είχε αρχικά αποδοθεί: για παράδειγμα, μία αρχικά «Ολική αναστολή» αργότερα μπορεί να τροποποιηθεί σε «Επαναλειτουργία σχολείου», όταν πλέον έχει παρέλθει το διάστημα αναστολής. 
  • καταγράφει την ημερομηνία απόδοσης τελευταίας κατάστασης και την ημερομηνία ανάκτησης της εκάστοτε ανακοίνωσης

Κατ’ αυτόν τον τρόπο, έχει δημιουργηθεί και συντηρείται ένα σύνολο δεδομένων (dataset), που είναι ανοιχτό και ελεύθερα διαθέσιμο στο GitHub και το οποίο, ως σήμερα, 5 Δεκεμβρίου 2020, περιλαμβάνει 2.238 ανακοινώσεις αναστολών. 

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

Η αναδρομική ανάλυση των δεδομένων ανά ημέρα

Για τους σκοπούς της αναδρομικής ανάλυσης των δεδομένων και της διαγραμματικής αποτύπωσης της πορείας των αναστολών στον χρόνο, έγινε καθαρισμός και επεξεργασία δεδομένων –επίσης με τη χρήση της γλώσσας προγραμματισμού Python

Συγκεκριμένα, εντοπίστηκε και επιλύθηκε το εξής πρόβλημα: οι 2.238 ανακοινώσεις αναστολών, που υπάρχουν στο παραπάνω dataset, αντιστοιχούν σε 1.675 μοναδικές εκπαιδευτικές μονάδες. Αυτό σημαίνει ότι είχαν γίνει περισσότερες από μία ανακοινώσεις αναστολών για 563 δομές, για διάφορους λόγους. Για παράδειγμα, αρχικά μπορεί να είχε προγραμματιστεί μερική αναστολή λειτουργίας για ένα σχολείο και, στη συνέχεια, προτού αυτή ολοκληρωθεί, μπορεί να ανακοινώθηκε ότι το σχολείο αναστέλλει πλήρως τη λειτουργία του. Σε άλλες περιπτώσεις, το αρχικά προγραμματισμένο διάστημα αναστολής ενός σχολείου μπορεί να είχε αναθεωρηθεί σε μεταγενέστερη ανακοίνωση. Πολλές φορές, η λειτουργία ενός τμήματος αναστέλλεται και, το επόμενο διάστημα, περισσότερα τμήματα του ίδιου σχολείου, επίσης, αναστέλλουν τη λειτουργία τους –τότε, το υπουργείο αναρτά νέα ανακοίνωση για το ίδιο σχολείο.

Επομένως, όταν θελήσαμε να μελετήσουμε αναδρομικά την εξέλιξη των σχολείων σε αναστολή στον χρόνο, χρειαζόταν να «καθαρίσουμε» τα δεδομένα μας, προκειμένου να μην υπάρχουν περιπτώσεις σχολείων που θα καταμετρούνταν δύο ή περισσότερες φορές την ίδια ημέρα. Γι’ αυτό, αναπτύχθηκε ένα πρόγραμμα το οποίο, για κάθε σχολείο το οποίο υπάρχει στο dataset δύο φορές:

  • ελέγχει εάν υπάρχει χρονολογική επικάλυψη μεταξύ των ανακοινωθέντων αναστολών
  • ενοποιεί το χρονικό διάστημα αναστολής, εάν δεν υπάρχει μεταβολή στην κατάσταση αναστολής ή
  • προσαρμόζει τα χρονικά διαστήματα αναστολής, σε περίπτωση που εντοπιστεί μεταβολή κατάστασης στο μεσοδιάστημα, ώστε να μην υπάρχουν διπλοεγγραφές

Για παράδειγμα, έστω ότι έχουμε τις εξής δύο ανακοινώσεις για το Σχολείο Α:

  • Σχολείο Α, Τμήμα Ε1, 1/10-14/10
  • Σχολείο Α, Τμήμα Ε2, 3/10-17/10

Τότε, κατόπιν καθαρισμού και επεξεργασίας των δεδομένων, θα έχουμε: 

  • Σχολείο Α, Μερική αναστολή, 1/10-17/10

Έστω, όμως, ότι έχουμε τις εξής δύο ανακοινώσεις για το Σχολείο Β:

  • Σχολείο Β, Τμήμα Α2 και Τμήμα Β1, 1/10-14/10
  • Σχολείο Β (κενό παρατηρήσεων), 4/10-18/10

Τότε, κατόπιν καθαρισμού και επεξεργασίας των δεδομένων, θα έχουμε: 

  • Σχολείο Β, Μερική αναστολή, 1/10-3/10
  • Σχολείο Β, Ολική αναστολή, 4/10-18/10

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

Τέλος, αναπτύχθηκε πρόγραμμα, και πάλι με τη χρήση της γλώσσας προγραμματισμού Python, το οποίο:

  • ταξινόμησε τις εκπαιδευτικές δομές ανά επίπεδο εκπαίδευσης
  • απέδωσε αναδρομικά την κατάσταση κάθε μονάδας, για την οποία είχε συλλεχθεί ανακοίνωση αναστολής λειτουργίας, για κάθε ημέρα εντός του διαστήματος μελέτης, από τις 26 Σεπτεμβρίου 2020 ως τις 5 Δεκεμβρίου 2020

Το αποτέλεσμα είναι ένα δεύτερο, επεξεργασμένο, σύνολο δεδομένων το οποίο, επίσης, διατίθεται στο GitHub.

Λογότυπο Άδειας Χρήσης Creative Commons Non Commercial International