Skip to content

Commit accd2cf

Browse files
committed
Prevod lekce Nacteni dat z terminalu do programu
Closes #24
1 parent ae56abe commit accd2cf

File tree

1 file changed

+98
-43
lines changed

1 file changed

+98
-43
lines changed

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

Lines changed: 98 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,21 @@ Abychom si práci s DataFrame vyzkoušeli, vrátíme se k naší tabulce se sezn
2828

2929
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`.
3030

31-
Abychom tabulku načetli jako `DataFrame`, otevřeme si nejprve Python konzoli, importujeme modul `pandas` a načteme CSV soubor pomocí funkce `read_csv().`
31+
Abychom tabulku načetli jako `DataFrame`, vytvoříme si nový Python skript, importujeme modul `pandas` a načteme CSV soubor pomocí funkce `read_csv().`
3232

33-
```pycon
34-
>>> import pandas
35-
>>> nakupy = pandas.read_csv('nakupy.csv')
33+
```py
34+
import pandas
35+
nakupy = pandas.read_csv('nakupy.csv')
36+
print(nakupy)
3637
```
3738

3839
**Poznámka:** Modul `pandas` nabízí obrovské množství možností. Nemusíš si samozřejmě vše pamatovat, protože vše najdeš přehledně popsáno [v dokumentaci](https://pandas.pydata.org/docs/). Například funkce `read_csv` je [popsána zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html). Dokumentaci k samotnému DataFrame najdeš [zde](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html).
3940

4041
Funkce `read_csv` má spoustu nepovinných parametrů, o kterých si můžeme přečíst [v dokumentaci](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html). Například se tam dočteme, že `pandas` standardně nastavuje jako oddělovač sloupců čárku (parametr `sep`). Protože my většinou používáme středník, budeme muset tento parametr často nastavit. Náš soubor `nakupy.csv` ale používá čárku, takže nyní nic měnit nemusíš.
4142

42-
Celý DataFrame vypíšeme na obrazovku tak, že zobrazíme přímo proměnnou `nakupy`.
43+
Celý DataFrame vypíšeme na obrazovku pomocí funkce `print()`.
4344

44-
```pycon
45-
>>> nakupy
45+
```shell
4646
Jméno Datum Věc Částka v korunách
4747
0 Petr 2020-02-05 Prací prášek 399
4848
1 Ondra 2020-02-08 Savo 80
@@ -65,8 +65,13 @@ Pandas nabízí kromě funkce `read_csv()` také funkci pro čtení formátu JSO
6565

6666
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.
6767

68-
```pycon
69-
>>> nakupy.info()
68+
```py
69+
import pandas
70+
nakupy = pandas.read_csv('nakupy.csv')
71+
nakupy.info()
72+
```
73+
74+
```shell
7075
<class 'pandas.core.frame.DataFrame'>
7176
RangeIndex: 11 entries, 0 to 10
7277
Data columns (total 4 columns):
@@ -82,24 +87,35 @@ memory usage: 480.0+ bytes
8287

8388
Počet řádků a sloupců můžeme získat z vlastnosti `shape`:
8489

85-
```pycon
86-
>>> nakupy.shape
90+
```py
91+
import pandas
92+
nakupy = pandas.read_csv('nakupy.csv')
93+
print(nakupy.shape)
94+
```
95+
96+
```shell
8797
(11, 4)
8898
```
8999

90-
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `info` je ve skutečnosti funkce třídy `DataFrame`.
100+
**Poznámka:** Pokud znáš základy objektově orientovaného programování, pak věz, že `info` je ve skutečnosti funkce třídy `DataFrame`.
91101

92-
`pandas` nám vrací výsledky v sekvenci, která se jmenuje `tuple`. Nám stačí vědět, že si z ní data můžeme načíst stejně jako ze seznamu. Na prvním místě je vždy počet řádků a na druhém počet sloupců. Pokud by nás třeba zajímal jen počet řádků, napíšeme:
102+
`pandas` nám vrací výsledky v sekvenci, která se jmenuje `tuple`. Nám stačí vědět, že si z ní data můžeme načíst stejně jako ze seznamu. Na prvním místě je vždy počet řádků a na druhém počet sloupců. Pokud by nás třeba zajímal jen počet řádků, napíšeme:
93103

94-
```pycon
95-
>>> nakupy.shape[0]
104+
```py
105+
print(nakupy.shape[0])
106+
```
107+
108+
```shell
96109
11
97110
```
98111

99112
Názvy všech sloupců pak z vlastnosti `columns`:
100113

101-
```pycon
102-
>>> nakupy.columns
114+
```py
115+
print(nakupy.columns)
116+
```
117+
118+
```shell
103119
Index(['Jméno', 'Datum', 'Věc', 'Částka v korunách'], dtype='object')
104120
```
105121

@@ -110,8 +126,11 @@ V některých případech nás jako první při práci s daty napadne nějak si
110126

111127
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á.
112128

113-
```pycon
114-
>>> nakupy['Věc']
129+
```py
130+
print(nakupy['Věc'])
131+
```
132+
133+
```shell
115134
0 Prací prášek
116135
1 Savo
117136
2 Toaletní papír
@@ -130,8 +149,11 @@ Zde je důležité říct, že pokud vybíráme pouze jeden sloupec, vrátí se
130149

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

133-
```pycon
134-
>>> nakupy[['Jméno', 'Částka v korunách']]
152+
```py
153+
print(nakupy[['Jméno', 'Částka v korunách']])
154+
```
155+
156+
```shell
135157
Jméno Částka v korunách
136158
0 Petr 399
137159
1 Ondra 80
@@ -148,8 +170,11 @@ Pro výběr více sloupců musíme do indexace DataFrame vložit seznam s názvy
148170

149171
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.
150172

151-
```pycon
152-
>>> nakupy[['Věc']]
173+
```py
174+
print(nakupy[['Věc']])
175+
```
176+
177+
```shell
153178
Věc
154179
0 Prací prášek
155180
1 Savo
@@ -172,8 +197,11 @@ K vybrání jednoho konkrétního řádku můžeme použít `iloc[]`. `iloc` ná
172197

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

175-
```pycon
176-
>>> nakupy.iloc[3]
200+
```py
201+
print(nakupy.iloc[3])
202+
```
203+
204+
```shell
177205
Jméno Libor
178206
Datum 2020-03-05
179207
Věc Pivo
@@ -185,17 +213,23 @@ Všimni si, že když jsme chtěli pouze jeden řádek, vypsal se nám výsledek
185213

186214
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.
187215

188-
```pycon
189-
>>> nakupy.iloc[3:5]
216+
```py
217+
print(nakupy.iloc[3:5])
218+
```
219+
220+
```shell
190221
Jméno Datum Věc Částka v korunách
191222
3 Libor 2020-03-05 Pivo 124
192223
4 Petr 2020-03-18 Pytel na odpadky
193224
```
194225

195226
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]`.
196227

197-
```pycon
198-
>>> nakupy.iloc[:3]
228+
```py
229+
print(nakupy.iloc[:3])
230+
```
231+
232+
```shell
199233
Jméno Datum Věc Částka v korunách
200234
0 Petr 2020-02-05 Prací prášek 399
201235
1 Ondra 2020-02-08 Savo 80
@@ -204,8 +238,11 @@ Pokud se chceme podívat třeba na první tři řádky, nemusíme před dvojteč
204238

205239
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.
206240

207-
```pycon
208-
>>> nakupy.iloc[8:]
241+
```py
242+
print(nakupy.iloc[8:])
243+
```
244+
245+
```shell
209246
Jméno Datum Věc Částka v korunách
210247
8 Zuzka 2020-06-05 Savo 80
211248
9 Pavla 2020-06-13 Máslo 50
@@ -214,8 +251,11 @@ Podobně si můžeme nechat vypsat poslední tři řádky. Pokud víme, že řá
214251

215252
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.
216253

217-
```pycon
218-
>>> nakupy.iloc[-3:]
254+
```py
255+
print(nakupy.iloc[-3:])
256+
```
257+
258+
```shell
219259
Jméno Datum Věc Částka v korunách
220260
8 Zuzka 2020-06-05 Savo 80
221261
9 Pavla 2020-06-13 Máslo 50
@@ -227,8 +267,11 @@ Nevýhodou postupu je, že si musíme předem zjistit, jak kolik řádků máme.
227267

228268
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`.
229269

