Nauč se Python > Kurzy > Datový kurz PyLadies > Explorační datová analýza a statistika jedné proměnné > EDA - Analýza jedné proměnné

Explorační datová analýza

Explorační datová analýza (zkráceně EDA) je soubor technik a metod, které se používají k hledání zajímavých informací v datech a tvorbě hypotéz, které je následně možné testovat. EDA je často úplně první krok, který se s daty provádí a který do dalších analýz přináší nejen hodně užitečných poznatků o datech, ale také data samotná připravená k dalšímu zpracování.

Dnes se společně podíváme na to, jak správně data načíst, odhalit základní chyby, zobrazit souhrné informace a následně provedeme analýzu jednotlivých proměnných a dojde i na základní vizualizace.

Data k analýze jsou připravena v tabulce vaha-vyska.csv.

In [1]:
import pandas as pd

Načtení a kontrola dat

Opět máme data ve formátu CSV a tak si je načteme ze souboru funkcí read_csv.

In [2]:
data = pd.read_csv("static/vaha-vyska.csv")

Načtení se zřejmě povedlo, ale jistotu získáme, až když si data prohlédneme.

In [3]:
data
Out[3]:
Muž 187,6 109.72
0 Muž 174,7 73.62
1 Muž 188,2 96.50
2 Muž 182,2 99.81
3 Muž 177,5 93.60
4 Muž 170,8 69.04
... ... ... ...
9994 Žena 168,1 62.04
9995 Žena 170,4 77.50
9996 Žena 162,2 58.28
9997 Žena 175,3 74.32
9998 Žena 157,3 51.55

9999 rows × 3 columns

Výsledek sice vypadá jako tabulka, ale zcela v pořádku není. Jak je vidět, máme hodnoty výšky a váhy i v prvním řádku, kde bychom spíše očekávali názvy sloupců. Občas se stane, že názvy sloupců nejsou přímo v CSV souboru, ale jsou dodávány samostatně v odděleném dokumentu často i s vysvětlivkami, co jednotlivé sloupce znamenají a jaké hodnoty obsahují.

V tomto případě je snadné odhadnout, že první sloupec bude obsahovat pohlaví, druhý výšku a třetí váhu, ale je samozřejmě lepší se o tom vždy přesvědčit u zdroje dat.

Pojďme tedy načíst data znovu a názvy sloupců dodat ručně.

In [4]:
data = pd.read_csv("static/vaha-vyska.csv", names=["pohlavi", "vyska", "vaha"])
data
Out[4]:
pohlavi vyska vaha
0 Muž 187,6 109.72
1 Muž 174,7 73.62
2 Muž 188,2 96.50
3 Muž 182,2 99.81
4 Muž 177,5 93.60
... ... ... ...
9995 Žena 168,1 62.04
9996 Žena 170,4 77.50
9997 Žena 162,2 58.28
9998 Žena 175,3 74.32
9999 Žena 157,3 51.55

10000 rows × 3 columns

K dispozici máme tabulku s deseti tisíci záznamy. Zatím si ale nemůžeme být jisti, že všechny záznamy obsahují všechny hodnoty. Bývá dobrým zvykem se podívat, kolik je v datasetu tzv. nulových hodnot. Neméně užitečnou informací pro nás je, zda Pandas správně rozeznal datové typy jednotlivých proměnných, o kterých ze zdrojového CSV nedostane žádnou informaci a tak je musí odhadnout z obsahu sloupců. Oboje se dozvíme s pomocí metody info.

V dalších lekcích se společně podíváme, jak se s nulovými hodnotami vypořádat.

In [5]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 3 columns):
pohlavi    10000 non-null object
vyska      10000 non-null object
vaha       10000 non-null float64
dtypes: float64(1), object(2)
memory usage: 234.5+ KB

Kromě informace o nulových hodnotách a datových typech jsme se ještě dozvěděli, kolik naše tabulka zabírá v paměti a jaký používá index.

Datové typy jsou podobné těm v Pythonu, ale přeci jen se mírně odlišují. Jejich kompletní seznam je možné nalézt v dokumentaci k NumPy.

