Úlohy k prednáške 4¶
Nižšie nájdete sadu cvičení/úloh, ktoré nadväzujú na prednášku o knižniciach NumPy a Pandas, tentokrát však použijeme iný dataset. Zameriame sa na dataset Wine zo scikit-learn, ktorý obsahuje informácie o chemických vlastnostiach rôznych druhov vín z Talianska. Úlohy sú koncipované tak, aby ste si precvičili prácu s dátami (načítanie, čistenie, transformácie, zlučovanie) a využili pritom základné nástroje Pandas a NumPy.
Poznámka: Dataset Wine obsahuje 178 vzoriek vína rozdelených do 3 kategórií (tzv. “class”) na základe odlišného pestovateľského prostredia. Každá vzorka má 13 rôznych chemických a fyzikálnych vlastností, napr. obsah alkoholu, kyselín, popola, farbu atď.
Cvičenia/Úlohy: Dataset Wine (sklearn)¶
0. Príprava prostredia¶
- Uistite sa, že máte nainštalovanú knižnicu
scikit-learn
,pandas
,numpy
. - V Jupyter Notebooku (alebo vo vašom IDE) si naimportujte potrebné knižnice:
import numpy as np
import pandas as pd
from sklearn.datasets import load_wine
1. Načítanie dát a základný prieskum¶
- Pomocou funkcie
load_wine()
načítajte dataset. - Vytvorte objekt typu DataFrame s názvami stĺpcov podľa
feature_names
. - Pridajte do DataFrame aj stĺpec
target
, ktorý bude obsahovať kategóriu (triedu) vína. - Vypíšte:
- Rozmer datasetu (počet riadkov, počet stĺpcov)
- Hlavné informácie o DataFrame
- Základné štatistiky o číselných stĺpcoch
Tip:
wine_data = load_wine()
wine_data.data
je numpy pole s hodnotami vlastností vín,wine_data.feature_names
obsahuje mená stĺpcov,wine_data.target
obsahuje kategórie vína (0, 1, 2).
# YOUR CODE
2. Indexovanie, výber stĺpcov a riadkov¶
- Vyberte a vypíšte len prvých 5 riadkov datasetu.
- Zo stĺpcov vyberte len:
- Obsah alkoholu (alcohol)
- Celkový obsah fenolov (total_phenols)
- Kategóriu (target)
Uložte tento “výsek” do novej premennejdf_subset
.
- Z
df_subset
vyberte všetky vína, ktoré majú obsah alkoholu väčší ako priemerný obsah alkoholu v celom datasete (môžete použiť maskovanie aleboquery
).
# YOUR CODE
3. Čistenie dát a práca s chýbajúcimi hodnotami¶
Náš dataset Wine je síce r elatívne “čistý” a nemal by obsahovať chýbajúce hodnoty, ale na precvičenie práce s chýbajúcimi údajmi vykonajte:
- Umelo vyberte 10 náhodných riadkov a v stĺpci
total_phenols
im nastavte hodnotuNaN
(chýbajúca hodnota). - Overte, koľko riadkov teraz obsahuje chýbajúce hodnoty.
- Vytvorte dve kópie vášho DataFrame:
df_dropped
– kde vypustíte (drop) všetky riadky obsahujúceNaN
.df_filled
– kde chýbajúce hodnoty nahradíte priemernou hodnotou z pôvodného stĺpca.
- Porovnajte, v koľkých riadkoch sa tieto dve kópie líšia (resp. aký majú teraz počet riadkov).
# YOUR CODE
4. Agregácie a skupinové štatistiky (GroupBy)¶
- Zgrupujte dáta podľa stĺpca
target
(t. j. podľa kategórie vína). - Vypíšte priemerné hodnoty obsahu alkoholu, popola (
ash
) a farby (color_intensity
) pre každú kategóriu vína. - Zistite, ktorá kategória vína má najvyššiu priemernú farbu a ktorá najnižšiu priemernú (stĺpec
color_intensity
). - Obohaťte svoje štatistiky aj o minimá a maximá stĺpca
malic_acid
a stĺpcaalcalinity_of_ash
pre každú kategóriu.
# YOUR CODE
5. Spájanie / zlučovanie DataFrame (Merge)¶
- Vytvorte si nový DataFrame
df_labels
, v ktorom budú len dva stĺpce:target
(hodnoty 0, 1, 2)label
(váš slovný popis danej kategórie, napr. “Kategória A”, “Kategória B”, “Kategória C”).
Uistite sa, že čísla vtarget
korešpondujú s vaším slovným popisom.
- Spojte pôvodný DataFrame o vínach s novovytvoreným
df_labels
na základe stĺpcatarget
. - Overte, že všetky riadky ostali zachované a že ste pridali správne labely.
# YOUR CODE
6. Transformácie stĺpcov¶
- Vytvorte nový stĺpec
acids_ratio
definovaný ako pomer kyseliny jablčnej (malic_acid
) ku kyslosti popola (alcalinity_of_ash
) – t. j.acids_ratio = malic_acid / alcalinity_of_ash
. - Na základe tohto stĺpca pridajte do DataFrame ďalší stĺpec
acid_cat
, ktorý bude kategorizovať vína podľa hodnotyacids_ratio
:low_acid
(ak je hodnota menšia ako 0.2),medium_acid
(ak je hodnota >= 0.2 a < 0.35),high_acid
(ak je hodnota >= 0.35).
- Skontrolujte, koľko vína spadá do každej z týchto kategórií.
# YOUR CODE
7. Pokročilejšie dotazy s query
a maskovaním¶
- Vytvorte masku, ktorá vyberie len vína z kategórie
target == 1
s obsahom alkoholu väčším ako 13.5 a farbou (color_intensity
) väčšou ako priemerná farba v celej vzorke. - Vyberte z pôvodného DataFrame tieto riadky a uložte ich do
df_filtered
. - Koľko záznamov spĺňa tieto podmienky?
# YOUR CODE
Bonus: Pivot tabulky a multi-index¶
Ak chcete precvičiť aj pivot a prácu s multi-indexami:
- Vytvorte pivot tabulku, kde:
index
bude kategória vína (target
),columns
bude napríklad rozdelenie stĺpcaacid_cat
z úlohy 6,values
bude priemernýalcohol
.
- Urobte to isté aj pre min. a max.
alcohol
(nastavteaggfunc
ako [min, max]) a sledujte štruktúru výslednej tabuľky s multi-indexom.
# YOUR CODE