13 KiB
Construiește un model de regresie folosind Scikit-learn: pregătirea și vizualizarea datelor
Infografic realizat de Dasani Madipalli
Chestionar înainte de lecție
Această lecție este disponibilă și în R!
Introducere
Acum că ai configurat instrumentele necesare pentru a începe să construiești modele de învățare automată cu Scikit-learn, ești pregătit să începi să pui întrebări datelor tale. Pe măsură ce lucrezi cu date și aplici soluții de ML, este foarte important să înțelegi cum să pui întrebarea potrivită pentru a valorifica pe deplin potențialul setului tău de date.
În această lecție vei învăța:
- Cum să pregătești datele pentru construirea modelului.
- Cum să folosești Matplotlib pentru vizualizarea datelor.
Punerea întrebării potrivite datelor tale
Întrebarea la care ai nevoie de răspuns va determina ce tip de algoritmi ML vei utiliza. Iar calitatea răspunsului pe care îl primești va depinde în mare măsură de natura datelor tale.
Aruncă o privire la datele furnizate pentru această lecție. Poți deschide acest fișier .csv în VS Code. O privire rapidă arată imediat că există spații goale și un amestec de date text și numerice. Există, de asemenea, o coloană ciudată numită 'Package', unde datele sunt un amestec între 'sacks', 'bins' și alte valori. Datele, de fapt, sunt destul de dezordonate.
🎥 Fă clic pe imaginea de mai sus pentru un scurt videoclip despre pregătirea datelor pentru această lecție.
De fapt, nu este foarte comun să primești un set de date complet pregătit pentru a crea un model ML direct. În această lecție, vei învăța cum să pregătești un set de date brut folosind biblioteci standard Python. De asemenea, vei învăța diverse tehnici pentru vizualizarea datelor.
Studiu de caz: 'piața dovlecilor'
În acest folder vei găsi un fișier .csv în folderul rădăcină data
numit US-pumpkins.csv, care include 1757 linii de date despre piața dovlecilor, grupate pe orașe. Acestea sunt date brute extrase din Specialty Crops Terminal Markets Standard Reports distribuite de Departamentul Agriculturii al Statelor Unite.
Pregătirea datelor
Aceste date sunt în domeniul public. Ele pot fi descărcate în mai multe fișiere separate, pe orașe, de pe site-ul USDA. Pentru a evita prea multe fișiere separate, am concatenat toate datele pe orașe într-un singur fișier, astfel încât am pregătit deja puțin datele. Acum, să aruncăm o privire mai atentă asupra datelor.
Datele despre dovleci - concluzii inițiale
Ce observi despre aceste date? Ai văzut deja că există un amestec de text, numere, spații goale și valori ciudate pe care trebuie să le înțelegi.
Ce întrebare poți pune acestor date, folosind o tehnică de regresie? Ce zici de "Prezice prețul unui dovleac de vânzare într-o anumită lună"? Privind din nou datele, există câteva modificări pe care trebuie să le faci pentru a crea structura de date necesară pentru această sarcină.
Exercițiu - analizează datele despre dovleci
Să folosim Pandas, (numele vine de la Python Data Analysis
) un instrument foarte util pentru modelarea datelor, pentru a analiza și pregăti aceste date despre dovleci.
Mai întâi, verifică datele lipsă
Mai întâi va trebui să iei măsuri pentru a verifica datele lipsă:
- Convertește datele în format de lună (acestea sunt date din SUA, deci formatul este
MM/DD/YYYY
). - Extrage luna într-o coloană nouă.
Deschide fișierul notebook.ipynb în Visual Studio Code și importă foaia de calcul într-un nou dataframe Pandas.
-
Folosește funcția
head()
pentru a vizualiza primele cinci rânduri.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ Ce funcție ai folosi pentru a vizualiza ultimele cinci rânduri?
-
Verifică dacă există date lipsă în dataframe-ul curent:
pumpkins.isnull().sum()
Există date lipsă, dar poate că nu vor conta pentru sarcina de față.
-
Pentru a face dataframe-ul mai ușor de utilizat, selectează doar coloanele de care ai nevoie, folosind funcția
loc
, care extrage din dataframe-ul original un grup de rânduri (transmise ca prim parametru) și coloane (transmise ca al doilea parametru). Expresia:
în cazul de mai jos înseamnă "toate rândurile".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
În al doilea rând, determină prețul mediu al dovlecilor
Gândește-te cum să determini prețul mediu al unui dovleac într-o anumită lună. Ce coloane ai alege pentru această sarcină? Indiciu: vei avea nevoie de 3 coloane.
Soluție: ia media coloanelor Low Price
și High Price
pentru a popula noua coloană Price și convertește coloana Date astfel încât să afișeze doar luna. Din fericire, conform verificării de mai sus, nu există date lipsă pentru date sau prețuri.
-
Pentru a calcula media, adaugă următorul cod:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Simte-te liber să afișezi orice date dorești să verifici folosind
print(month)
. -
Acum, copiază datele convertite într-un nou dataframe Pandas:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
Afișarea dataframe-ului va arăta un set de date curat și ordonat pe care poți construi noul model de regresie.
Dar stai! E ceva ciudat aici
Dacă te uiți la coloana Package
, dovlecii sunt vânduți în multe configurații diferite. Unii sunt vânduți în măsuri de '1 1/9 bushel', alții în măsuri de '1/2 bushel', unii per dovleac, alții per kilogram, și unii în cutii mari cu lățimi variabile.
Dovlecii par foarte greu de cântărit în mod consistent
Analizând datele originale, este interesant că orice are Unit of Sale
egal cu 'EACH' sau 'PER BIN' are, de asemenea, tipul Package
per inch, per bin sau 'each'. Dovlecii par foarte greu de cântărit în mod consistent, așa că să-i filtrăm selectând doar dovlecii cu șirul 'bushel' în coloana Package
.
-
Adaugă un filtru în partea de sus a fișierului, sub importul inițial .csv:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Dacă afișezi datele acum, poți vedea că obții doar cele aproximativ 415 rânduri de date care conțin dovleci la bushel.
Dar stai! Mai e ceva de făcut
Ai observat că cantitatea de bushel variază pe rând? Trebuie să normalizezi prețurile astfel încât să afișezi prețurile per bushel, așa că fă niște calcule pentru a le standardiza.
-
Adaugă aceste linii după blocul care creează dataframe-ul new_pumpkins:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ Conform The Spruce Eats, greutatea unui bushel depinde de tipul de produs, deoarece este o măsurare a volumului. "Un bushel de roșii, de exemplu, ar trebui să cântărească 56 de livre... Frunzele și verdețurile ocupă mai mult spațiu cu mai puțină greutate, astfel încât un bushel de spanac cântărește doar 20 de livre." Este destul de complicat! Să nu ne deranjăm cu conversia bushel-livre și să stabilim prețul per bushel. Tot acest studiu despre bushel-uri de dovleci, însă, arată cât de important este să înțelegi natura datelor tale!
Acum, poți analiza prețurile per unitate pe baza măsurării bushel-ului. Dacă afișezi datele încă o dată, poți vedea cum sunt standardizate.
✅ Ai observat că dovlecii vânduți la jumătate de bushel sunt foarte scumpi? Poți să-ți dai seama de ce? Indiciu: dovlecii mici sunt mult mai scumpi decât cei mari, probabil pentru că sunt mult mai mulți per bushel, având în vedere spațiul neutilizat ocupat de un dovleac mare pentru plăcintă.
Strategii de vizualizare
O parte din rolul unui specialist în date este să demonstreze calitatea și natura datelor cu care lucrează. Pentru a face acest lucru, ei creează adesea vizualizări interesante, cum ar fi diagrame, grafice și tabele, care arată diferite aspecte ale datelor. În acest fel, pot arăta vizual relații și lacune care altfel ar fi greu de descoperit.
🎥 Fă clic pe imaginea de mai sus pentru un scurt videoclip despre vizualizarea datelor pentru această lecție.
Vizualizările pot ajuta, de asemenea, la determinarea tehnicii de învățare automată cea mai potrivită pentru date. Un scatterplot care pare să urmeze o linie, de exemplu, indică faptul că datele sunt un candidat bun pentru un exercițiu de regresie liniară.
O bibliotecă de vizualizare a datelor care funcționează bine în notebook-urile Jupyter este Matplotlib (pe care ai văzut-o și în lecția anterioară).
Obține mai multă experiență cu vizualizarea datelor în aceste tutoriale.
Exercițiu - experimentează cu Matplotlib
Încearcă să creezi câteva diagrame de bază pentru a afișa noul dataframe pe care tocmai l-ai creat. Ce ar arăta o diagramă liniară de bază?
-
Importă Matplotlib în partea de sus a fișierului, sub importul Pandas:
import matplotlib.pyplot as plt
-
Rulează din nou întregul notebook pentru a-l actualiza.
-
În partea de jos a notebook-ului, adaugă o celulă pentru a afișa datele sub formă de boxplot:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Este aceasta o diagramă utilă? Te surprinde ceva la ea?
Nu este foarte utilă, deoarece tot ce face este să afișeze datele tale ca o răspândire de puncte într-o lună dată.
Fă-o utilă
Pentru a obține diagrame care să afișeze date utile, de obicei trebuie să grupezi datele cumva. Să încercăm să creăm o diagramă în care axa y să afișeze lunile, iar datele să demonstreze distribuția datelor.
-
Adaugă o celulă pentru a crea o diagramă de bare grupată:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
Aceasta este o vizualizare a datelor mai utilă! Pare să indice că cel mai mare preț pentru dovleci apare în septembrie și octombrie. Se potrivește aceasta cu așteptările tale? De ce sau de ce nu?
🚀Provocare
Explorează diferitele tipuri de vizualizări pe care le oferă Matplotlib. Care tipuri sunt cele mai potrivite pentru problemele de regresie?
Chestionar după lecție
Recapitulare și studiu individual
Aruncă o privire la numeroasele moduri de a vizualiza datele. Fă o listă cu diversele biblioteci disponibile și notează care sunt cele mai bune pentru anumite tipuri de sarcini, de exemplu vizualizări 2D vs. vizualizări 3D. Ce descoperi?
Temă
Declinare de responsabilitate:
Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.