Ti pozorní si všimnou, že i když očekáváme ve sloupci s váhou a výškou stejný datový typ (desetinné číslo neboli float), je výška označena jako object. Ti ještě pozornější už zahlédli i důvod - desetinná čárka místo desetinné tečky. Zatímco sloupec váha obsahuje desetinné tečky a je tedy správně identifikován jako číselný, sloupec s výškou obsahuje desetinné čárky a tak jej Pandas považuje za obecný objekt. Opravit takovou chybu není nijak složité.

V praxi se příliš často nestává, že by dva sloupce v jednom datasetu používaly různé znaky jako oddělovač desetinných míst. Pokud je tento problém v celé tabulce, stačí dát funkci read_csv pojmenovaný argument decimal a Pandas se o převod na desetinná čísla postará sám.

In [6]:
data.vyska = data.vyska.str.replace(",", ".").astype(float)

V příkazu výše se děje hned několik věcí najednou. Nejdříve na sloupci výška zavoláme metodu str.replace, která nám zamění všechny čárky za tečky a následně nám tento pozměněný sloupec metoda astype převede na sloupec s desetinnými čísly. Abychom docílili změny v tabulce, uložíme opravený sloupec zpět pod jeho původní jméno.

In [7]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 3 columns):
pohlavi    10000 non-null object
vyska      10000 non-null float64
vaha       10000 non-null float64
dtypes: float64(2), object(1)
memory usage: 234.5+ KB
In [8]:
data
Out[8]:
pohlavi vyska vaha
0 Muž 187.6 109.72
1 Muž 174.7 73.62
2 Muž 188.2 96.50
3 Muž 182.2 99.81
4 Muž 177.5 93.60
... ... ... ...
9995 Žena 168.1 62.04
9996 Žena 170.4 77.50
9997 Žena 162.2 58.28
9998 Žena 175.3 74.32
9999 Žena 157.3 51.55

10000 rows × 3 columns

Prozatím jsme se dívali na data z pohledu jejich úplnosti a správnosti, ale zatím o nich nic moc nevíme. Pojďme se nejdříve podívat na základní typy proměnných a pak na popisnou statistiku, kterou pro ně můžeme použít.

Typy proměnných

Proměnné se dají rozdělit do mnoha kategorií podle svých vlastností. My si popíšeme jen několik z nich, které nám pomohou se vyvarovat některým chybám a lépe se dorozumět při komunikaci s ostatními analytiky.

Kategoriální proměnná

Kategoriální proměnná obsahuje informaci o kategorii, do které lze daný záznam zařadit - např. barva, typ auta či typ elektrické zásuvky. Důležitou vlastností kategoriálních proměnných je to, že je nelze porovnávat. Můžeme jen říci, zda jsou stejné nebo různé, ale už ne která hodnota je větší či menší.

Numerické proměnné

Numerická proměnná je označení pro více druhů proměnných, které lze vyjádřit číslem, porovnávat a provádět s nimi matematické operace. Taková proměnná může být diskrétní (celočíselná) jako např. počet válců automobilu, počet návštěvníků na oslavě, nebo spojitá (metrická) jako např. tlak, teplota či rychlost.

Ordinální proměnná

Ordinální proměnná je taková, u které dává smysl rozhodovat o pořadí hodnot - např. úroveň dosaženého vzdělání, příjmová skupina atp.

Důležité je si uvědomit, že i kategoriální proměnná může být v datech označena číslem stejně jako ordinální proměnná může být označena slovním popisem. Je tedy vždy důležité k datům přistupovat podle jejich obsahu spíše než formy.

V našem datasetu na nás čeká jedna kategoriální proměnná (pohlaví) a dvě numerické spojité (váha a výška). Pojďme se podívat, co je nám o nich Pandas schopen říci.

Základní popisné statistiky

In [9]:
data.describe()
Out[9]:
vyska vaha
count 10000.000000 10000.000000
mean 168.573940 73.228120
std 9.772842 14.564138
min 137.800000 29.350000
25% 161.300000 61.607500
50% 168.400000 73.125000
75% 175.700000 84.902500
max 200.700000 122.470000

Metoda describe vezme všechny číselné sloupce tabulky a vypočítá pro ně několik základních statistických údajů. Pojďme si je společně popsat jeden po druhém.

Počet, průměr, minimum a maximum

Počet (count) udává celkový počet hodnot v daném sloupci. Je to tedy další způsob, jak se ujistit, že sloupce neobsahují nulové hodnoty.

