Az adatelemzés első fele a tisztítás
A modellezés előtt az adatot be kell tölteni, meg kell tisztítani és szűrni kell. A gyakorlatban ez a munka gyakran több időt vesz igénybe, mint maga a modellezés. Ebben a leckében egy tipikus utat járunk be, betöltés fájlból, hiányzó értékek kezelése, majd a releváns sorok és oszlopok kiválasztása. A cél egy tiszta, megbízható táblázat.
Betöltés fájlból
A táblázatos adat leggyakoribb formátuma a CSV, vagyis a vesszővel elválasztott értékek fájlja. A pandas a read_csv függvénnyel tölti be egy DataFrame-be, a to_csv pedig visszaírja fájlba. A betöltés után szinte mindig a head és a describe hívással nézzük meg, mi érkezett.
import pandas as pd
df = pd.read_csv("rendelesek.csv") # betoltes DataFrame-be
print(df.head()) # elso nehany sor
df.to_csv("tiszta.csv", index=False) # visszairas fajlba
A read_csv fájlból tölt DataFrame-be, a to_csv pedig visszaír. Az index=False elhagyja a sorindexet a mentésből.
Hiányzó értékek
A valós adatban gyakran vannak hiányzó értékek, amelyeket a pandas NaN néven jelöl. Ezeket az isna függvénnyel lehet felderíteni. Két alapstratégia van a kezelésükre. A dropna eldobja a hiányzó értéket tartalmazó sorokat, a fillna pedig kitölti őket egy megadott értékkel. Hogy melyik a helyes, az az adattól és a feladattól függ.
print(df.isna().sum()) # oszloponkent hany hianyzo ertek van
tiszta = df.dropna(how="any") # eldobja a hianyt tartalmazo sorokat
kitoltott = df.fillna(value=0) # a hianyt nullaval potolja
Az isna felderíti a hiányt, a dropna eldobja az érintett sorokat, a fillna pedig kitölti egy értékkel.
dropna, a sor eldobása
- Akkor jó, ha kevés a hiány
- Nem torzítja az értékeket
- Adatot veszítünk vele
fillna, a hiány kitöltése
- Megtartja az összes sort
- Kézben tartod a pótlás értékét
- Rossz érték torzíthat, óvatosan
Sorok szűrése feltétellel
A szűrés a NumPy logikai indexeléséhez hasonlóan működik. Egy feltétel egy logikai Series-t ad, és ezzel választjuk ki a megfelelő sorokat. Így egyetlen kifejezéssel megkapjuk például az adott értéknél nagyobb árú rendeléseket. Több feltételt zárójelekkel és a logikai operátorokkal kombinálunk.
dragabb = df[df["ar"] > 2000] # csak a 2000-nel dragabb sorok
raktaron_dragabb = df[(df["ar"] > 2000) & (df["raktaron"] == True)]
A feltétel logikai Series-t ad, amivel a sorokat szűrjük. Több feltételt zárójelekkel és az és operátorral kötünk össze.
Kiválasztás loc és iloc
A pandas két fő módot kínál sorok és oszlopok kiválasztására. A loc címke szerint választ, tehát sorindex és oszlopnév alapján. Az iloc pozíció szerint, vagyis a nullától induló sorszám alapján. A kettő különbsége fontos, mert a címke és a pozíció nem mindig esik egybe. Ez a két eszköz a pandas kiválasztás gerince.
# cimke szerint: sorindex es oszlopnevek
print(df.loc[0, "termek"]) # az elso sor termek erteke
print(df.loc[:, ["termek", "ar"]]) # minden sor, ket oszlop
# pozicio szerint: sorszamok
print(df.iloc[0]) # elso sor
print(df.iloc[0:3, 0:2]) # elso harom sor, elso ket oszlop
A loc címke szerint választ, az iloc pozíció szerint. A kettő nem cserélhető fel, mert a címke eltérhet a sorszámtól.
Három lépés a tiszta adathoz. Betöltés a read_csv hívással, a hiány kezelése a dropna vagy a fillna eszközzel, majd szűrés feltétellel és kiválasztás loc vagy iloc segítségével. Innen az adat készen áll az ábrázolásra és a modellezésre.
Workshop
AI Transformation Day
Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.
Érdekel a program →