Πρόσβαση στο API του data.gov.gr

Ένας απλός οδηγός χρήσης του API του data.gov.gr, ώστε να λαμβάνετε τη ροή δεδομένων με τη χρήση της R.
R
API
Συντάκτης

stesiam

Δημοσιεύτηκε στις

4 Ιουλίου 2023

Εισαγωγή

Στην παραδοσιακή ανάλυση δεδομένων, συνήθως ο αναλυτής καλείται να «καθαρίσει» τα δεδομένα και να τα φέρει σε μία κατάλληλη μορφή προκειμένου να αναλυθούν. Αυτή η διαδικασία υπονοεί ότι τα δεδομένα υπάρχουν συγκεντρωμένα σε ένα αρχείο. Ωστόσο, δεν είναι πάντα έτσι. Το πρόβλημα με την ανάλυση ενός στατικού συνόλου δεδομένων είναι ότι δεν λαμβάνει υπόψη τις όποιες νέες τιμές που καταγράφονται. Σε αυτή την περίπτωση θα πρέπει να ανακτήσουμε τα νέα στοιχεία και να επανεκτελέσουμε την ανάλυση μέσω της R ή όποιου εργαλείου χρησιμοποιούμε. Όπως γίνεται αντιληπτό, αυτό είναι μη παραγωγικό, ωστόσο όταν συμβαίνει λίγες φορές μέσα στο χρόνο, ίσως να μην είναι και τόσο επίπονο.

Εκεί που γίνεται εμφανής η αναποτελεσματικότητα αυτής της διαδικασίας είναι όταν υπάρχει συνεχής ροή δεδομένων, οπότε η διαδικασία ανανέωσης αυτών πρέπει να επαναλαμβάνεται καθημερινά. Σε αυτές τις περιπτώσεις φαίνεται η χρησιμότητα του API, αφού μας παρέχει τις νέες τιμές με μικρό σχετικά κόπο. Παράλληλα, η χρήση του API διευκολύνει την ένταξη νέων δεδομένων, συνεπώς αν φτιάχνουμε ένα προβλεπτικό μοντέλο η ακρίβειά του θα παραμένει σε ένα ικανοποιητικό επίπεδο. Τέλος, σημαντική είναι και η αξιοποίησή του σε Shiny Apps ή γενικότερα διαδικτυακές εφαρμογές (web apps), προκειμένου να αυτοματοποιείται η ανάλυση δεδομένων και οι πληροφορίες να είναι αξιόπιστες για τον επισκέπτη της εφαρμογής.

Γενικά υπάρχουν πάρα πολλά API από τα οποία μπορούμε να αντλήσουμε σημαντικές πληροφορίες. Για περισσότερες λεπτομέρειες σχετικά με τη διαθεσιμότητα δωρεάν API μπορείτε να δείτε μία σχετική λίστα αυτών. Σε αυτό το άρθρο θα ασχοληθούμε με τα ανοικτά δεδομένα της χώρας μας, της Ελλάδας, που διατίθενται μέσω του data.gov.gr.

Αίτηση για API Key

Το API της χώρας μας (όπως και τα περισσότερα API) απαιτεί να κάνουμε εγγραφή στην πλατφόρμα. Υποβάλλουμε αίτηση στην αντίστοιχη σελίδα και συμπληρώνουμε τα στοιχεία μας σε όλα τα πεδία της φόρμας όπως αυτή φαίνεται παρακάτω:

Προεπισκόπηση σελίδας αίτησης για πρόσβαση στο API

Στη συνέχεια θα πρέπει να κοιτάξετε το e-mail σας, καθώς θα σας αποσταλεί ένα μήνυμα με ένα Token, με το οποίο θα έχετε πρόσβαση στο API. Φροντίστε να ελέγξετε και τον φάκελο της Ανεπιθύμητης Αλληλογραφίας (spam). Παρεμπιπτόντως, σε περίπτωση που χάσετε το token ή έχετε διαγράψει το μήνυμα, μπορείτε να κάνετε καινούργια αίτηση, ακόμα και με την ίδια διεύθυνση ταχυδρομείου, και το σύστημα θα σας το στείλει εκ νέου.

