19 KiB
Regressziós modell építése Scikit-learn segítségével: adatok előkészítése és vizualizálása
Infografika készítője: Dasani Madipalli
Előadás előtti kvíz
Ez a lecke elérhető R-ben is!
Bevezetés
Most, hogy készen állsz a szükséges eszközökkel a gépi tanulási modellek építésének elkezdéséhez Scikit-learn segítségével, ideje elkezdeni kérdéseket feltenni az adataidnak. Amint dolgozol az adatokkal és alkalmazod az ML megoldásokat, nagyon fontos megérteni, hogyan kell megfelelő kérdést feltenni az adatbázisod potenciáljának felszabadításához.
Ebben a leckében megtanulod:
- Hogyan készítsd elő az adataidat a modellépítéshez.
- Hogyan használd a Matplotlib-et az adatok vizualizációjához.
- Hogyan használd a Seaborn-t kifejezőbb adatvizualizációhoz.
A helyes kérdés feltevése az adataiddal kapcsolatban
A megválaszolandó kérdés meghatározza, hogy milyen típusú ML algoritmusokat fogsz használni. És a válasz minősége jelentősen függ az adatok természetétől.
Nézd meg a leckéhez adott adatokat. Megnyithatod ezt a .csv fájlt VS Code-ban. Egy gyors átfutás azonnal mutatja, hogy vannak üres mezők, és vegyesen szerepelnek sztring és numerikus adatok. Van egy furcsa oszlop is 'Package' néven, ahol az adatok között 'zsákok', 'ládák' és más értékek is szerepelnek. Az adatok valójában eléggé rendezetlenek.
🎥 Kattints a fenti képre egy rövid videóért, amely végigvezet az adatok előkészítésén ehhez a leckéhez.
Valójában nem gyakori, hogy egy teljesen kész, azonnal használható adatbázist kapjunk egy ML modell létrehozásához. Ebben a leckében megtanulod, hogyan készíts elő egy nyers adatbázist szabványos Python könyvtárak használatával. Megtanulsz különféle technikákat is az adatok vizualizálására.
Esettanulmány: 'a tökpiac'
Ebben a mappában található egy .csv fájl a gyökér data mappában, amelynek neve US-pumpkins.csv, és tartalmaz 1757 sort a tökpiac adatairól, városonként csoportosítva. Ez nyers adat az Egyesült Államok Mezőgazdasági Minisztériuma által közzétett Specialty Crops Terminal Markets Standard Reports adatforrásból.
Az adatok előkészítése
Ezek az adatok közkinccsé váltak. Sok különálló fájlban tölthetők le, városonként az USDA weboldaláról. Azért, hogy ne legyen túl sok külön fájl, az összes városi adatot egy táblázatba fűztük össze, tehát már részben előkészítettük az adatokat. Ezután nézzük meg közelebbről az adatokat.
A tökadatok – első következtetések
Mit veszel észre ezekről az adatokról? Már láttad, hogy vegyesen vannak benne szöveges értékek, számok, üres cellák és furcsa értékek, amelyeket értelmezni kell.
Milyen kérdést tehetnél fel ezeknek az adatoknak regressziós módszerrel? Például: "Milyen az adott hónapra vonatkozó tök ára?". Ha újra megnézed az adatokat, van néhány módosítás, amelyet el kell végezni, hogy létrehozd a feladathoz szükséges adatszerkezetet.
Gyakorlat – elemezd a tök adatokat
Használjuk a Pandas-t (a neve a Python Data Analysis szavakból ered), amely nagyon hasznos eszköz az adatok alakítására, hogy elemezzük és előkészítsük ezt a tök adatbázist.
Először, ellenőrizd a hiányzó dátumokat
Először meg kell tenned a hiányzó dátumok ellenőrzésének lépéseit:
- Alakítsd át a dátumokat hónap formátumra (az adatok amerikai dátumformátumúak, vagyis
HH/NN/ÉÉÉÉ). - Válogasd ki a hónapokat egy új oszlopba.
Nyisd meg a notebook.ipynb fájlt a Visual Studio Code-ban, és importáld az adatokat egy új Pandas dataframe-be.
-
Használd a
head()függvényt az első öt sor megtekintéséhez.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()✅ Milyen függvényt használnál az utolsó öt sor megtekintéséhez?
-
Ellenőrizd, hogy van-e hiányzó adat a jelenlegi dataframe-ben:
pumpkins.isnull().sum()Van hiányzó adat, de lehet, hogy nem számít a feladat szempontjából.
-
Hogy könnyebb legyen a munkád a dataframe-vel, válaszd ki csak azokat az oszlopokat, amikre szükséged van, a
locfüggvény segítségével, amely az eredeti dataframe-ből kiválaszt egy csoport sort (az első paraméterként átadott) és oszlopot (a második paraméter). Az alábbi:kifejezés minden sort jelent.columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
Másodszor, határozd meg a tök átlagárát
Gondold át, hogyan lehet meghatározni a tök átlagárát adott hónapban. Milyen oszlopokat választanál ehhez? Tipp: 3 oszlopra lesz szükséged.
Megoldás: számítsd ki a Low Price és High Price oszlopok átlagát az új Price oszlop feltöltéséhez, és alakítsd a Date oszlopot úgy, hogy csak a hónapot mutassa. Szerencsére, az előbbi ellenőrzés szerint nincs hiányzó adat a dátumok vagy az árak esetében.
-
Az átlag kiszámításához add hozzá a következő kódot:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month✅ Nyugodtan használd a
print(month)parancsot, ha szeretnéd az adatokat ellenőrizni. -
Most másold át az átalakított adatot egy új Pandas dataframe-be:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})Ha kinyomtatod a dataframe-ed, egy tiszta, rendezett adatbázist fogsz látni, amely alapján építheted a regressziós modelledet.
De várj! Valami furcsa van itt
Ha megnézed a Package oszlopot, a tökök sokféle formációban vannak eladva. Egyeseket '1 1/9 bushel' mértékben árulják, másokat '1/2 bushel' egységekben, egyeseket darabonként, másokat fontonként, és vannak nagy dobozok is különféle szélességekkel.
A tökök súlyának következetes mérése elég nehéznek tűnik
Az eredeti adatokat vizsgálva érdekes, hogy ahol a Unit of Sale 'EACH' vagy 'PER BIN', ott a Package típus inch-ben, ládában vagy darabonként van megadva. Egyértelmű, hogy a tökök súlyának következetes mérése nehéz, ezért szűrjük az adatokat úgy, hogy csak azok a tökök legyenek benne, amelyek Package oszlopában szerepel a 'bushel'.
-
Adj hozzá egy szűrőt a fájl tetején, a kezdeti .csv import után:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]Ha most kinyomtatod az adatokat, láthatod, hogy csak körülbelül 415 sort kapsz, amelyek bushel-ben mért tököket tartalmaznak.
De várj még! Van még egy teendő
Észrevetted, hogy a bushel mértéke soronként változik? Normalizálnod kell az árakat, hogy bushelre vonatkozó árat mutassanak, ezért végezz néhány számítást az egységesítéshez.
-
Add hozzá ezeket a sorokat az új_pumpkins dataframe létrehozása utáni blokkhoz:
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)
✅ A The Spruce Eats szerint egy bushel súlya a termény típusától függ, mivel ez térfogati mértékegység. "Egy bushel paradicsom például 56 fontot kell, hogy nyomjon... A levelek és zöldek nagyobb helyet foglalnak el, kevesebb súly mellett, így a spenót bushel-je csak 20 font." Mindez elég bonyolult! Ne foglalkozzunk bushel-ről fontra való átváltással, az árazást tegyük bushel alapján. Mindenesetre ez a tök bushel-ek vizsgálata is rámutat arra, mennyire fontos megérteni az adataid természetét!
Most elemezheted az egységárakat a bushel mérték alapján. Ha még egyszer kiírod az adatokat, láthatod, hogyan szabványosítottuk őket.
✅ Észrevetted, hogy a fél bushel-ben árult tökök nagyon drágák? Meg tudod fejteni, miért? Tipp: a kicsi tökök sokkal drágábbak, valószínűleg azért, mert egy bushelben sokkal több van belőlük, szemben azzal, hogy egy nagy üreges sütőtök sok helyet foglal.
Vizualizációs stratégiák
Az adatkutatók szerepének része, hogy bemutassák a kezelt adatok minőségét és természetét. Ennek érdekében gyakran készítenek érdekes vizualizációkat, mint például diagramokat, grafikonokat vagy táblázatokat, amelyek különböző adat aspektusokat ábrázolnak. Ezzel vizuálisan mutathatnak be kapcsolatokat és hiányosságokat, amelyek egyébként nehezen lennének feltárhatók.
🎥 Kattints a fenti képre egy rövid videóért, amely az adatok vizualizálását mutatja be ehhez a leckéhez.
A vizualizációk segíthetnek meghatározni azt a gépi tanulási módszert is, amely a leginkább megfelelő az adatokhoz. Például egy pontfelhő, amely úgy tűnik, hogy egy egyenes vonalat követ, jelzi, hogy az adatok alkalmasak lineáris regressziós gyakorlatra.
Egy adatvizualizációs könyvtár, ami jól működik Jupyter notebookokban, a Matplotlib (amit az előző leckében is láthattál).
Szerezz több tapasztalatot adatvizualizációban ezeken az oktatóanyagokon keresztül.
Gyakorlat – kísérletezz a Matplotlib-pel
Próbálj meg néhány alap diagramot készíteni az újonnan létrehozott dataframe megjelenítésére. Mit mutatna egy egyszerű vonaldiagram?
-
Importáld a Matplotlib-et a fájl tetején, a Pandas import alatt:
import matplotlib.pyplot as plt -
Futtasd újra az egész notebookot a frissítéshez.
-
A notebook alján adj hozzá egy cellát, hogy dobozdiaagramot (boxplot) készíts az adatokból:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()Hasznos ez a diagram? Meglep valami benne?
Nem igazán hasznos, mivel mindössze azt mutatja meg, hogy az adatok pontjai egy adott hónapban hogyan oszlanak el.
Tedd hasznossá
Ahhoz, hogy a diagramok hasznos adatokat jelenítsenek meg, általában csoportosítanod kell az adatokat. Próbáljunk meg olyan diagramot készíteni, ahol az y tengely a hónapokat mutatja, az adat pedig a megoszlást szemlélteti.
-
Adj hozzá egy cellát, hogy csoportosított oszlopdiagramot hozz létre:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")Ez már egy sokkal hasznosabb adatvizualizáció! Úgy tűnik, hogy a legmagasabb tökár szeptemberben és októberben van. Találkozik ez az elvárásoddal? Miért igen vagy miért nem?
Gyakorlat – kísérletezz a Seaborn-nal
A Matplotlib hatékony, de sok kód kell a jól kidolgozott diagram elkészítéséhez. A Seaborn egy, a Matplotlib-re épülő könyvtár, amely statisztikai adatvizualizációra készült. Közvetlenül Pandas dataframe-ekkel dolgozik, vonzó alapstílusokat alkalmaz, és kevesebb kóddal lehet vele informatív diagramokat készíteni. Mivel a Seaborn Matplotlib objektumokat ad vissza, továbbra is használhatod mindazt, amit a Matplotlib-ről tudsz az eredmény finomhangolásához.
Ha nincs még telepítve a Seaborn, telepítsd a
pip install seabornparanccsal.
-
Importáld a Seaborn-t a notebook tetején, más importok alatt. Szokásosan
snsnéven importáljuk:import seaborn as sns
Pontdiagramok a kapcsolatok bemutatására
Az adatok előzetes feltárásának nagy része az összefüggések kereséséről szól a változók között. Egy pontdiagram a legjobb eszközök egyike erre: ha a pontok vonalat követnek, akkor a két változó korrelálhat, ami jó jel arra, hogy a lineáris regressziós modell működhet.
-
Készítsd újra a korábbi ár-hónap pontdiagramot, ezúttal a Seaborn
relplot()(relációs diagram) függvényével, amely közvetlenül a dataframe oszlopokkal működik:sns.relplot(x="Price", y="Month", data=new_pumpkins)Figyeld meg, hogyan adod át az oszlopneveket és a dataframe-et, a Seaborn pedig automatikusan kezeli az tengelycímkéket.
-
Átválthatsz vonaldiagramra azzal, hogy
kind="line"paramétert adsz. A Seaborn még egy árnyékolt sávot is rajzol, amely a vonal körüli konfidencia-intervallumot mutatja:sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)Ez a konkrét adat elég zajos, így a vonaldiagram nem a legjobb választás – de jól mutatja, milyen könnyen lehet típusokat váltani a Seaborn-ban.
Oszlopdiagramok az eloszlások bemutatására
Korábban kézzel csoportosítottad az adatokat, hogy létrehozz egy oszlopdiagramot Matplotlib segítségével. A Seaborn catplot() (kategóriák szerinti ábrázolás) képes elvégezni helyetted a csoportosítást és az aggregálást. Alapértelmezés szerint a kind="bar" a kategóriák átlagát mutatja fekete vonallal jelzett konfidencia intervallummal együtt.
-
Készíts egy oszlopdiagramot a havi átlagárakról:
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")Ez megerősíti, amit Matplotlib-el láttál — az árak szeptember és október körül tetőznek — de a Seaborn azt is vizualizálja, mennyire változnak az árak az egyes hónapokon belül.
Korrelációk megjelenítése hőtérképpel
A szórásdiagramok két változót hasonlítanak össze egyszerre. Ha több numerikus oszlopod van, egy hőtérkép lehetővé teszi, hogy az összes oszloppár közötti kapcsolat erősségét egyszerre lásd. Ez gyakori módszer arra, hogy felismerd, mely jellemzők vannak erősen korrelálva, mielőtt eldöntenéd, mit használj fel egy modell bemeneteként (és ugyanilyen típusú ábrázolást használnak később osztályozási zavarási mátrixok megjelenítéséhez).
-
Készítsd el a korrelációs mátrixot Pandas segítségével, majd rajzold meg Seaborn
heatmap()függvényével. Azannot=Trueopció kiírja a korrelációs értékeket minden cellában:correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr() sns.heatmap(correlations, annot=True, cmap="coolwarm")Az
1-hez (vagy-1-hez) közeli értékek azt jelentik, hogy az oszlopok erősen lineárisan korrelálnak. Figyeld meg, hogy aLow PriceésHigh Priceszinte tökéletesen korrelálnak. AMonthviszont csak gyenge lineáris korrelációt mutat az árral — bár az oszlopdiagram egyértelmű szezonális csúcsot mutat szeptember és október körül. Ez egy fontos tanulság: a korrelációs együttható csak a egyenes vonalú kapcsolatokat méri, így figyelmen kívül hagyhat szezonális vagy más nemlineáris mintákat. ✅ Miért hasznos mind a hőtérképet, mind az olyan diagramokat, mint az oszlopdiagram, megnézni mielőtt eldöntöd, mely oszlopokat használd?
Matplotlib vagy Seaborn?
Mindkét könyvtár ismerete hasznos:
- Matplotlib részletes kontrollt ad az ábra minden elemére, és szinte minden más Python-rajzoló könyvtár alapja.
- Seaborn magasabb szintű függvényeket és vonzó alapbeállításokat nyújt statisztikai diagramokhoz, közvetlenül dolgozik dataframe-ekkel, és gyakran gyorsabb az adatelemzés felfedező fázisában.
Egy gyakori munkafolyamat, hogy először Seaborn-t használsz az adatok gyors felfedezésére, majd Matplotlib-hez nyúlsz, ha a részleteket testreszabnád.
🚀Kihívás
Fedezd fel a Matplotlib és a Seaborn által kínált különféle ábrázolási típusokat. Mely típusok a legmegfelelőbbek regressziós problémákhoz?
Előadás utáni kvíz
Áttekintés & Önálló tanulás
Nézd meg az adatvizualizálás számos módját. Készíts listát az elérhető különböző könyvtárakról és jegyezd fel, melyek a legjobbak adott feladattípusokhoz, például 2D vagy 3D ábrázoláshoz. Mit találsz?
Feladat
Jogi nyilatkozat: Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.








