Skip to content

Commit bfc82b7

Browse files
committed
Ruzne fixy kurzu Python Data 1
1 parent 643b97d commit bfc82b7

File tree

8 files changed

+162
-162
lines changed

8 files changed

+162
-162
lines changed

python-pro-data-1/datova-analyza/datova-analyza.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ Kromě CVS používáme další dva důležité formáty: JSON (JavaScript Objec
8585

8686
Formát JSON ti bude povědomý, pokud už jsi v Pythonu pracoval(a) se slovníky (`dict`). Na první pohled vypadají téměř stejně. Python ti navíc jednoduše umožní data ve formátu JSON převést na slovníky a seznamy. K tomu slouží modul příhodně pojmenovaný `json`. S tímto formátem si ale hravě poradí i `pandas`.
8787

88-
```
88+
```json
8989
[
9090
{
9191
"Jméno": "Petr",
@@ -147,7 +147,7 @@ Formát JSON ti bude povědomý, pokud už jsi v Pythonu pracoval(a) se slovník
147147

148148
Dalším používaným formátem je XML. XML je velmi podobné HTML, tedy jazyku, kterým určujeme, jak má vypadat webová stránka.
149149

150-
```
150+
```xml
151151
<?xml version="1.0" encoding="UTF-8"?>
152152
<nákupy>
153153
<nákup jméno="Petr" věc="Prací prášek">399</nákup>
@@ -178,7 +178,7 @@ U obou formátů musíme dodržovat základní pravidla, jinak bude soubor pro p
178178

179179
Nejnovějším z formátů je YAML (YAML Ain't Markup Language), který vznikl v roce 2011. Byl vyvinut s ohledem pro snadnou čtenost člověkem.
180180

181-
```
181+
```yaml
182182
- Jméno: Petr
183183
Věc: Prací prášek
184184
Částka v korunách: 399

python-pro-data-1/nacteni-dat/nacteni-dat.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Než s daty začneme pracovat, musíme si je nejprve načíst.
66

77
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é.
88

9-
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `DataFrame` je ve skutečnosti třída a my na jejím základě budeme vytvářet objekty.
9+
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `DataFrame` je ve skutečnosti třída a my na jejím základě budeme vytvářet objekty.
1010

1111
Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce se seznamem nákupů.
1212

@@ -70,12 +70,12 @@ Jakmile máme tabulku načtenou, budeme o ní chtít vědět nějaké úplně z
7070
<class 'pandas.core.frame.DataFrame'>
7171
RangeIndex: 11 entries, 0 to 10
7272
Data columns (total 4 columns):
73-
# Column Non-Null Count Dtype
74-
--- ------ -------------- -----
73+
# Column Non-Null Count Dtype
74+
--- ------ -------------- -----
7575
0 Jméno 11 non-null object
7676
1 Datum 11 non-null object
7777
2 Věc 11 non-null object
78-
3 Částka v korunách 11 non-null int64
78+
3 Částka v korunách 11 non-null int64
7979
dtypes: int64(1), object(3)
8080
memory usage: 480.0+ bytes
8181
```
@@ -110,7 +110,7 @@ V některých případech nás jako první při práci s daty napadne nějak si
110110

111111
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á.
112112

113-
```
113+
```pycon
114114
>>> nakupy['Věc']
115115
0 Prací prášek
116116
1 Savo
@@ -130,7 +130,7 @@ Zde je důležité říct, že pokud vybíráme pouze jeden sloupec, vrátí se
130130

131131
Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy sloupců.
132132

133-
```
133+
```pycon
134134
>>> nakupy[['Jméno', 'Částka v korunách']]
135135
Jméno Částka v korunách
136136
0 Petr 399
@@ -148,7 +148,7 @@ Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy
148148

149149
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.
150150

151-
```
151+
```pycon
152152
>>> nakupy[['Věc']]
153153
Věc
154154
0 Prací prášek
@@ -172,8 +172,8 @@ K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` ná
172172

173173
Zkusme si zobrazit třeba **čtvrtý** nákup. Číslujeme tradičně od nuly, jistě tě tedy nepřekvapí, že napíšeme `nakupy.iloc[3]`.
174174

175-
```
176-
>>> nakupy.iloc[3]
175+
```pycon
176+
>>> nakupy.iloc[3]
177177
Jméno Libor
178178
Datum 2020-03-05
179179
Věc Pivo
@@ -186,16 +186,16 @@ Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek
186186
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.
187187

188188
```pycon
189-
>>> nakupy.iloc[3:5]
189+
>>> nakupy.iloc[3:5]
190190
Jméno Datum Věc Částka v korunách
191191
3 Libor 2020-03-05 Pivo 124
192-
4 Petr 2020-03-18 Pytel na odpadky
192+
4 Petr 2020-03-18 Pytel na odpadky
193193
```
194194

195195
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]`.
196196

197197
```pycon
198-
>>> nakupy.iloc[:3]
198+
>>> nakupy.iloc[:3]
199199
Jméno Datum Věc Částka v korunách
200200
0 Petr 2020-02-05 Prací prášek 399
201201
1 Ondra 2020-02-08 Savo 80
@@ -205,7 +205,7 @@ Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojteč
205205
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.
206206

207207
```pycon
208-
>>> nakupy.iloc[8:]
208+
>>> nakupy.iloc[8:]
209209
Jméno Datum Věc Částka v korunách
210210
8 Zuzka 2020-06-05 Savo 80
211211
9 Pavla 2020-06-13 Máslo 50
@@ -215,7 +215,7 @@ Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řá
215215
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.
216216

217217
```pycon
218-
>>> nakupy.iloc[-3:]
218+
>>> nakupy.iloc[-3:]
219219
Jméno Datum Věc Částka v korunách
220220
8 Zuzka 2020-06-05 Savo 80
221221
9 Pavla 2020-06-13 Máslo 50
@@ -268,7 +268,7 @@ Name: Jméno, dtype: object
268268
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]`.
269269

270270
```pycon
271-
>>> nakupy.iloc[:5,[0,3]]
271+
>>> nakupy.iloc[:5,[0,3]]
272272
Jméno Částka v korunách
273273
0 Petr 399
274274
1 Ondra 80
@@ -280,7 +280,7 @@ U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně
280280
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
281281

282282
```pycon
283-
>>> nakupy.iloc[:,[0,3]]
283+
>>> nakupy.iloc[:,[0,3]]
284284
Jméno Částka v korunách
285285
0 Petr 399
286286
1 Ondra 80

python-pro-data-1/vizualizace/excs/hura-na-hory.md

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,56 +7,56 @@ Následující data obsahují úhrnné množství sněhu (v cm) napadlé za kaž
77

88
```pycon
99
snih = [
10-
[1968, 480, 351],
11-
[1969, 462, 663],
12-
[1970, 443, 490],
13-
[1971, 518, 444],
14-
[1972, 537, 420],
15-
[1973, 446, 941],
16-
[1974, 446, 691],
17-
[1975, 450, 477],
18-
[1976, 356, 395],
19-
[1977, 381, 652],
20-
[1978, 345, 525],
21-
[1979, 430, 762],
22-
[1980, 266, 316],
23-
[1981, 533, 781],
24-
[1982, 471, 769],
25-
[1983, 407, 801],
26-
[1984, 526, 633],
27-
[1985, 391, 488],
28-
[1986, 361, 624],
29-
[1987, 470, 471],
30-
[1988, 506, 514],
31-
[1989, 333, 208],
32-
[1990, 462, 909],
33-
[1991, 438, 443],
34-
[1992, 364, 488],
35-
[1993, 452, 579],
36-
[1994, 484, 519],
37-
[1995, 460, 809],
38-
[1996, 465, 682],
39-
[1997, 431, 814],
40-
[1998, 463, 595],
41-
[1999, 460, 512],
42-
[2000, 503, 750],
43-
[2001, 462, 951],
44-
[2002, 429, 413],
45-
[2003, 405, 738],
46-
[2004, 477, 777],
47-
[2005, 385, 316],
48-
[2006, 368, 417],
49-
[2007, 513, 635],
50-
[2008, 448, 689],
51-
[2009, 525, 443],
52-
[2010, 427, 225],
53-
[2011, 460, 618],
54-
[2012, 417, 742],
55-
[2013, 517, 247],
56-
[2014, 466, 552],
57-
[2015, 523, 441],
58-
[2016, 422, 690],
59-
[2017, 420, 699]
10+
[1968, 480, 351],
11+
[1969, 462, 663],
12+
[1970, 443, 490],
13+
[1971, 518, 444],
14+
[1972, 537, 420],
15+
[1973, 446, 941],
16+
[1974, 446, 691],
17+
[1975, 450, 477],
18+
[1976, 356, 395],
19+
[1977, 381, 652],
20+
[1978, 345, 525],
21+
[1979, 430, 762],
22+
[1980, 266, 316],
23+
[1981, 533, 781],
24+
[1982, 471, 769],
25+
[1983, 407, 801],
26+
[1984, 526, 633],
27+
[1985, 391, 488],
28+
[1986, 361, 624],
29+
[1987, 470, 471],
30+
[1988, 506, 514],
31+
[1989, 333, 208],
32+
[1990, 462, 909],
33+
[1991, 438, 443],
34+
[1992, 364, 488],
35+
[1993, 452, 579],
36+
[1994, 484, 519],
37+
[1995, 460, 809],
38+
[1996, 465, 682],
39+
[1997, 431, 814],
40+
[1998, 463, 595],
41+
[1999, 460, 512],
42+
[2000, 503, 750],
43+
[2001, 462, 951],
44+
[2002, 429, 413],
45+
[2003, 405, 738],
46+
[2004, 477, 777],
47+
[2005, 385, 316],
48+
[2006, 368, 417],
49+
[2007, 513, 635],
50+
[2008, 448, 689],
51+
[2009, 525, 443],
52+
[2010, 427, 225],
53+
[2011, 460, 618],
54+
[2012, 417, 742],
55+
[2013, 517, 247],
56+
[2014, 466, 552],
57+
[2015, 523, 441],
58+
[2016, 422, 690],
59+
[2017, 420, 699]
6060
]
6161
snihdf = pandas.DataFrame(snih, columns=['rok', 'hora', 'udoli'])
6262
snihdf = snihdf.set_index('rok')

python-pro-data-1/vizualizace/vizualizace.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ Histogram je důležitý typ grafu, který nám umožňuje zobrazit četnost hod
7575

7676
```pycon
7777
muzi = pandas.Series([
78-
179.3, 183.7, 181.4, 176.0, 183.6, 184.7, 163.4, 180.3,
79-
167.5, 166.8, 173.5, 172.5, 173.0, 177.6, 176.0, 179.5,
80-
182.6, 172.0, 183.2, 177.0, 176.2, 175.7, 174.3, 180.3,
81-
184.9, 171.1, 182.3, 169.7, 181.3, 188.8, 176.8, 159.0,
82-
180.3, 198.5, 185.8, 191.0, 170.9, 196.0, 183.3, 183.0,
83-
189.9, 184.8, 184.0, 183.1, 184.0, 190.7, 191.7, 187.8,
84-
177.5, 177.5, 189.2, 188.4, 195.0, 204.2, 180.2, 181.3,
85-
178.2, 182.6, 172.1, 175.7, 180.7, 181.2, 165.0, 188.6
78+
179.3, 183.7, 181.4, 176.0, 183.6, 184.7, 163.4, 180.3,
79+
167.5, 166.8, 173.5, 172.5, 173.0, 177.6, 176.0, 179.5,
80+
182.6, 172.0, 183.2, 177.0, 176.2, 175.7, 174.3, 180.3,
81+
184.9, 171.1, 182.3, 169.7, 181.3, 188.8, 176.8, 159.0,
82+
180.3, 198.5, 185.8, 191.0, 170.9, 196.0, 183.3, 183.0,
83+
189.9, 184.8, 184.0, 183.1, 184.0, 190.7, 191.7, 187.8,
84+
177.5, 177.5, 189.2, 188.4, 195.0, 204.2, 180.2, 181.3,
85+
178.2, 182.6, 172.1, 175.7, 180.7, 181.2, 165.0, 188.6
8686
])
8787
```
8888

@@ -99,7 +99,7 @@ Histogram si pro přehlednost můžeme rozdělit do <term cs="přihrádek" en="b
9999

100100
```pycon
101101
muzi.hist(bins=[
102-
150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210
102+
150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210
103103
])
104104
plt.show()
105105
```
@@ -121,14 +121,14 @@ Krabicové grafy jsou užitečné především pro porovnání dvou různých m
121121

122122
```pycon
123123
zeny = pandas.Series([
124-
172.0, 169.0, 166.8, 164.6, 172.7, 171.5, 167.0, 167.0,
125-
168.3, 184.7, 166.0, 160.0, 168.8, 165.8, 173.5, 163.0,
126-
168.9, 158.4, 166.4, 169.4, 174.2, 175.6, 167.2, 168.0,
127-
171.5, 168.8, 168.9, 174.1, 169.0, 170.7, 156.3, 174.8,
128-
169.1, 161.4, 172.5, 166.1, 171.5, 163.9, 164.5, 169.0,
129-
168.5, 163.3, 169.5, 167.4, 175.5, 165.0, 166.6, 158.9,
130-
164.5, 168.7, 161.6, 175.8, 179.0, 167.9, 161.1, 167.6,
131-
165.9, 165.2, 176.0, 179.4, 160.1, 163.8, 177.7, 160.4
124+
172.0, 169.0, 166.8, 164.6, 172.7, 171.5, 167.0, 167.0,
125+
168.3, 184.7, 166.0, 160.0, 168.8, 165.8, 173.5, 163.0,
126+
168.9, 158.4, 166.4, 169.4, 174.2, 175.6, 167.2, 168.0,
127+
171.5, 168.8, 168.9, 174.1, 169.0, 170.7, 156.3, 174.8,
128+
169.1, 161.4, 172.5, 166.1, 171.5, 163.9, 164.5, 169.0,
129+
168.5, 163.3, 169.5, 167.4, 175.5, 165.0, 166.6, 158.9,
130+
164.5, 168.7, 161.6, 175.8, 179.0, 167.9, 161.1, 167.6,
131+
165.9, 165.2, 176.0, 179.4, 160.1, 163.8, 177.7, 160.4
132132
])
133133
```
134134

python-pro-data-1/zakladni-dotazy/zakladni-dotazy.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Tentokrát si vyzkoušíme načíst data ze souboru ve formátu JSON. Konkrétn
66

77
### Indexy
88

9-
Pokud ještě nemáš otevřený Python terminál, otevři si ho. Soubor načteme pomocí funkce `read_json`, kde jako první parametr zadáme název souboru. Data jsou opět vrácena jako `DataFrame` a my si je uložíme do proměnné `staty`. U dat o státech světa však můžeme přidat jedno zlepšení. Víme, že každý stát na světě má svůj název a ten název je **unikátní** a **identifikuje ho**. Můžeme tedy tento název použít jako **index**.
9+
Pokud ještě nemáš otevřený Python terminál, otevři si ho. Soubor načteme pomocí funkce `read_json`, kde jako první parametr zadáme název souboru. Data jsou opět vrácena jako `DataFrame` a my si je uložíme do proměnné `staty`. U dat o státech světa však můžeme přidat jedno zlepšení. Víme, že každý stát na světě má svůj název a ten název je **unikátní** a **identifikuje ho**. Můžeme tedy tento název použít jako **index**.
1010

1111
**K zamyšlení:** Jaký index bychom použili pro tabulku zaměstnanců ve firmě, tabulku obcí České republice a tabulku aut v autopůjčovně? Pamatuj, že index by měl být unikátní.
1212

@@ -61,7 +61,7 @@ Z názvů sloupců bychom mohli odvodit, jaké informace se v našem `DataFrame`
6161
K nalezení řádku pomocí indexu použijeme `loc`, která funguje obdobně jako funkce `iloc`. Oproti ní však primárně používá námi zvolené indexy, zatímco funkce `iloc` pracuje s čísly řádků. Opět platí, že používáme hranaté závorky, protože `loc` není běžná funkce.
6262

6363
```pycon
64-
>>> staty.loc["Czech Republic"]
64+
>>> staty.loc["Czech Republic"]
6565
alpha2Code CZ
6666
alpha3Code CZE
6767
capital Prague
@@ -169,11 +169,11 @@ V datové analýze podmínkám rozhodně neutečeš. Podmínky jsou velmi užite
169169
V jazyce SQL píšeme podmínky za klíčové slovo `WHERE`, v Excelu můžeme použít funkce Filtr atd. V `pandas` používáme funkci `query`. Název této funkce si ale pamatovat nemusíš, protože namísto ní opět můžeme použít hranaté závorky.
170170

171171
Začněme s tím, že se podíváme na nejmenší státy, které na světě jsou. Nechme si například vypsat státy, které mají méně než 1000 obyvatel. Postup si vysvětlíme ve dvou krocích.
172-
172+
173173
Nejprve potřebujeme formulovat podmínku. Ta bude vypadat takto `staty["population"] < 1000`. V podmínce máme sloupec, na který se ptáme, a porovnání s číselnou hodnotou. Používáme nám již známý operátor menší než (`<`). Zkusme si zadat samotnou podmínku do terminálu a podívejme se na výsledek.
174174

175175
```pycon
176-
>>> staty["population"] < 1000
176+
>>> staty["population"] < 1000
177177
name
178178
Afghanistan False
179179
Åland Islands False
@@ -195,7 +195,7 @@ My v naší tabulce ale máme 250 států s různými počty obyvatel, proto ná
195195

196196
```pycon
197197
>>> pidistaty = staty[staty["population"] < 1000]
198-
>>> pidistaty[["population", "area"]]
198+
>>> pidistaty[["population", "area"]]
199199
population area
200200
name
201201
Bouvet Island 0 49.00
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
title: Web scraping
22
lead: Naučíte se jak ve vašich Python programech vytáhnout data z webových stránek.
33
sections:
4+
- html
45
- webscraping

0 commit comments

Comments
 (0)