You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: python-pro-data-1/agregace-a-spojovani/agregace-a-spojovani.md
+19-29Lines changed: 19 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,18 +6,14 @@ V předchozí lekci jsme si ukázali, jak v `pandas` vytváříme `DataFrame` a
6
6
7
7
Abychom měli nějaký praktický příklad k procvičování, použijeme fiktivní data z výsledků maturitních zkoušek během jednoho týdne na nějakém menším gymnáziu. Maturita se odehrává ve třech místnostech: U202, U203 a U302. Máme tedy tři tabulky dat, z každé místnosti jednu. Níže si můžete prohlédnout příklad tabulky z místnosti U202. Všechny tabulky jsou ke stažení zde: [u202.csv](assets/u202.csv), [u203.csv](assets/u203.csv), [u302.csv](assets/u302.csv).
8
8
9
-
Pomocí příkazů níže si můžeš soubory stáhnout s využitím modulu `requests`.
9
+
Funkce `read_csv()` knihovny `pandas` umí stáhnout CSV soubor rovnou z internetu.
10
10
11
11
```pycon
12
-
import requests
13
-
14
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/assets/u202.csv")
15
-
open("u202.csv", "wb").write(r.content)
16
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/assets/u203.csv")
17
-
open("u203.csv", "wb").write(r.content)
18
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/assets/u302.csv")
@@ -44,7 +40,7 @@ V praxi se poměrně často setkáme s tím, že v datovém setu některé hodno
44
40
45
41
V `pandas`, ale i obecně v datové analýze, je možné se s chybějícími daty vypořádat různými způsoby:
46
42
47
-
1. Nejlepší je vždy ověření, proč údaje chybí (např. u poskytovatele dat) a pokud je to možné, zajistit jejich doplnění.
43
+
1. Nejlepší je vždy ověření, proč údaje chybí (např. u poskytovatele dat) a pokud je to možné, zajistit jejich doplnění.
48
44
1. Nahradit chybějící hodnoty jinými hodnotami.
49
45
1. Odstranit všechny řádky s chybějícími daty z datového setu.
50
46
1. Vyčlenit je do separátního datasetu a zpracovat je zvlášť.
@@ -55,20 +51,20 @@ Důležité je mít na paměti, že vyřazením některých řádků může doj
55
51
56
52
Předpokládejme, že jsme si ověřili, že data chybí skutečně pouze u studentů, kteří z daného předmětu nematurovali. Protože nás budou zajímat především statistiky jednotlivých předmětů, můžeme prázdné řádky vynechat, protože označují zkoušky, které ve skutečnosti neproběhly.
57
53
58
-
Načtěme si nejprve naši první tabulku jako DataFrame.
54
+
Pokud jsme tak ještě neučinili, načteme si naši první tabulku jako DataFrame.
59
55
60
56
```pycon
61
57
import pandas
62
58
u202 = pandas.read_csv('u202.csv')
63
59
```
64
60
65
-
Pokud Pandas narazí na prázdnou buňku, vloží místo ní do tabulky speciální hodnotu `NaN`, se kterou už jsme se setkali.
61
+
Pokud `pandas` narazí na prázdnou buňku, vloží místo ní do tabulky speciální hodnotu `NaN`, se kterou už jsme se setkali.
66
62
67
63
Série obsahují metodu `isnull()`, která vrátí pravdivostní sérii s hodnotou `True` všude tam, kde v původní sérii chybí hodnota. Metoda `notnull()` pracuje přesně opačně. Vrátí pravdivostní sérii s hodnotami `True` všude tam, kde v původní sérii hodnota nechybí.
68
64
69
65
```pycon
70
66
print(u202['znamka'].isnull())
71
-
67
+
72
68
0 True
73
69
1 False
74
70
2 False
@@ -121,7 +117,7 @@ Pokud chceme tyto tři DataFrame spojit do jednoho, můžeme použít funkci `co
121
117
maturita = pandas.concat([u202, u203, u302])
122
118
```
123
119
124
-
Pozor ale na to, že v takto vzniklém DataFrame se nám **rozbije index**, protože se prostě spojí za sebe indexy jednotlivých tabulek. Pokud chceme, aby Pandas při spojování index přepočítal, musíme nastavit hodnotu parametru `ignore_index` na `True`.
120
+
Pozor ale na to, že v takto vzniklém DataFrame se nám **rozbije index**, protože se prostě spojí za sebe indexy jednotlivých tabulek. Pokud chceme, aby `pandas` při spojování index přepočítal, musíme nastavit hodnotu parametru `ignore_index` na `True`.
@@ -146,15 +142,12 @@ Výslednou tabulku si můžete stáhnout jako soubor [maturita.csv](assets/matur
146
142
147
143
### Propojení dat
148
144
149
-
Pandas však umí `DataFrame` také propojit, což odpovídá SQL příkazu `JOIN`. Nyní si ukážeme, jak na to. U výsledné tabulky je důležité, že bude mít **více sloupců**, počet řádků závisí na konkrétním typu operace a na samotných datech, jak ještě uvidíme.
145
+
`pandas` však umí `DataFrame` také propojit, což odpovídá SQL příkazu `JOIN`. Nyní si ukážeme, jak na to. U výsledné tabulky je důležité, že bude mít **více sloupců**, počet řádků závisí na konkrétním typu operace a na samotných datech, jak ještě uvidíme.
150
146
151
147
Naše výsledky byly anonymní. Pokud bychom ale chtěli vytisknout maturitní vysvědčení, potřebujeme k číslům studenta zjistit jejich jména. Jména najdeme v samostatné tabulce [studenti.csv](assets/studenti.csv). Načtěme si jej jako `DataFrame`.
152
148
153
149
```pycon
154
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/assets/studenti.csv")
@@ -170,9 +163,9 @@ U operace `JOIN` jsou důležité dvě věci:
170
163
-**Podle jakého sloupce** (nebo jakých sloupců) dvě různé tabulky propojujeme.
171
164
- Co udělat v případě, že pro nějaké řádky **nemám ve druhé tabulce odpovídající hodnotu**.
172
165
173
-
Propojení tabulek se v Pandas dělá pomocí funkce `merge` (dokumentaci k ní je [zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html)). Ve výchozím nastavení funkce `merge` provádí spojení podle sloupců, které mají shodný název. V našem případě mají oba `DataFrame` sloupec `cisloStudenta`, je tedy použit tento sloupec. Je to přesně ten sloupec, podle kterého bychom je chtěli spojit.
166
+
Propojení tabulek se v `pandas` dělá pomocí funkce `merge` (dokumentaci k ní je [zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html)). Ve výchozím nastavení funkce `merge` provádí spojení podle sloupců, které mají shodný název. V našem případě mají oba `DataFrame` sloupec `cisloStudenta`, je tedy použit tento sloupec. Je to přesně ten sloupec, podle kterého bychom je chtěli spojit.
174
167
175
-
Ve výchozím nastavení funkce `merge()` ponechá pouze řádky, které mají záznamy v obou tabulkách. V SQL bychom tuto operaci označili jako `INNER JOIN`.
168
+
Ve výchozím nastavení funkce `merge()` ponechá pouze řádky, které mají záznamy v obou tabulkách. V SQL bychom tuto operaci označili jako `INNER JOIN`.
176
169
177
170
```pycon
178
171
propojeny_df = pandas.merge(u202, studenti)
@@ -200,10 +193,7 @@ Zde vidíme, že data jsou zřejmě v pořádku.
200
193
Dále připojíme tabulku [predsedajici.csv](assets/predsedajici.csv), kde máme vypsané předsedy maturitních komisí. Tu si opět načteme jako `DataFrame`.
201
194
202
195
```pycon
203
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/assets/predsedajici.csv")
@@ -235,14 +225,14 @@ Zatím to vypadá dobře. Pokud se ovšem podíváme na `shape`, něco nám tady
235
225
236
226
```pycon
237
227
print(novy_propojeny_df.shape)
238
-
228
+
239
229
(10, 8)
240
230
```
241
231
242
232
Najednou máme v tabulce pouze 12 řádků, některé tedy zmizely. To znamená, že funkce `merge()` nenašla pro všechna zkoušení odpovídajícího předsedu. Jak je to možné? Zkusme nyní říct funkci `merge()`, aby nám zachovala v prvním `DataFrame` ty řádky, pro které nenajde odpovídající záznam. Této operaci se v jazyce SQL říká LEFT OUTER JOIN. My ho provede tak, že funkci `merge()` jako parametr `how` zadáme hodnotu `left`.
Z databází známe kromě UNION a JOIN také operaci GROUP BY. V Pandas ji provedeme tak, že pomocí metody `groupby` vyrobíme z `DataFrame` speciální objekt `DataFrameGroupBy`. Dejme tomu, že chceme grupovat podle sloupečku `mistnost`.
271
+
Z databází známe kromě UNION a JOIN také operaci GROUP BY. V `pandas` ji provedeme tak, že pomocí metody `groupby` vyrobíme z `DataFrame` speciální objekt `DataFrameGroupBy`. Dejme tomu, že chceme grupovat podle sloupečku `mistnost`.
282
272
283
273
```pycon
284
274
maturita.groupby('mistnost')
@@ -320,7 +310,7 @@ Pomocí agregací můžeme vyřešit i náš problém s nákupy. Pokud máme st
320
310
321
311
```pycon
322
312
nakupy = pandas.read_csv('nakupy.csv')
323
-
nakupy_celkem = nakupy.groupby("Jméno")["Částka v korunách"].sum()
313
+
nakupy_celkem = nakupy.groupby("Jméno")["Částka v korunách"].sum()
Copy file name to clipboardExpand all lines: python-pro-data-1/agregace-a-spojovani/excs/studenti/exercise.md
+4-7Lines changed: 4 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,14 +6,11 @@ demand: 3
6
6
Stáhni si datové sety, se kterými budeme pracovat v tomto cvičení: [jmena.csv](assets/jmena.csv), [studenti1.csv](assets/studenti1.csv), [studenti2.csv](assets/studenti2.csv).
7
7
8
8
```pycon
9
-
import requests
9
+
import pandas
10
10
11
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/excs/studenti/assets/jmena.csv")
12
-
open("jmena.csv", "wb").write(r.content)
13
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/excs/studenti/assets/studenti1.csv")
14
-
open("studenti1.csv", "wb").write(r.content)
15
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/agregace-a-spojovani/excs/studenti/assets/studenti2.csv")
První set už známe z minulé lekce. Druhé dva sety obsahují seznam studentů na nějaké menší IT fakultě. Pozor, tato data nemají žádnou souvislost s výsledky maturity, které jsme procházeli během lekce.
Copy file name to clipboardExpand all lines: python-pro-data-1/vizualizace/excs/call-centrum/exercise.md
+4-7Lines changed: 4 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,16 +4,13 @@ demand: 2
4
4
---
5
5
6
6
7
-
V souboru [callcentrum.txt](assets/callcentrum.csv) najdete několik tisíc záznamů pro call centrum, které udávají časy mezi jednotlivými příchozími hovory v minutách a vteřinách. Načtěte tato data do série v Pythonu. Časy převeďte na vteřiny a zobrazte jejich histogram a boxplot. Co lze z těchto dvou grafů vyčíst?
7
+
V souboru [callcentrum.csv](assets/callcentrum.csv) najdete několik tisíc záznamů pro call centrum, které udávají časy mezi jednotlivými příchozími hovory v minutách a vteřinách. Načtěte tato data do série v Pythonu. Časy převeďte na vteřiny a zobrazte jejich histogram a boxplot. Co lze z těchto dvou grafů vyčíst?
8
8
9
-
K převodu na vteřiny můžeš použít metodu `str.split()`. Pomocí ní rozdělíš hodnoty minut a vteřit do samostatných sloupců. Pomocí metody `astype(int)` převedeš hodnoty na čísla. Poté pomocí počítaných sloupců můžeš spočítat celkový počet vteřin.
9
+
K převodu na vteřiny můžeš použít metodu `str.split()`. Pomocí ní rozdělíš hodnoty minut a vteřin do samostatných sloupců. Pomocí metody `astype(int)` převedeš hodnoty na čísla. Poté pomocí počítaných sloupců můžeš spočítat celkový počet vteřin.
10
10
11
11
```pycon
12
-
import requests
12
+
import pandas
13
13
14
-
r = requests.get("https://kodim.cz/czechitas/progr2-python/python-pro-data-1/vizualizace/excs/call-centrum/assets/callcentrum.csv")
0 commit comments