Skip to content

Commit 0dfb69b

Browse files
committed
Úpravy v rozvržení kapitol
Načtení dat a Základní dotazy (Podmíněný výběr) Closes: #49
1 parent 553f291 commit 0dfb69b

File tree

15 files changed

+206
-214
lines changed

15 files changed

+206
-214
lines changed

python-pro-data-1/entry.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ lessons:
44
- instalace
55
- datova-analyza
66
- nacteni-dat
7-
- zakladni-dotazy
7+
- podmineny-vyber
88
- agregace-a-spojovani
9-
- vizualizace
9+
- vizualizace
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
## Výběr řádků pomocí čísla řádku
2+
3+
Jak už víme, v `pandas` má každý řádek přiřazený index. Jako index můžeme zvolit některý ze sloupců. Pokud však tabulku načteme bez toho, abychom specifikovali index, `pandas` nám vytvoří **číselný index** automaticky. Je to něco podobného jako číslování řádků v Excelu.
4+
5+
K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` nám umožní ptát se na konkrétní záznam podobně jako u sekvencí, jsou zde přítomné i hranaté závorky. `iloc` tedy ve skutečnosti není funkce, ale kromě jiného typu závorek s ní pracujeme jako s funkcí.
6+
7+
Zkusme si zobrazit třeba **čtvrtý** nákup. Číslujeme tradičně od nuly, jistě tě tedy nepřekvapí, že napíšeme `nakupy.iloc[3]`.
8+
9+
```py
10+
print(nakupy.iloc[3])
11+
```
12+
13+
```shell
14+
jmeno Libor
15+
datum 2020-03-05
16+
vec Pivo
17+
cena 124
18+
Name: 3, dtype: object
19+
```
20+
21+
Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek jinak orientovaný. Výběr jednoho řádku nám vrátí Sérii stejně jako v případě výběru jediného sloupce. Pohled na tento řádek pak máme orientovaný na výšku.
22+
23+
Metoda `iloc[]` umožňuje pro výběr řádků použít rozsah ve formátu `od:do`. K tomu používáme **dvojtečku**. Před dvojtečku píšeme první řádek, který chceme vypsat a za dvojtečku první řádek, který již vy výpisu nebude. Pokud tedy například napíšeme `nakupy.iloc[3:5]`, získáme řádky s indexy 3 a 4, ale už ne řádek s indexem 5.
24+
25+
```py
26+
print(nakupy.iloc[3:5])
27+
```
28+
29+
```shell
30+
jmeno datum vec cena
31+
3 Libor 2020-03-05 Pivo 124
32+
4 Petr 2020-03-18 Pytel na odpadky 75
33+
```
34+
35+
Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojtečku psát 0, stačí napsat `iloc[:3]`.
36+
37+
```py
38+
print(nakupy.iloc[:3])
39+
```
40+
41+
```shell
42+
jmeno datum vec cena
43+
0 Petr 2020-02-05 Prací prášek 399
44+
1 Ondra 2020-02-08 Savo 80
45+
2 Petr 2020-02-24 Toaletní papír 65
46+
```
47+
48+
Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řádků je 10, chceme vypsat řádky od osmého dále. Nyní se nabízí napsat číslo před dvojtečku. Píšeme tam ale 8, protože řádek, jehož číslo je před dvojtečkou, je vždy součástí výpisu.
49+
50+
```py
51+
print(nakupy.iloc[8:])
52+
```
53+
54+
```shell
55+
jmeno datum vec cena
56+
8 Zuzka 2020-06-05 Savo 80
57+
9 Pavla 2020-06-13 Máslo 50
58+
10 Ondra 2020-07-25 Káva 300
59+
```
60+
61+
Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme. U seznamů už ale existoval trik použití záporného čísla. Ten můžeš použít i v `pandas`. Pokud napíšeš `iloc[-3:]`, získáš též poslední tři řádky.
62+
63+
```py
64+
print(nakupy.iloc[-3:])
65+
```
66+
67+
```shell
68+
jmeno datum vec cena
69+
8 Zuzka 2020-06-05 Savo 80
70+
9 Pavla 2020-06-13 Máslo 50
71+
10 Ondra 2020-07-25 Káva 300
72+
```
73+
74+
### Výběr řádků a sloupců podle čísla
75+
76+
Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho tabulek obsahuje spoustu různých informací a ne všechny nás musejí zajímat. Čísla sloupců zadáváme jako druhý parametr funkce `iloc`.
77+
78+
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
79+
80+
```py
81+
print(nakupy.iloc[:5,0])
82+
```
83+
84+
```shell
85+
0 Petr
86+
1 Ondra
87+
2 Petr
88+
3 Libor
89+
4 Petr
90+
Name: jmeno, dtype: object
91+
```
92+
93+
U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně nemusí být vedle sebe. nás u nákupů asi bude nejvíce zajímat jméno a částka. Abychom dali dohromady dvě čísla, která neleží vedle sebe, můžeme použít seznam. Pro prvních pět nákupů tedy jako druhý parametr napíšeme `[0,3]`.
94+
95+
```py
96+
print(nakupy.iloc[:5,[0,3]])
97+
```
98+
99+
```shell
100+
jmeno cena
101+
0 Petr 399
102+
1 Ondra 80
103+
2 Petr 65
104+
3 Libor 124
105+
4 Petr 75
106+
```
107+
108+
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
109+
110+
```py
111+
print(nakupy.iloc[:,[0,3]])
112+
```
113+
114+
```shell
115+
jmeno cena
116+
0 Petr 399
117+
1 Ondra 80
118+
2 Petr 65
119+
3 Libor 124
120+
4 Petr 75
121+
5 Míša 130
122+
6 Ondra 120
123+
7 Míša 30
124+
8 Zuzka 80
125+
9 Pavla 50
126+
10 Ondra 300
127+
```

python-pro-data-1/nacteni-dat/entry.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ title: Načtení dat
22
lead: Pojďme načíst data do pandas a podívat se na ně
33
sections:
44
- nacteni-dat
5+
- vyber-sloupcu
6+
- cisla-radku
57
- excs
8+
- indexy
File renamed without changes.

python-pro-data-1/zakladni-dotazy/zakladni-dotazy.md renamed to python-pro-data-1/nacteni-dat/indexy.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
## Základní dotazy
2-
31
V této části si zkusíme napas nějaké základní dotazy na naše data. `pandas` umožňují napsat dotazy podobně jako jazyk SQL, k práci ale jeho znalost vůbec ne potřebujeme.
42

53
Tentokrát si vyzkoušíme načíst data ze souboru ve formátu JSON. Konkrétně budeme pracovat s daty o státech světa, která jsou stažená ze služby [restcountries](https://restcountries.com/). Data si můžeš [stáhnout zde](assets/staty.json). Opět platí, že si je musíš stáhnout do adresáře, kde máš právě otevřený terminál!
Lines changed: 5 additions & 208 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
## Načtení dat
2-
3-
Než s daty začneme pracovat, musíme si je nejprve načíst.
4-
5-
### Základní práce s DataFrame
1+
## Základní práce s DataFrame
62

73
V Pandas většinou pracujeme s datovou strukturou zvanou `DataFrame`. Je to tabulková datová struktura a funguje podobně jako tabulka v Excelu nebo v databázi. Můžeme jej považovat za další datový typ vedle slovníků a seznamů. `DataFrame` obsahuje data ve sloupcích, kde každý sloupec může mít různý datový typ, tedy například číslo, desetinné číslo, řetězec, pravdivostní hodnota a jiné.
84

@@ -24,7 +20,7 @@ Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce se sezn
2420
| Pavla | 2020-06-13 | Máslo | 50 |
2521
| Ondra | 2020-07-25 | Káva | 300 |
2622

27-
#### Načítání dat
23+
### Načítání dat
2824

2925
Tabulku výše si můžete stáhnout ve [formátu CSV](assets/nakupy.csv). Důležité je, že si soubor musíš uložit nebo zkopírovat do **stejného adresáře**, v jakém právě pracuješ ve Visual Studiu! To si ověříš pomocí příkazu `dir` ve Windows nebo `ls` v MacOS nebo Linuxu. Tento příkaz ti vypíše obsah aktuální adresáře. V přehledu souborů bys měla vidět soubor `nakupy.csv`.
3026

@@ -61,7 +57,7 @@ Všimni si, že `pandas` nám přidal nový sloupec s číslem řádku. Jedná s
6157

6258
Pandas nabízí kromě funkce `read_csv()` také funkci pro čtení formátu JSON `read_json()` nebo dokonce funkci pro čtení přímo Excelových tabulek `read_excel()`.
6359

64-
#### Základní informace o tabulce
60+
### Základní informace o tabulce
6561

6662
Jakmile máme tabulku načtenou, budeme o ní chtít vědět nějaké úplně základní údaje. K tomu nám pomůže metoda `info()`, která vrací souhrnné informace o celé tabulce: názvy sloupců, datové typy, počet neprázdných hodnot atd.
6763

@@ -119,153 +115,9 @@ print(nakupy.columns)
119115
Index(['jmeno', 'datum', 'vec', 'cena'], dtype='object')
120116
```
121117

