|
2 weeks ago | |
---|---|---|
.. | ||
solution | 2 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 2 weeks ago | |
notebook.ipynb | 2 weeks ago |
README.md
Vytvoření regresního modelu pomocí Scikit-learn: příprava a vizualizace dat
Infografika od Dasani Madipalli
Kvíz před lekcí
Tato lekce je dostupná v R!
Úvod
Nyní, když máte k dispozici nástroje potřebné k zahájení práce na vytváření modelů strojového učení pomocí Scikit-learn, jste připraveni začít klást otázky svým datům. Při práci s daty a aplikaci řešení ML je velmi důležité vědět, jak položit správnou otázku, abyste mohli plně využít potenciál svého datasetu.
V této lekci se naučíte:
- Jak připravit data pro vytváření modelů.
- Jak používat Matplotlib pro vizualizaci dat.
Kladení správných otázek svým datům
Otázka, na kterou potřebujete odpověď, určí, jaký typ algoritmů ML budete používat. Kvalita odpovědi, kterou získáte, bude silně záviset na povaze vašich dat.
Podívejte se na data poskytnutá pro tuto lekci. Tento soubor .csv můžete otevřít ve VS Code. Rychlý pohled okamžitě ukáže, že jsou zde prázdné hodnoty a směs textových a číselných dat. Je zde také zvláštní sloupec nazvaný 'Package', kde jsou data směsí hodnot jako 'sacks', 'bins' a dalších. Data jsou vlastně trochu chaotická.
🎥 Klikněte na obrázek výše pro krátké video o přípravě dat pro tuto lekci.
Ve skutečnosti není příliš běžné dostat dataset, který je zcela připraven k použití pro vytvoření modelu ML bez jakýchkoli úprav. V této lekci se naučíte, jak připravit surový dataset pomocí standardních knihoven Pythonu. Naučíte se také různé techniky vizualizace dat.
Případová studie: 'trh s dýněmi'
V této složce najdete soubor .csv v kořenové složce data
nazvaný US-pumpkins.csv, který obsahuje 1757 řádků dat o trhu s dýněmi, rozdělených do skupin podle měst. Jedná se o surová data získaná z Specialty Crops Terminal Markets Standard Reports, která distribuuje Ministerstvo zemědělství Spojených států.
Příprava dat
Tato data jsou veřejně dostupná. Mohou být stažena v mnoha samostatných souborech, podle města, z webu USDA. Abychom se vyhnuli příliš mnoha samostatným souborům, spojili jsme všechna data měst do jedné tabulky, takže jsme data již částečně připravili. Nyní se podívejme na data podrobněji.
Data o dýních - první závěry
Co si všimnete na těchto datech? Už jste viděli, že je zde směs textů, čísel, prázdných hodnot a zvláštních hodnot, které je třeba pochopit.
Jakou otázku můžete položit těmto datům pomocí regresní techniky? Co třeba "Předpovědět cenu dýně na prodej během daného měsíce". Při pohledu na data je třeba provést určité změny, aby se vytvořila datová struktura potřebná pro tento úkol.
Cvičení - analýza dat o dýních
Použijme Pandas (název znamená Python Data Analysis
), nástroj velmi užitečný pro tvarování dat, k analýze a přípravě těchto dat o dýních.
Nejprve zkontrolujte chybějící data
Nejprve budete muset podniknout kroky k ověření chybějících dat:
- Převést data na formát měsíce (jedná se o americká data, takže formát je
MM/DD/YYYY
). - Extrahovat měsíc do nového sloupce.
Otevřete soubor notebook.ipynb ve Visual Studio Code a importujte tabulku do nového dataframe Pandas.
-
Použijte funkci
head()
, abyste zobrazili prvních pět řádků.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ Jakou funkci byste použili k zobrazení posledních pěti řádků?
-
Zkontrolujte, zda v aktuálním dataframe chybí data:
pumpkins.isnull().sum()
Chybí data, ale možná to nebude mít vliv na daný úkol.
-
Aby byl váš dataframe snazší na práci, vyberte pouze sloupce, které potřebujete, pomocí funkce
loc
, která extrahuje z původního dataframe skupinu řádků (předaná jako první parametr) a sloupců (předaná jako druhý parametr). Výraz:
v níže uvedeném případě znamená "všechny řádky".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
Dále určete průměrnou cenu dýně
Přemýšlejte o tom, jak určit průměrnou cenu dýně v daném měsíci. Jaké sloupce byste si vybrali pro tento úkol? Nápověda: budete potřebovat 3 sloupce.
Řešení: vezměte průměr sloupců Low Price
a High Price
, abyste naplnili nový sloupec Price, a převeďte sloupec Date tak, aby zobrazoval pouze měsíc. Naštěstí podle výše uvedené kontroly nechybí žádná data pro datumy nebo ceny.
-
Pro výpočet průměru přidejte následující kód:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Neváhejte si vytisknout jakákoli data, která chcete zkontrolovat, pomocí
print(month)
. -
Nyní zkopírujte převedená data do nového dataframe Pandas:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
Pokud si vytisknete svůj dataframe, uvidíte čistý, upravený dataset, na kterém můžete vytvořit nový regresní model.
Ale počkejte! Něco je tu zvláštní
Pokud se podíváte na sloupec Package
, dýně se prodávají v mnoha různých konfiguracích. Některé se prodávají v mírách '1 1/9 bushel', některé v '1/2 bushel', některé na kus, některé na libru a některé ve velkých krabicích s různými šířkami.
Dýně se zdají být velmi těžké vážit konzistentně
Při zkoumání původních dat je zajímavé, že vše, co má Unit of Sale
rovné 'EACH' nebo 'PER BIN', má také typ Package
na palec, na bin nebo 'each'. Dýně se zdají být velmi těžké vážit konzistentně, takže je filtrujme výběrem pouze dýní s řetězcem 'bushel' ve sloupci Package
.
-
Přidejte filtr na začátek souboru, pod počáteční import .csv:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Pokud nyní vytisknete data, uvidíte, že získáváte pouze asi 415 řádků dat obsahujících dýně podle bushelu.
Ale počkejte! Je tu ještě jedna věc, kterou je třeba udělat
Všimli jste si, že množství bushelu se liší podle řádku? Musíte normalizovat ceny tak, aby ukazovaly ceny za bushel, takže proveďte nějaké výpočty pro standardizaci.
-
Přidejte tyto řádky po bloku vytvářejícím dataframe 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)
✅ Podle The Spruce Eats váha bushelu závisí na typu produktu, protože se jedná o objemové měření. "Bushel rajčat, například, by měl vážit 56 liber... Listy a zelenina zabírají více prostoru s menší váhou, takže bushel špenátu váží pouze 20 liber." Je to všechno docela komplikované! Nebudeme se zabývat konverzí bushelu na libry, místo toho budeme určovat cenu podle bushelu. Všechny tyto studie bushelů dýní však ukazují, jak velmi důležité je pochopit povahu vašich dat!
Nyní můžete analyzovat ceny za jednotku na základě jejich měření bushelu. Pokud si data vytisknete ještě jednou, uvidíte, jak jsou standardizována.
✅ Všimli jste si, že dýně prodávané na půl bushelu jsou velmi drahé? Dokážete zjistit proč? Nápověda: malé dýně jsou mnohem dražší než velké, pravděpodobně proto, že jich je mnohem více na bushel, vzhledem k nevyužitému prostoru, který zabírá jedna velká dutá dýně na koláč.
Strategie vizualizace
Součástí role datového vědce je demonstrovat kvalitu a povahu dat, se kterými pracuje. K tomu často vytvářejí zajímavé vizualizace, jako jsou grafy, diagramy a tabulky, které ukazují různé aspekty dat. Tímto způsobem mohou vizuálně ukázat vztahy a mezery, které by jinak bylo těžké odhalit.
🎥 Klikněte na obrázek výše pro krátké video o vizualizaci dat pro tuto lekci.
Vizualizace mohou také pomoci určit techniku strojového učení, která je pro data nejvhodnější. Například scatterplot, který se zdá sledovat linii, naznačuje, že data jsou dobrým kandidátem pro cvičení lineární regrese.
Jedna knihovna pro vizualizaci dat, která dobře funguje v Jupyter notebooku, je Matplotlib (kterou jste viděli i v předchozí lekci).
Získejte více zkušeností s vizualizací dat v těchto tutoriálech.
Cvičení - experimentujte s Matplotlib
Zkuste vytvořit základní grafy pro zobrazení nového dataframe, který jste právě vytvořili. Co by ukázal základní čárový graf?
-
Importujte Matplotlib na začátek souboru, pod import Pandas:
import matplotlib.pyplot as plt
-
Znovu spusťte celý notebook, aby se aktualizoval.
-
Na konec notebooku přidejte buňku pro vykreslení dat jako box:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Je tento graf užitečný? Překvapilo vás na něm něco?
Není příliš užitečný, protože pouze zobrazuje vaše data jako rozptyl bodů v daném měsíci.
Udělejte to užitečné
Aby grafy zobrazovaly užitečná data, obvykle je třeba data nějak seskupit. Zkusme vytvořit graf, kde osa y ukazuje měsíce a data demonstrují rozložení dat.
-
Přidejte buňku pro vytvoření seskupeného sloupcového grafu:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
Toto je užitečnější vizualizace dat! Zdá se, že naznačuje, že nejvyšší cena za dýně se vyskytuje v září a říjnu. Odpovídá to vašemu očekávání? Proč ano nebo ne?
🚀Výzva
Prozkoumejte různé typy vizualizací, které Matplotlib nabízí. Které typy jsou nejvhodnější pro regresní problémy?
Kvíz po lekci
Přehled & Samostudium
Podívejte se na různé způsoby vizualizace dat. Udělejte si seznam různých dostupných knihoven a poznamenejte si, které jsou nejlepší pro dané typy úkolů, například 2D vizualizace vs. 3D vizualizace. Co objevíte?
Úkol
Prohlášení:
Tento dokument byl přeložen pomocí služby pro automatický překlad Co-op Translator. Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.