Cvičenia k prednáške – pokročilé úlohy so Seaborn (dataset Diamonds)¶
V týchto cvičeniach použijeme dataset diamonds, ktorý je k dispozícii priamo v knižnici Seaborn. Dataset obsahuje údaje o diamantoch a ich vlastnostiach (cena, čistota, farba, hmotnosť v karátoch, atď.).
Úlohy sú zamerané na pokročilejšie techniky práce s dátami a na vytváranie prehľadných vizualizácií pomocou knižnice Seaborn. Zadania sú rozdelené do viacerých kategórií, pričom dôraz bude kladený na:
- Pokročilé filterovanie a úpravu dát
- Využívanie parameterov v Seaborn funkciách
- Kombinované grafy a FacetGrid
- Experimentovanie s nastaveniami štýlu, palety a kontextu
- Interpretáciu vytvorených grafov
1. Načítanie a prvotný prehľad o dátach¶
Úloha 1.1: Načítajte dataset diamonds pomocou funkcie sns.load_dataset('diamonds')
do premennej diamonds
a prezrite si jeho základnú štruktúru – zobrazte hlavičku a informácie o stĺpcoch.
Otázka na zamyslenie: Koľko záznamov (riadkov) a aké typy stĺpcov (atribútov) dataset obsahuje?
# YOUR CODE
2. Čistenie a príprava dát¶
Úloha 2.1: Skontrolujte, či dataset obsahuje nejaké chýbajúce hodnoty (missing values). V prípade, že nájdete chýbajúce dáta, rozhodnite sa, či je vhodné ich odstrániť alebo nahradiť nejakou hodnotou.
Úloha 2.2 (podľa výsledku v 2.1): Aplikujte vhodné riešenie pre chýbajúce hodnoty (ak existujú). Môžete napr. vynechať záznamy, alebo nahradiť priemernou hodnotou.
# YOUR CODE
3. Základné vizualizácie distribúcií¶
Dataset diamonds obsahuje viacero numerických atribútov (napr. carat
, depth
, table
, price
, ...). Veľmi zaujímavé sú predovšetkým carat
(hmotnosť v karátoch) a price
(cena).
Úloha 3.1: Vykreslite rozdelenie hodnôt (histogram) pre price
.
- Vyskúšajte použiť
sns.displot
a upravte počet binov tak, aby bolo rozdelenie aspoň trochu prehľadné (napr.bins=50
– experimentujte). - Zobrazte navyše aj KDE krivku.
Otázky na zamyslenie:
- Je rozdelenie veľmi „vychýlené“ (skewed)?
- Ktorá časť (aká približne cena) dominuje?
# YOUR CODE
Úloha 3.2: Vykreslite rozdelenie (histogram alebo KDE) pre carat
(hmotnosť v karátoch). Skúste spraviť aj menšie „triky“ na zlepšenie čitateľnosti, napríklad:
- vhodne vybrať počet binov,
- použiť inú farebnú paletu,
- nastaviť popisy osí.
# YOUR CODE
4. Vizualizácia závislostí¶
Úloha 4.1: Vykreslite bodový graf (scatterplot
) zobrazujúci vzťah medzi carat
a price
.
- Na osi x nech je
carat
, na osi y nech jeprice
. - Vyskúšajte parametre:
alpha
(priehľadnosť), prípadnehue
='color'
(vo význame farby diamantu), aby ste rozoznali, ako farba diamantu súvisí s hmotnosťou/cenou. - Ak je bodov príliš veľa, zvážte nastavenie malých bodov (
s=10
) a/alebo menšej priehľadnosti.
Otázky na zamyslenie:
- Je zrejmá nejaká závislosť medzi hmotnosťou (carat) a cenou (price)?
- Zdá sa, že farba diamantu má (alebo nemá) výrazný vplyv?
# YOUR CODE
Úloha 4.2: Rozšírte bodový graf o regresnú čiaru pomocou regplot
alebo lmplot
. Zvážte, či je vhodné polynomiálne prispôsobenie (parametrom order
alebo inak).
Tip: Použite sns.regplot(x='carat', y='price', data=diamonds, order=2)
napr. na test, či polynóm 2. stupňa nepopisuje krivku lepšie.
# YOUR CODE
Úloha 4.3: Vyskúšajte jointplot
pre dvojicu premenných price
a carat
. Pomenujte aspoň dva spôsoby nastavenia parametra kind
(napr. "scatter"
, "kde"
, "hex"
...) a porovnajte.
Otázka: Ktorý typ sa vám zdá pre tieto dáta vizuálne najinformatívnejší?
# YOUR CODE
Úloha 4.4: Vyskúšajte pairplot
pre vybrané numerické atribúty: ['carat','depth','table','price']
. Nastavte parametre, aby ste dosiahli prehľadnú maticu. Môžete skúsiť farebné rozlíšenie hue='cut'
alebo hue='color'
, no dataset je veľký, tak pozor na prehľadnosť.
# YOUR CODE
5. Vizualizácie pre kategorické dáta¶
Úloha 5.1: Vykreslite countplot pre atribút cut
. Kategória cut
hovorí o kvalite brúsenia diamantu (napr. Fair, Good, Very Good, Premium, ...).
- Vyskúšajte parametre
order
a zmeňte predvolené poradie stĺpcov od najhoršej k najlepšej kvalite. - Skúste farebne rozlíšiť diamanty aj podľa iného atribútu (napr.
color
aleboclarity
).
Otázka: Ktorá kombinácia (cut vs. color/clarity) sa vyskytuje najviac?
# YOUR CODE
Úloha 5.2: Vytvorte barplot zobrazujúci priemernú cenu (price
) diamantov v závislosti od kvality rezu (cut
) a navyše farebne rozlíšte podľa čistoty (clarity
).
- Na osi x bude
cut
(kategória), na osi y bude priemernýprice
. - Nastavte parametre
estimator
, ak by ste chceli použiť napr. medián miesto priemeru. - Využite parametre
hue
,palette
, prípadneci=None
ak nechcete zobrazovať interval spoľahlivosti.
# YOUR CODE
Úloha 5.3: Vyskúšajte boxplot alebo violinplot pre price
rozdelené podľa cut
(alebo color
). Skúste pridať aj parametre hue='color'
či hue='cut'
(vzájomne sa to vylučuje, tak si vyberte).
Zamerajte sa na:
- zrozumiteľnosť (označenie osí, legenda),
- vhodnú farebnú paletu (napr.
"coolwarm"
,"Spectral"
,"Set2"
...), - interpretáciu: kde pozorujeme najväčší rozptyl cien?
# YOUR CODE
6. Facet Grids a kombinované vizualizácie¶
Úloha 6.1: Vytvorte FacetGrid
, kde v riadkoch (row
) bude cut
a v stĺpcoch (col
) bude color
. Do každého grafu vykreslite napríklad histogram price
(pomocou .map(plt.hist, 'price')
) alebo sns.histplot
, podľa preferencie.
Otázka: Čo naznačujú rozdiely v tvare histogramu pri rôznych kombináciách cut
a color
?
# YOUR CODE
Úloha 6.2: Vyskúšajte catplot()
s parametrom col='cut'
, aby ste videli stĺpcové grafy alebo boxploty pri rôznych hodnotách cut
a porovnajte cenové rozdiely naprieč farbami pri každej kvalite rezu samostatne.
# YOUR CODE
7. Heatmapy a korelácie¶
Teraz sa pozrieme na korelácie medzi numerickými atribútmi a iné tabuľkové zobrazenia.
Úloha 7.1: Vypočítajte korelačnú maticu pre vybrané numerické atribúty: ['carat','depth','table','price','x','y','z']
a zobrazte ju ako heatmap.
- Najprv si vyberte podmnožinu stĺpcov, napr.
cols = [...]
, a vytvorte korelačnú maticudiamonds[cols].corr()
. - Následne vykreslite
sns.heatmap(...)
. Nastavte parametre akocmap='coolwarm'
,annot=True
, prípadne masku pre horný trojuholník. - Interpretujte najvyššie a najnižšie korelácie.
# YOUR CODE
Úloha 7.2 (voliteľná): Vytvorte pivot tabuľku, ktorá zobrazí priemernú cenu (price
) podľa cut
(v riadkoch) a color
(v stĺpcoch). Využite pd.pivot_table
alebo groupby().pivot(...)
. Vykreslite ju ako heatmapu.
Otázka: Pre ktorú kombináciu (cut, color) je priemerná cena najvyššia?
# YOUR CODE
8. Prispôsobenie štýlu a záver¶
Úloha 8.1: Nastavte globálne štýl pomocou sns.set_style()
(napr. 'whitegrid'
) a kontext pomocou sns.set_context()
(napr. 'talk'
) a znovu vykreslite akýkoľvek vybraný graf z predošlých úloh, aby ste videli rozdiel.
Úloha 8.2 (voliteľná): Vyskúšajte si zmeniť paletu farieb, napr. sns.set_palette('Spectral')
, a následne vytvoriť nejaký stĺpcový graf, kde vynikne zvolená farebná paleta.
Zamyslite sa: Ktorý štýl (darkgrid, ticks, whitegrid, ...) považujete za najprehľadnejší a najvhodnejší pre tento dataset?
# YOUR CODE
Zhrnutie¶
Týmto sme sa oboznámili s datasetom diamonds a precvičili sme si pokročilejšie témy:
- rôzne typy grafov (histogram, scatter, box, catplot, FacetGrid...)
- rôzne parametre Seaborn funkcií (farby, hue, alpha, bins...)
- prácu s veľkým datasetom (diamonds má viac ako 53 000 riadkov)
- kombinovanie Seaborn a Pandas (pivot, korelácie, groupby...)
- nastavenie vzhľadu a štýlu grafov.
V prípade, že ste sa s problémami popasovali úspešne a máte všetky vizualizácie, gratulujeme! Ste na dobrej ceste zvládnuť pokročilejšiu dátovú analytiku a vizualizáciu v Pythone.
Doplnkové otázky¶
- Ako by ste riešili prehľadnosť grafu, keď je bodov príliš mnoho?
- Dá sa odhadnúť, či existuje hranica karát/ceny, odkiaľ je nárast ceny extrémne prudký?
- Ktoré kombinácie (cut, color, clarity) vedú k najdrahším diamantom?
Odporúčané zdroje¶
- Oficiálna dokumentácia Seaborn: https://seaborn.pydata.org
- Galéria príkladov Seaborn: https://seaborn.pydata.org/examples/index.html
- pandas dokumentácia a príručky: https://pandas.pydata.org/docs