Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο - KDnuggets

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο – KDnuggets

Κόμβος πηγής: 3093512

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα
 

Βουτώντας στον κόσμο της επιστήμης δεδομένων και της μηχανικής μάθησης, μία από τις θεμελιώδεις δεξιότητες που θα συναντήσετε είναι η τέχνη της ανάγνωσης δεδομένων. Εάν έχετε ήδη κάποια εμπειρία με αυτό, πιθανότατα είστε εξοικειωμένοι με το JSON (JavaScript Object Notation) – μια δημοφιλής μορφή τόσο για την αποθήκευση όσο και για την ανταλλαγή δεδομένων. 

Σκεφτείτε πώς οι βάσεις δεδομένων NoSQL όπως η MongoDB αγαπούν να αποθηκεύουν δεδομένα σε JSON ή πώς τα API REST συχνά αποκρίνονται με την ίδια μορφή.

Ωστόσο, το JSON, αν και είναι ιδανικό για αποθήκευση και ανταλλαγή, δεν είναι αρκετά έτοιμο για εις βάθος ανάλυση στην ακατέργαστη μορφή του. Εδώ είναι που το μετατρέπουμε σε κάτι πιο φιλικό αναλυτικά – σε μορφή πίνακα. 

Έτσι, είτε ασχολείστε με ένα μεμονωμένο αντικείμενο JSON είτε με μια ευχάριστη συστοιχία από αυτά, με τους όρους της Python, ουσιαστικά χειρίζεστε ένα dict ή μια λίστα εντολών. 

Ας εξερευνήσουμε μαζί πώς εκτυλίσσεται αυτός ο μετασχηματισμός, καθιστώντας τα δεδομένα μας ώριμα για ανάλυση ????

Σήμερα θα εξηγήσω μια μαγική εντολή που μας επιτρέπει να αναλύουμε εύκολα οποιοδήποτε JSON σε μορφή πίνακα σε δευτερόλεπτα. 

Και είναι… π.δ.json_normalize()

Ας δούμε λοιπόν πώς λειτουργεί με διαφορετικούς τύπους JSON. 

Ο πρώτος τύπος JSON με τον οποίο μπορούμε να δουλέψουμε είναι JSON μονού επιπέδου με λίγα κλειδιά και τιμές. Ορίζουμε τα πρώτα μας απλά JSON ως εξής:

Κωδικός ανά συγγραφέα

Ας προσομοιώσουμε λοιπόν την ανάγκη εργασίας με αυτά τα JSON. Όλοι γνωρίζουμε ότι δεν υπάρχουν πολλά να κάνουμε στη μορφή JSON. Πρέπει να μετατρέψουμε αυτά τα JSON σε κάποια αναγνώσιμη και τροποποιήσιμη μορφή… που σημαίνει Pandas DataFrames!

1.1 Αντιμετώπιση απλών δομών JSON

Πρώτα, πρέπει να εισαγάγουμε τη βιβλιοθήκη pandas και στη συνέχεια μπορούμε να χρησιμοποιήσουμε την εντολή pd.json_normalize(), ως εξής:

import pandas as pd
pd.json_normalize(json_string)

 

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

 

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα
 

Εύκολο… σωστά; 

Το επόμενο φυσικό ερώτημα είναι τι συμβαίνει όταν λείπουν κάποιες από τις τιμές. 

 1.2 Αντιμετώπιση μηδενικών τιμών

Φανταστείτε ότι ορισμένες από τις αξίες δεν είναι ενημερωμένες, όπως για παράδειγμα, λείπει το αρχείο εισοδήματος για τον David. Όταν μετατρέπουμε το JSON μας σε ένα απλό πλαίσιο δεδομένων pandas, η αντίστοιχη τιμή θα εμφανίζεται ως NaN. 

 

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα 
 
Και τι γίνεται αν θέλω να πάρω μόνο μερικά από τα πεδία;

 1.3 Επιλογή μόνο των στηλών που σας ενδιαφέρουν

Σε περίπτωση που θέλουμε απλώς να μετατρέψουμε ορισμένα συγκεκριμένα πεδία σε ένα πίνακα pandas DataFrame, η εντολή json_normalize() δεν μας επιτρέπει να επιλέξουμε ποια πεδία θα μετατρέψουμε. 

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

# Fields to include
fields = ['name', 'city']

# Filter the JSON data
filtered_json_list = [{key: value for key, value in item.items() if key in fields} for item in simple_json_list]

pd.json_normalize(filtered_json_list)

 

Λοιπόν, ας προχωρήσουμε σε κάποια πιο προηγμένη δομή JSON. 

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

