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.displota 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
ordera 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.
coloraleboclarity).
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=Noneak 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