Χρήση API

Αφού λάβουμε το Token, θα πρέπει με κάποιο τρόπο να αντλήσουμε τα δεδομένα. Στην συγκεκριμένη πλατφόρμα υπάρχουν δύο τρόποι.

  • Χρήση API από την ιστοσελίδα
  • Χρήση API με την R

Ο ένας τρόπος (και μάλλον ο λιγότερο αποδοτικός) είναι να αιτηθούμε τα δεδομένα απευθείας από την ιστοσελίδα data.gov.gr. Αυτό είναι από τη μία εξαιρετικά απλό, αλλά από την άλλη κατεβάζουμε μία σταθερή έκδοση των δεδομένων και συνεπώς αν θελήσουμε να τα ανανεώσουμε με τα πιο πρόσφατα στοιχεία θα πρέπει πάλι να τα κατεβάσουμε. Παρακάτω, λοιπόν, θα αναλύσουμε ένα παράδειγμα πραγματικής χρήσης του API με την R. Αξίζει να σημειωθεί ότι η ίδια η πλατφόρμα έμμεσα ενθαρρύνει αυτή τη χρήση μιας και δίνει παραδείγματα με άλλες δημοφιλείς γλώσσες προγραμματισμού (Python & JavaScript).

Παράδειγμα χρήσης

Πριν ολοκληρωθεί αυτό το άρθρο, έκρινα ως σημαντική την παρουσίαση ενός παραδείγματος. Τη στιγμή που γράφεται αυτό το άρθρο, υπάρχουν συνολικά 49 βάσεις δεδομένων από τις οποίες μπορούμε να επιλέξουμε. Προκειμένου να αναδείξουμε την ωφέλεια του API θα διαλέξω κάποιο που ανανεώνεται σε αρκετά συχνή βάση. Ένα τέτοιο σύνολο δεδομένων είναι αυτό για τους επιβάτες που ταξιδεύουν με πλοία.

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

base = "https://data.gov.gr/api/v1/query/sailing_traffic"

Έπειτα, όπως τονίζει η τεκμηρίωση (documentation) της σελίδας, θα πρέπει να ορίσουμε ένα εύρος ημερομηνιών που μας ενδιαφέρει Αξίζει να σημειωθεί ότι δεν μπορείτε να πάρετε μεγάλο εύρος με μία μόνο κλήση του API. Τα δεδομένα της επιβατικής κίνησης των πλοίων ξεκινάνε από το 2017 μέχρι και σήμερα (2023). Ας υποθέσουμε ότι δεν μας πειράζει αυτό και ότι θέλουμε τα δεδομένα από τις 4 πρώτες μέρες του Ιουλίου του 2023.

date_from = "2023-07-01"
date_to = "2023-07-04"

API_URL = paste0(base, "?date_from=", date_from, "&", "date_to=", date_to)

call = httr::GET(url = API_URL,
    add_headers(`Authorization` = paste0('Token token_id')
    )
)

Όπου στο σημείο που αναφέρεται το token_id θα πρέπει να αντικατασταθεί με το token που σας έστειλε το data.gov.gr. Αφού λοιπόν αιτηθούμε τα δεδομένα μέσω της GET και κάνουμε λίγο υπομονή βλέπουμε ότι λαμβάνω μία λίστα με διάφορες πληροφορίες. Εμάς μας ενδιαφέρουν τα δεδομένα, οπότε κοιτάμε στην κατηγορία content της λίστας, ωστόσο παρατηρούμε μία μη αναγνώσιμη μορφή των στοιχείων μιας και είναι σε δεκαεξαδική μορφή.

data = base::rawToChar(call$content)

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

#data = jsonlite::fromJSON(data, flatten = T)

Και τέλος, με τη βοήθεια του πακέτου jsonlite λαμβάνουμε ένα data.frame με όνομα data που περιέχει όλους τους προορισμούς, τον αριθμό επιβατών, αυτοκινήτων για τη κάθε ημέρα που ζητήσαμε.

Ευχαριστίες

Φωτογραφία από Christopher Kuszajewski από το Pixabay