Αν λοιπόν κανονικοποιήσουμε τα παρακάτω JSON.

Κωδικός ανά συγγραφέα

Θα λάβαμε τον παρακάτω πίνακα με 3 στήλες κάτω από τις δεξιότητες πεδίου: 

  • δεξιότητες.python
  • δεξιότητες.SQL
  • δεξιότητες.GCP

και 4 στήλες κάτω από τους ρόλους πεδίου 

  • ρόλοι.διαχειριστής έργου
  • ρόλοι.μηχανικός δεδομένων
  • ρόλους.data scientist
  • ρόλοι.αναλυτής δεδομένων

 

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα 
 

Ωστόσο, φανταστείτε ότι θέλουμε απλώς να μεταμορφώσουμε το κορυφαίο μας επίπεδο. Μπορούμε να το κάνουμε ορίζοντας συγκεκριμένα την παράμετρο max_level σε 0 (το max_level που θέλουμε να επεκτείνουμε). 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

Οι τιμές σε εκκρεμότητα θα διατηρηθούν στα JSON στο DataFrame των pandas μας.

 

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα 

Η τελευταία περίπτωση που μπορούμε να βρούμε είναι να έχουμε μια ένθετη λίστα σε ένα πεδίο JSON. Οπότε πρώτα ορίζουμε τα JSON μας προς χρήση. 

Κωδικός ανά συγγραφέα

Μπορούμε να διαχειριστούμε αποτελεσματικά αυτά τα δεδομένα χρησιμοποιώντας Pandas στην Python. Η συνάρτηση pd.json_normalize() είναι ιδιαίτερα χρήσιμη σε αυτό το πλαίσιο. Μπορεί να ισοπεδώσει τα δεδομένα JSON, συμπεριλαμβανομένης της ένθετης λίστας, σε μια δομημένη μορφή κατάλληλη για ανάλυση. Όταν αυτή η συνάρτηση εφαρμόζεται στα δεδομένα JSON μας, παράγει έναν κανονικοποιημένο πίνακα που ενσωματώνει την ένθετη λίστα ως μέρος των πεδίων της.

Επιπλέον, το Pandas προσφέρει τη δυνατότητα περαιτέρω βελτίωσης αυτής της διαδικασίας. Χρησιμοποιώντας την παράμετρο record_path στο pd.json_normalize(), μπορούμε να κατευθύνουμε τη συνάρτηση για να κανονικοποιήσει συγκεκριμένα την ένθετη λίστα. 

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

 

Μετατροπή JSON σε Pandas DataFrames: Ανάλυση τους με τον σωστό τρόπο
Εικόνα από συγγραφέα

Συνοπτικά, ο μετασχηματισμός των δεδομένων JSON σε αρχεία CSV χρησιμοποιώντας τη βιβλιοθήκη Pandas της Python είναι εύκολη και αποτελεσματική.

Το JSON εξακολουθεί να είναι η πιο κοινή μορφή στη σύγχρονη αποθήκευση και ανταλλαγή δεδομένων, ιδίως στις βάσεις δεδομένων NoSQL και στα API REST. Ωστόσο, παρουσιάζει ορισμένες σημαντικές αναλυτικές προκλήσεις κατά την επεξεργασία δεδομένων στην ακατέργαστη μορφή τους. 

Ο κεντρικός ρόλος του pd.json_normalize() των Pandas αναδεικνύεται ως ένας εξαιρετικός τρόπος χειρισμού τέτοιων μορφών και μετατροπής των δεδομένων μας σε pandas DataFrame. 

Ελπίζω ότι αυτός ο οδηγός ήταν χρήσιμος και την επόμενη φορά που θα ασχοληθείτε με το JSON, μπορείτε να το κάνετε με πιο αποτελεσματικό τρόπο. 

Μπορείτε να πάτε να ελέγξετε το αντίστοιχο σημειωματάριο Jupyter στο ακολουθώντας το αποθετήριο GitHub.
 
 

Ζοζέπ Φερέρ είναι μηχανικός ανάλυσης από τη Βαρκελώνη. Αποφοίτησε από τη φυσική μηχανική και αυτή τη στιγμή εργάζεται στον τομέα της Επιστήμης Δεδομένων που εφαρμόζεται στην ανθρώπινη κινητικότητα. Είναι δημιουργός περιεχομένου μερικής απασχόλησης που επικεντρώνεται στην επιστήμη και την τεχνολογία δεδομένων. Μπορείτε να επικοινωνήσετε μαζί του στο LinkedIn, Twitter or Μέτριας Δυσκολίας.

Σφραγίδα ώρας:

Περισσότερα από KDnuggets