Aici vom încpe să acoperim câteva tehnici comune pentru tratarea datelor JSON. Cel mai adesea, ceea ce faci este să scrii cod Python care parcurge sistematic datele, extragând chirurgical părțile de care ai nevoie pentru analiză. Aceste părți pot fi apoi asamblate în matrice NumPy, Pandas DataFrames sau orice altceva și sondate așa cum sunteți obișnuit.
Să revenim la exemplul de cursuri universitare anterior, afișat aici:
[{'creds':3, 'instructor':'Davies', 'meetings':[{'location':{'bldg':'Farmer', 'room':'B6'}, 'time':{'day':'TR', 'time':'12:30pm'}}], 'num':219, 'prefix':'DATA', 'roster':[{'email':'lgaga@umw.edu', 'first':'Lady', 'last':'Gaga'}, {'email':'trock@umw.edu', 'first':'The', 'last':'Rock'}, ..., ...] }, ... ]
Primul fapt brut de înțeles este că, indiferent de complexitățile sale interne, toată chestia asta este o listă de dicționare. Nu o listă de liste, sau un dicționar de dicționare sau un dicționar de liste, ci: o listă de dicționare. De unde știm asta? Deoarece primul caracter este o paranteză dreaptă („[„), iar al doilea este o acoladă („{„).
Imprimarea unei liste de clasă
Ca prim exemplu de lucru cu acest set de date, să presupunem că am vrut să tipărim pur și simplu numele complete ale tuturor studenților din cel de-al 17-lea curs din această listă. Mai întâi, să încărcăm fișierul .json în Python:
import json with open("courses.json") as f: c = json.load(f)
Aici am numit-o structura cea mai exterioară „c”, care înseamnă „courses”, dar este scurtată, deoarece o vom folosi mult. (Rețineți că c este o listă – o listă foarte lungă și complicată, dar totuși o listă.)
Și apoi trecem la o gândire profundă. Imprimarea tuturor numelor necesită în mod clar o buclă. Dar prin ce anume vrem să trecem în buclă? Răspunsul, după examinarea structurii de mai sus, este: trebuie să găsim valoarea cheii „roster” a celui de-al 17-lea dicționar din lista c. Aceasta, la rândul său, va fi o listă și va conține dicționare, câte unul pentru fiecare elev. (Faceți o pauză înainte de a continua, uitați-vă la conținutul JSON de mai sus și vedeți dacă sunteți de acord cu fiecare cuvânt din acest paragraf.)
Deci, bucla pe care o dorim este cam așa:
for student in c[16]['roster']: print("{} {} is in {} {}.".format(student['first'], student['last'], c[16]['prefix'], c[16]['num']))
Succes. (Nu vă faceți griji dacă nu obțineți această buclă corect de prima dată; de multe ori este nevoie de unele ajustări și perfecționări înainte de a funcționa.) Observați cum funcționează acest cod:
- Săpăm destul de adânc în c (care este o listă), găsim al 17-lea element (la indexul 16, desigur), care este un dicționar. Apoi, obținem valoarea cheii „listă” a acelui dicționar. După cum puteți vedea mai sus, valoarea cheii respective este o listă.
- De fiecare dată când parcurge bucla, variabila „student” este setată egal cu următorul element din această listă. Și acel element, după cum puteți vedea mai sus, este un dicționar. Dicționarul are două articole de interes: „first” și „last”. Apoi imprimăm valorile acestor două chei, plus prefixul și numărul cursului.(Rețineți că prefixul și numărul cursului provin direct din dicționarul c[16] însuși, în timp ce numele și numele de familie provin din cheile elementelor din lista interioară „roster” pe care o repetăm.)
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 2: Introduction to Data Science, v. 1.1. Copyright © 2020 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2021 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 2
Lasă un răspuns