118+
### Začátek a konec
122119

123-
### Výběr sloupců
124-
125-
V některých případech nás jako první při práci s daty napadne nějak si data zjednodušit. Například budeme chtít v DataFrame vybrat pouze některé sloupce, a to co nás nezajímá, můžeme zahodit.
126-
127-
K tomu použijeme výběr sloupců pomocí hranatých závorek. Zápis připomíná práci se seznamy - hranatou závorku napíšeme přímo za název proměnné, kde máme uložený `DataFrame`, a do ní vepíšeme název sloupce, který nás zajímá.
128-
129-
```py
130-
print(nakupy['vec'])
131-
```
132-
133-
```shell
134-
0 Prací prášek
135-
1 Savo
136-
2 Toaletní papír
137-
3 Pivo
138-
4 Pytel na odpadky
139-
5 Utěrky na nádobí
140-
6 Toaletní papír
141-
7 Pečící papír
142-
8 Savo
143-
9 Máslo
144-
10 Káva
145-
Name: vec, dtype: object
146-
```
147-
148-
Zde je důležité říct, že pokud vybíráme pouze jeden sloupec, vrátí se nám takzvaná **Série** (`Series`), což je jiný datový typ než DataFrame. Sérii si představme jako jednorozměrnou tabulku.
149-
150-
Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy sloupců.
151-
152-
```py
153-
print(nakupy[['jmeno', 'cena']])
154-
```
155-
156-
```shell
157-
jmeno cena
158-
0 Petr 399
159-
1 Ondra 80
160-
2 Petr 65
161-
3 Libor 124
162-
4 Petr 75
163-
5 Míša 130
164-
6 Ondra 120
165-
7 Míša 30
166-
8 Zuzka 80
167-
9 Pavla 50
168-
10 Ondra 300
169-
```
170-
171-
Tady se nám již vrátil datový typ DataFrame. Tohoto triku můžeme využít, když chceme získat pouze jeden sloupec, ale nechceme ho v datovém typu Série, ale jako DataFrame.
172-
173-
```py
174-
print(nakupy[['vec']])
175-
```
176-
177-
```shell
178-
vec
179-
0 Prací prášek
180-
1 Savo
181-
2 Toaletní papír
182-
3 Pivo
183-
4 Pytel na odpadky
184-
5 Utěrky na nádobí
185-
6 Toaletní papír
186-
7 Pečící papír
187-
8 Savo
188-
9 Máslo
189-
10 Káva
190-
```
191-
192-
### Výběr řádků pomocí čísla řádku
193-
194-
Jak už víme, v `pandas` má každý řádek přiřazený index. Jako index můžeme zvolit některý ze sloupců. Pokud však tabulku načteme bez toho, abychom specifikovali index, `pandas` nám vytvoří **číselný index** automaticky. Je to něco podobného jako číslování řádků v Excelu.
195-
196-
K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` nám umožní ptát se na konkrétní záznam podobně jako u sekvencí, jsou zde přítomné i hranaté závorky. `iloc` tedy ve skutečnosti není funkce, ale kromě jiného typu závorek s ní pracujeme jako s funkcí.
197-
198-
Zkusme si zobrazit třeba **čtvrtý** nákup. Číslujeme tradičně od nuly, jistě tě tedy nepřekvapí, že napíšeme `nakupy.iloc[3]`.
199-
200-
```py
201-
print(nakupy.iloc[3])
202-
```
203-
204-
```shell
205-
jmeno Libor
206-
datum 2020-03-05
207-
vec Pivo
208-
cena 124
209-
Name: 3, dtype: object
210-
```
211-
212-
Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek jinak orientovaný. Výběr jednoho řádku nám vrátí Sérii stejně jako v případě výběru jediného sloupce. Pohled na tento řádek pak máme orientovaný na výšku.
213-
214-
Metoda `iloc[]` umožňuje pro výběr řádků použít rozsah ve formátu `od:do`. K tomu používáme **dvojtečku**. Před dvojtečku píšeme první řádek, který chceme vypsat a za dvojtečku první řádek, který již vy výpisu nebude. Pokud tedy například napíšeme `nakupy.iloc[3:5]`, získáme řádky s indexy 3 a 4, ale už ne řádek s indexem 5.
215-
216-
```py
217-
print(nakupy.iloc[3:5])
218-
```
219-
220-
```shell
221-
jmeno datum vec cena
222-
3 Libor 2020-03-05 Pivo 124
223-
4 Petr 2020-03-18 Pytel na odpadky 75
224-
```
225-
226-
Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojtečku psát 0, stačí napsat `iloc[:3]`.
227-
228-
```py
229-
print(nakupy.iloc[:3])
230-
```
231-
232-
```shell
233-
jmeno datum vec cena
234-
0 Petr 2020-02-05 Prací prášek 399
235-
1 Ondra 2020-02-08 Savo 80
236-
2 Petr 2020-02-24 Toaletní papír 65
237-
```
238-
239-
Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řádků je 10, chceme vypsat řádky od osmého dále. Nyní se nabízí napsat číslo před dvojtečku. Píšeme tam ale 8, protože řádek, jehož číslo je před dvojtečkou, je vždy součástí výpisu.
240-
241-
```py
242-
print(nakupy.iloc[8:])
243-
```
244-
245-
```shell
246-
jmeno datum vec cena
247-
8 Zuzka 2020-06-05 Savo 80
248-
9 Pavla 2020-06-13 Máslo 50
249-
10 Ondra 2020-07-25 Káva 300
250-
```
251-
252-
Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme. U seznamů už ale existoval trik použití záporného čísla. Ten můžeš použít i v `pandas`. Pokud napíšeš `iloc[-3:]`, získáš též poslední tři řádky.
253-
254-
```py
255-
print(nakupy.iloc[-3:])
256-
```
257-
258-
```shell
259-
jmeno datum vec cena
260-
8 Zuzka 2020-06-05 Savo 80
261-
9 Pavla 2020-06-13 Máslo 50
262-
10 Ondra 2020-07-25 Káva 300
263-
```
264-
265-
266-
#### Začátek a konec jinak
267-
268-
Na prvních a posledních několik řádků se chceme podívat často, hlavně v případě, když moc dobře neznáme strukturu dat. Kromě funkce `iloc`, z níž se ti možná už začala točit hlava, k tomu ještě můžeme použít funkce `head` a `tail`.
120+
Na prvních a posledních několik řádků se chceme podívat často, hlavně v případě, když moc dobře neznáme strukturu dat. Můžeme k tomu použít metody `head` a `tail`.
269121

270122
```py
271123
print(nakupy.head())
@@ -294,58 +146,3 @@ print(nakupy.tail())
294146
9 Pavla 2020-06-13 Máslo 50
295147
10 Ondra 2020-07-25 Káva 300
296148
```
297-
298-
#### Výběr řádků a sloupců podle čísla
299-
300-
Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho tabulek obsahuje spoustu různých informací a ne všechny nás musejí zajímat. Čísla sloupců zadáváme jako druhý parametr funkce `iloc`.
301-
302-
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
303-
304-
```py
305-
print(nakupy.iloc[:5,0])
306-
```
307-
308-
```shell
309-
0 Petr
310-
1 Ondra
311-
2 Petr
312-
3 Libor
313-
4 Petr
314-
Name: jmeno, dtype: object
315-
```
316-
317-
U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně nemusí být vedle sebe. nás u nákupů asi bude nejvíce zajímat jméno a částka. Abychom dali dohromady dvě čísla, která neleží vedle sebe, můžeme použít seznam. Pro prvních pět nákupů tedy jako druhý parametr napíšeme `[0,3]`.
318-
319-
```py
320-
print(nakupy.iloc[:5,[0,3]])
321-
```
322-
323-
```shell
324-
jmeno cena
325-
0 Petr 399
326-
1 Ondra 80
327-
2 Petr 65
328-
3 Libor 124
329-
4 Petr 75
330-
```
331-
332-
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
333-
334-
```py
335-
print(nakupy.iloc[:,[0,3]])
336-
```
337-
338-
```shell
339-
jmeno cena
340-
0 Petr 399
341-
1 Ondra 80
342-
2 Petr 65
343-
3 Libor 124
344-
4 Petr 75
345-
5 Míša 130
346-
6 Ondra 120
347-
7 Míša 30
348-
8 Zuzka 80
349-
9 Pavla 50
350-
10 Ondra 300
351-
```

0 commit comments

Comments
 (0)