Průměr (mean) obsahuje aritmetický průměr - tedy součet všech hodnot podělen jejich počtem.

Minimum a maximum obsahují minimální resp. maximální hodnotu pro daný sloupec.

Percentily

Percentily nám umožňují dělit hodnoty ve sloupcích podle jejich zastoupení. V tomto případě se jedná o 25%, 50% a 75% percentily, které nám dělí hodnoty ve sloupcích na čtyři části.

Z tohoto dělení se dá vyčíst, že 25 % lidí z našeho datasetu je menších než 161,3 cm a lehčích než 61,6 kg. Z druhého konce je možné odvodit podobnou informaci a tedy, že 25 % lidí z našeho datasetu je vyšších než 175,7 cm a těžších než 84,9 kg.

Protože máme pomocí percentilů rozdělen dataset na čtyři části, říká se jim též kvartily. V případě potřeby si pojmenovaným argumentem percentiles metody describe je možné zadat vlastní percentily.

Medián

Medián sice není v tabulce přímo zapsán, ale je to jen jiné označení pro 50% percentil.

Je to velmi důležité číslo, protože nám udává, že polovina hodnot je pod ním a druhá polovina nad ním. O rozdílu mezi průměrem a mediánem ještě bude řeč.

Standardní ochylka

Standardní (jinak též směrodatná) odchylka (standard deviation, std) je číslo označované malým řeckým písmenem sigma (σ), které nám říká, jak moc se typické hodnoty ve sloupci liší od průměru. Čím vyšší je směrodatná odchylka tím větší je rozptyl hodnot ve sloupci a naopak čím nižší je, tím blíže jsou jednotlivé hodnoty průměru.

Pokud to teď nedává úplně smysl, nevadí, brzy si význam těchto hodnot ukážeme na praktických příkladech s využitím grafů.

Důležitý rozdíl mezi průměrem a mediánem

Pojďme si zkusit demonstrovat důležitý rozdíl mezi průměrem a mediánem a co nám o datech může povědět pouhý pohled na tato dvě čísla.

Pro potřeby této ukázky si vybereme deset náhodných mužů z našeho datasetu.

Za normálních okolností bychom pro náhodný výběr použili metodu sample, ale zde potřebujeme, aby byl výsledek reprodukovatelný při opětovém spuštění notebooku, a tak zadáme náhodně vybrané řádky ručně.

In [10]:
vyber = data.loc[[4768, 2549, 2325, 335, 3237, 736, 3178, 3721, 3711, 2246]]
vyber
Out[10]:
pohlavi vyska vaha
4768 Muž 171.8 89.19
2549 Muž 183.1 87.46
2325 Muž 177.9 89.47
335 Muž 169.5 81.44
3237 Muž 173.8 86.00
736 Muž 170.4 74.47
3178 Muž 182.6 92.49
3721 Muž 189.4 96.71
3711 Muž 173.3 82.38
2246 Muž 165.6 70.89
In [11]:
vyber.describe()
Out[11]:
vyska vaha
count 10.000000 10.000000
mean 175.740000 85.050000
std 7.363604 7.939345
min 165.600000 70.890000
25% 170.750000 81.675000
50% 173.550000 86.730000
75% 181.425000 89.400000
max 189.400000 96.710000

Nejmenší člen naší party měří 165 cm a váží skoro 71 kg. Na opačném konci je muž vážící skoro 97 kg při 189 cm výšky. Přůměrná výška je 175,74 cm a směrodatná odchylka výšky je 7,36 cm. Průměr a medián jsou velmi podobné hodnoty. Teď si k naší skupince přisedne nějaký obr.

In [12]:
vyber.loc[10001] = "Muž", 251, 610  # Výška nejvyššího a váha nejtěžšího muže světa
In [13]:
vyber
Out[13]:
pohlavi vyska vaha
4768 Muž 171.8 89.19
2549 Muž 183.1 87.46
2325 Muž 177.9 89.47
335 Muž 169.5 81.44
3237 Muž 173.8 86.00
736 Muž 170.4 74.47
3178 Muž 182.6 92.49
3721 Muž 189.4 96.71
3711 Muž 173.3 82.38
2246 Muž 165.6 70.89
10001 Muž 251.0 610.00
In [14]:
vyber.describe()
Out[14]:
vyska vaha
count 11.000000 11.000000
mean 182.581818 132.772727
std 23.742696 158.457488
min 165.600000 70.890000
25% 171.100000 81.910000
50% 173.800000 87.460000
75% 182.850000 90.980000
max 251.000000 610.000000