230-
```pycon
231-
>>> nakupy.head()
270+
```py
271+
print(nakupy.head())
272+
```
273+
274+
```shell
232275
Jméno Datum Věc Částka v korunách
233276
0 Petr 2020-02-05 Prací prášek 399
234277
1 Ondra 2020-02-08 Savo 80
@@ -239,8 +282,11 @@ Na prvních a posledních několik řádků se chceme podívat často, hlavně v
239282

240283
Často je užitečné podívat se spíše na konec souboru. Pokud jsou data seřazená podle času, uvidíme na konci souboru nejnovější data, která nás často (např. u kurzu měn nebo akcií) zajímají víc než dávná historie.
241284

242-
```pycon
243-
>>> nakupy.tail()
285+
```py
286+
print(nakupy.tail())
287+
```
288+
289+
```shell
244290
Jméno Datum Věc Částka v korunách
245291
6 Ondra 2020-04-22 Toaletní papír 120
246292
7 Míša 2020-05-05 Pečící papír 30
@@ -255,8 +301,11 @@ Kromě řádků si často chceme vybrat jen některé sloupce, protože mnoho ta
255301

256302
Pokud chceš například vypsat jména u prvních pět nákupů, jako první parametr napiš `:5` a jako druhý `0`.
257303

258-
```pycon
259-
>>> nakupy.iloc[:5,0]
304+
```py
305+
print(nakupy.iloc[:5,0])
306+
```
307+
308+
```shell
260309
0 Petr
261310
1 Ondra
262311
2 Petr
@@ -267,8 +316,11 @@ Name: Jméno, dtype: object
267316

268317
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]`.
269318

270-
```pycon
271-
>>> nakupy.iloc[:5,[0,3]]
319+
```py
320+
print(nakupy.iloc[:5,[0,3]])
321+
```
322+
323+
```shell
272324
Jméno Částka v korunách
273325
0 Petr 399
274326
1 Ondra 80
@@ -279,8 +331,11 @@ U sloupců ale často narazíme na to, že jich chceme několik, ale ony nutně
279331

280332
Pokud bys chtěla vidět všechny řádky, jako první parametr napiš pouze dvojtečku.
281333

282-
```pycon
283-
>>> nakupy.iloc[:,[0,3]]
334+
```py
335+
print(nakupy.iloc[:,[0,3]])
336+
```
337+
338+
```shell
284339
Jméno Částka v korunách
285340
0 Petr 399
286341
1 Ondra 80

0 commit comments

Comments
 (0)