Stačil jeden obézní velikán a průměrná výška nám stoupla o 6,8 cm a váha o skoro 48 kg. Společně s průměrem nám do nebes vyletěla i směrodatná odchylka, ale co medián (50% percentil)? Ten zůstal skoro nezměněn. Společně se směrodatnou odchylkou nám totiž velký rozdíl mezi mediánem a průměrem může napovědět, že se v našich datech nachází tzv. odlehlá měření - tedy hodnoty, které jsou od průměru velmi vzdálené.

Jak se s těmito odlehlými měřeními vyrovnat, si ukážeme později, teď nám stačí vědět, že je diky znalostem základní popisné statistiky dokážeme identifikovat, aniž bychom museli pročítat všechny záznamy.

A co kategoriální proměnná pohlaví? K té se tolik užitečných čísel nedozvíme, ale pár jich přeci jen bude. Tak například, kolik unikátních hodnot tento sloupec obsahuje?

In [15]:
data.pohlavi.nunique()
Out[15]:
2

Metoda nunique nám vrátí počet unikátních hodnot ve sloupci pohlaví. Dvojka je na tomto místě očekávaný výsledek. Pokud by to číslo bylo jiné, mohlo by to znamenat, že je ve jméně některé z kategorií na některých řádcích překlep, který se často objevuje u ručně sbíraných dat. Nezbývá než se podívat, kolik zástupců od každého pohlaví naše data obsahují. K tomu použijeme metodu value_counts().

In [16]:
data.pohlavi.value_counts()
Out[16]:
Muž     5000
Žena    5000
Name: pohlavi, dtype: int64

Jak je vidět, máme v datasetu přesně polovinu mužů a žen.

Vizualizace

Je velmi důležité umět porozumět popisným statistikám, které nám usnadní pochopení dat, na které se díváme. Neodmyslitelným doplňkem k tomu jsou grafy, které mohou rozkrýt další skryté vlastnosti či objasnit v číslech skryté informace.

Všechny naše grafy na pozadí produkuje knihovna matplotlib, ale při jejich tvorbě si po většinu času vystačíme s metodou plot(), kterou nám dává k dispozici pandas. Až později, když budeme chtít grafy upravovat a různě kombinovat, budeme potřebovat matplotlib použít přímo.

Aby vše fungovalo správně a využili jsme výhod jupyteru, speciálním příkazem nastavíme, aby se grafy zobrazovaly přímo v notebooku.

In [17]:
%matplotlib inline

Histogram

Mezi nejběžnější grafy datové analýzy patří histogramy. Histogram má na vodorovné ose rozprostřeny hodnoty z daného sloupce tabulky a výška každého sloupce nám ukazuje, kolikrát je daná hodnota zastoupena v datech. Pro přehlednost nemá každá jednotlivá hodnota svůj sloupec, ale jsou ve skupinách. Pojďme si jeden nakreslit.

In [18]:
data.vaha.plot(kind="hist", bins=40);

Na předchozím řádku se děje hned několi věcí najednou, tak si je pojďme rozebrat. Metoda plot umí ze sloupce či celé tabulky vytvořit graf. Jaký graf to bude, o tom rozhodje pojmenovaný argument kind. Do kolika sloupců se má histogram rozčlenit, to je nastaveno pojmenovaným argumentem bins.

Středník na konci řádku zabrání, aby se kromě grafu vypsala i neužitečná informace ve stylu <matplotlib.axes._subplots.AxesSubplot at 0x7f782a0a2d10>.

Z histogramu je vidět, že místo očekávaného průměru, který bude mít v datasetu nejvíce zástupců, máme něco jako průměry dva. To může být způsobeno tím, že máme v záznamech polovinu žen a druhou mužů. Zkusme se na tyto dvě skupiny podívat zvlášť.

In [19]:
data[data.pohlavi == "Muž"].vaha.plot.hist(bins=30);
In [20]:
data[data.pohlavi == "Žena"].vaha.plot.hist(bins=30);

Díky filtraci řádku před vykreslením histogramu jsme získali dva samostatné histogramy - jeden pro každé pohlaví. Za povšimnutí také stojí, že jsme zde místo pojmenovaného argumentu kind zvolili volání metody plot.hist, které funguje naprosto stejně, ale může někomu více vyhovovat.

Z histogramů je patrné, že obě pohlaví mají nějakou průměrnou váhu, která je v datech zastoupena nejvíce záznamy. Je třeba se mít na pozoru, protože i když oba histogramy vypadají dost podobně, jejich vodorovná osa obsahuje zcela odlišné hodnoty a tak zatímco mužů pod 50 kg váhy je v datasetu zanedbatelné množství, u žen je to celkem početná část.

Chceme-li měnit různá nastavení grafu je možné použít objektově-orientované rozhraní knihovny matplotlib, které nám umožní s vizualizacemi všemožně manipulovat. Proto si jej musíme nejdříve importovat.

In [21]:
from matplotlib import pyplot as plt
In [22]:
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1)
data[data.pohlavi == "Žena"].vaha.plot.hist(ax=ax, bins=30);
ax.set_title("Histogram váhy žen");
ax.set_xlabel("Váha v kilogramech");

Voláním plt.figure vytvoříme kontejner pro celý obrázek dané velikosti (v palcích). fig.add_subplot(1, 1, 1) nám do tohoto obrázku přidá osy pro budoucí graf. Tři jedničky znamenají, že graf má být v pomyslné tabulce s jedním řádkem a jedním sloupcem na prvním místě.

Díky tomu, že objekty reprezentující celý obrázek a graf v něm máme v samostatných proměnných, můžeme se k nim kdykoli vrátit a nastavit libovolné vlastnosti. Tady se nám pro přehlednost hodí nastavit titulek pro graf a popis osy X.

Vykreslit více histogramů do jednoho místa také není problém, stačí pandasu říci, aby pro kreslení histogramu využil připravené místo v obrázku.

In [23]:
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot()  # Tři jedničky není třeba psát pokaždé znovu
data[data.pohlavi == "Žena"].vaha.plot.hist(ax=ax, bins=30);
data[data.pohlavi == "Muž"].vaha.plot.hist(ax=ax, bins=30);
ax.set_title("Histogram váhy mužů a žen");
ax.set_xlabel("Váha v kilogramech");

Sice jsme tímto spojením histogramů přišli o kousek informace, protože nevidíme jak jsou zastoupeny váhově nadprůměrné ženy, ale zase jsme získali lepší přehled o tom, jak je na tom každá ze skupin co se průměru týče.

Díky možnosti vkládat vícero grafů do jednoho obrázku získáme i možnost je mezi sebou snáze porovnávat. Můžeme si zkusit vykreslit histogramy vedle sebe i pod sebou.

In [24]:
fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_subplot(2, 1, 1)  # Dva řádky, jeden sloupec, první graf
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)  # Druhý graf, sdílená osa X
data[data.pohlavi == "Žena"].vyska.plot.hist(ax=ax1, bins=30);
data[data.pohlavi == "Muž"].vyska.plot.hist(ax=ax2, bins=30);
fig.suptitle("Histogram výšky mužů a žen");
ax2.set_xlabel("Výška v centimetrech");

ax1 a ax2 obsahují připravené osy pro oba histogramy a při jejich vytváření jsme je jednak rozmístili do obrázku o dvou řádcích a jednom sloupci a také jsme nastavili, aby druhý graf sdílel osu X s prvním grafem, což nám velmi usnadní jejich porovnání.

Velmi podobné je to s dvěma sloupci a sdílenou osou Y.

In [25]:
fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_subplot(1, 2, 1)  # Jeden řádek, dva sloupce, první graf
ax2 = fig.add_subplot(1, 2, 2, sharey=ax1)  # Druhý graf, sdílená osa Y
data[data.pohlavi == "Žena"].vyska.plot.hist(ax=ax1, bins=30);
data[data.pohlavi == "Muž"].vyska.plot.hist(ax=ax2, bins=30);
fig.suptitle("Histogram výšky mužů a žen");
ax1.set_xlabel("Výška v centimetrech");
ax2.set_xlabel("Výška v centimetrech");

Jak je vidět, histogramy pod sebou se sdílenou osou X mají v tomto případě daleko vyšší vypovídající hodnotu, protože je z nich dobře poznat distribuce výšky u obou pohlaví.

Sloupcový graf

Ze sloupce pohlaví si jednoduše histogram vykreslit nemůžeme, protože tento sloupec neobsahuje číselné hodnoty. My už ale víme, jak ze sloupce s kategoriální proměnnou číselné hodnoty získat a tak stačí tyto dva přístupy skombinovat a výsledek vykreslit do sloupcového grafu.

In [26]:
data.pohlavi.value_counts().plot.bar();

Sloupcový graf je zde jen pro úplnost, abychom si graficky zobrazili všechny sloupce. O jeho možnostech, kterých je opravdu velké množství, bude řeč později.

Krabicový graf

Posledním typem grafu, který si dnes ukážeme, je krabicový graf neboli boxplot. O co menší je jeho popularita u laické veřejnosti o to více infomací obsahuje pro zkušené analytiky. Jeho intepretace není vždy triviální, ale za to nabízí opravdu hodně informací v jednom obrázku.

In [27]:
data.plot.box(figsize=(10, 10));

V krabicovém grafu vidíme vyobrazeny obě numerické proměnné najednou. Zelená čára uprostřed označuje medián. Oblast označená obdelníkem (krabicí) označuje rozsah mezi 25% a 75% percentily (mezi prvním a třetím kvartilem). Krátké vodorovné čárky označují rozsah definovaný vzorcem 1,5 × IQR, kde IQR je tzv. inter-quartile range tedy rozsah od prvního po třetí kvartil a vypočte se jako Q3 - Q1. Co se do tohoto rozsahu nevejde, je označeno puntíkem a znamená to, že tyto hodnoty jsou brány jako odlehlá měření. Je to tedy to podstatné z popisné statistiky v kostce (krabici).

Abychom si to ukázali i prakticky na konkrétních číslech. IQR pro váhu je 84,9 (Q3) - 61,6 (Q1) = 23,3. Jeden a půl násobek IQR je 34.95. Rozsah pro vodorovné čárky je tedy 84,9 + 34,95 = 119,85 kg na horní hranici a 61,6 - 34,95 = 26,65 kg na spodní hranici. V grafu i v tabulce je vidět, že pouze jediná hodnota se tomuto rozsahu vymyká a to je váha 122,47 kg.

Za povšimnutí stojí, že některé parametry grafu lze nastavit i přímo jako pojmenované argumenty některé k plot metod a ušetřit si tak další volání různých modifikací.

Zkusme si teď vykreslit podobné porování hodnot váhy pro muže a ženy v krabicovém grafu. Krabicový graf je pro podobná porovnání jako stvořený, ale bohužel ne ve své obyčejnější variantě s metodou plot.box. Daleko mocnější je metoda boxplot, která umožní grafu nastavit pojmenovaným argumentem by sloupec, podle kterého se mají záznamy dělit do skupin a pomocí argumentu column vybrat jen ten sloupec, který nás zajímá.

Proč je tomu tak a existují dvě metody na stejnou práci bohužel netuším. V nástrojích na datovou analytiku se často setkáš s přístupem, kdy jeden problém lze řešit mnoha různými způsoby a je jen na tobě, který si vybereš a oblíbíš.

In [28]:
data.boxplot(column="vaha", by="pohlavi", figsize=(10, 10));

Tady je vidět, že když se vezmeme rozsah hodnot pro každé pohlaví zvlášť, je množství odlehlých měření daleko vyšší.

V této lekci jsme se naučili základní metody EDA a analýzu jedné proměnné, vysvětlili jsme si základy popisné statistiky a co jsme nevykoukali z tabulek, to nám napověděly grafy. Je vidět, že zajímavé informace se dají získat i z několika málo sloupců s čísly.

Čas na hraní

Je nejvyšší čas si nabyté znalosti vyzkoušet v praxi. Na datech, které už znáš z týden dlouhého tréninku práce s Pandasem, si můžeš zkusit kouzla z této lekce. Jistě je v nich najde minimálně jeden numerický sloupec, který bude možné vizualizovat a vyčíst z něj nějaké zajímavé informace. Příště se s výsledky své analýzy můžeš pochlubit ostatním.


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.