Skip to content

Opravy #84

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions python-pro-data-1/nacteni-dat/nacteni-dat.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ Celý DataFrame vypíšeme na obrazovku pomocí funkce `print()`.

Všimni si, že `pandas` nám přidal nový sloupec s číslem řádku. Jedná se o **index**, se kterým budeme později pracovat. Index je hodnota, která identifikuje řádek. V některých případech nemusíme jako index používat číslo řádku, ale můžeme jako index vybrat některý ze sloupců. Obdobnou funkci má v databázích **primární klíč**. Jako *best practice* se většinou uvádí, že index by měl být **unikátní**, i když to `pandas` (na rozdíl od právě databází) nevyžadují. Na druhou stranu, práce s tabulkou, kde index není unikátní, je [pomalejší](https://stackoverflow.com/q/16626058/4693904).

My bychom si jako index zvolit sloupec `fdc_id`.
My bychom si jako index mohli zvolit sloupec `fdc_id`. To bychom provedli pomocí metody `set_index()`.

```py
food.set_index("fdc_id", inplace=True)
```

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()`.

Expand All @@ -37,7 +41,7 @@ Jakmile máme tabulku načtenou, budeme o ní chtít vědět nějaké úplně z
food.info()
```

Výsledek je vidět níže.
Výsledek je vidět níže. Takto vypadá výsledek v případě, že nenastavíme sloupec `fdc_id` jako index. Pokud bychom to udělali, v seznamu sloupců `fdc_id` neuvidíme.

```shell
<class 'pandas.core.frame.DataFrame'>
Expand Down Expand Up @@ -86,6 +90,8 @@ Názvy všech sloupců pak z vlastnosti `columns`:
print(food.columns)
```

Níže je výstup příkazu. Opět platí, že kdybychom nastavili sloupec `fdc_id` jako index, tak tímto příkazem vypsán nebude.

```shell
Index(['fdc_id', 'data_type', 'description', 'food_category_id', 'publication_date'], dtype='object')
```
Expand Down
270,674 changes: 135,337 additions & 135,337 deletions python-pro-data-1/podmineny-vyber/assets/food_nutrient.csv

Large diffs are not rendered by default.

This file was deleted.

This file was deleted.

101 changes: 101 additions & 0 deletions python-pro-data-1/podmineny-vyber/excs/ceska-jmena/assets/jmena.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
jméno,četnost,věk,pohlaví,původ
Jiří,296090,49,m,řecký
Jan,293938,40,m,hebrejský
Petr,272135,42,m,řecký
Jana,264944,50,ž,hebrejský
Marie,260526,65,ž,hebrejský
Josef,211317,57,m,hebrejský
Pavel,200997,46,m,latinský
Martin,188380,33,m,latinský
Tomáš,181926,30,m,aramejský
Jaroslav,172785,55,m,slovanský
Eva,152463,53,ž,hebrejský
Miroslav,147753,52,m,slovanský
Hana,145901,51,ž,hebrejský
Anna,134819,51,ž,hebrejský
Zdeněk,126094,54,m,slovanský
Václav,123927,51,m,slovanský
Michal,123324,32,m,hebrejský
František,122910,58,m,italský
Lenka,118763,40,ž,neznámý
Kateřina,118127,29,ž,řecký
Lucie,111937,27,ž,latinský
Jakub,108013,19,m,hebrejský
Milan,107458,51,m,slovanský
Věra,107388,63,ž,slovanský
Alena,105093,55,ž,hebrejský
Karel,104072,55,m,straroněmecký
Lukáš,102982,23,m,latinský
Petra,102693,35,ž,řecký
David,101311,25,m,hebrejský
Veronika,88854,25,ž,řecký
Jaroslava,84556,63,ž,slovanský
Vladimír,83762,56,m,slovanský
Tereza,83692,18,ž,řecký
Martina,81312,36,ž,latinský
Michaela,78823,28,ž,hebrejský
Jitka,78187,51,ž,hebrejský
Ondřej,76225,22,m,řecký
Helena,74391,58,ž,řecký
Ludmila,72750,65,ž,slovanský
Ladislav,69797,55,m,slovanský
Zdeňka,69060,61,ž,slovanský
Ivana,68917,49,ž,slovanský
Roman,67754,40,m,latinský
Monika,63857,35,ž,řecký
Marek,63088,27,m,latinský
Stanislav,61889,54,m,slovanský
Eliška,61517,24,ž,hebrejský
Zuzana,61382,34,ž,hebrejský
Daniel,60935,23,m,hebrejský
Markéta,59734,32,ž,řecký
Jarmila,59666,65,ž,slovanský
Radek,58589,36,m,slovanský
Barbora,57201,22,ž,řecký
Jiřina,55366,64,ž,řecký
Antonín,53794,51,m,latinský
Marcela,53654,50,ž,latinský
Vojtěch,52802,22,m,slovanský
Kristýna,51422,18,ž,řecký
Dana,50781,51,ž,hebrejský
Dagmar,50646,55,ž,skandinávský
Filip,50464,17,m,řecký
Adam,47837,14,m,hebrejský
Adéla,45156,15,ž,germánský
Pavla,41774,43,ž,latinský
Vlasta,41736,68,ž,slovanský
Andrea,41151,31,ž,řecký
Miroslava,41151,54,ž,slovanský
Irena,41054,56,ž,řecký
Božena,39851,72,ž,slovanský
Klára,39600,22,ž,latinský
Libuše,39269,66,ž,slovanský
Marta,38897,63,ž,aramejský
Matěj,38519,13,m,hebrejský
Šárka,38339,37,ž,slovanský
Nikola,37996,19,ž,řecký
Karolína,36997,15,ž,německý
Iveta,36461,41,ž,německý
Pavlína,35863,37,ž,latinský
Natálie,33761,11,ž,řecký
Olga,33669,58,ž,skandinávský
Dominik,33322,14,m,latinský
Aleš,33074,38,m,řecký
Miloslav,32769,60,m,slovanský
Blanka,31516,54,ž,latinský
Gabriela,31175,33,ž,hebrejský
Jaromír,30984,55,m,slovanský
Patrik,30682,20,m,latinský
Renata,30617,44,ž,latinský
Libor,30464,44,m,latinský
Aneta,29840,17,ž,hebrejský
Simona,29618,30,ž,hebrejský
Růžena,28952,69,ž,slovanský
Radka,26939,38,ž,slovanský
Daniela,26536,38,ž,hebrejský
Denisa,26299,23,ž,řecký
Jindřich,26230,51,m,německý
Vlastimil,26014,54,m,slovanský
Iva,26003,46,ž,slovanský
Miloš,25509,53,m,slovanský
Zdenka,25416,68,ž,slovanský
16 changes: 16 additions & 0 deletions python-pro-data-1/podmineny-vyber/excs/ceska-jmena/exercise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
title: Česká jména
demand: 3
---

Stáhni si soubor [jmena.csv](assets/jmena.csv), která obsahuje nejpoužívanější česká jména.

1. Vypiš všechny řádky se jmény, jejichž nositelé mají průměrný věk vyšší než 60.
1. Vypiš pouze jména z těch řádků, kde četnost je mezi 80 000 a 100 000.
1. Vypiš jména a četnost pro jména se slovanským nebo hebrejským původem. Kolik takových jmen je?

Pro poslední úkol můžeš využít operátor `|`. Alternativně si můžeš vyzkoušet metodu `.isin()`, která zápis zkrátí. Jako parametr vkládáme seznam hodnot, které vyhovují podmínce. Níže je příklad použití metody. Z tabulky `tabulka` chceme vybrat řádky, které ve sloupci `sloupec` mají hodnotu `hodnota_1` nebo `hodnota_2`. Pokud jsi vytvořil(a) i verzi s operátorem `|`, můžeš obě verze porovnat a rozhodnout se, která verze se ti líbí více.

```python
tabulka = tabulka[tabulka["sloupec"].isin(["hodnota_1", "hodnota_2"])]
```
4 changes: 2 additions & 2 deletions python-pro-data-1/podmineny-vyber/podmineny-vyber.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ food_nutrient["name"]
Nás by mohlo zajímat, jaké všechny výživné látky v datech jsou. K tomu nám snaží vidět každý název jenom jednou. Jinak řečeno, potřebujeme unikátní hodnoty. K tomu můžeme využít metodu `.unique()`.

```py
food_nutrient["name"]
food_nutrient["name"].unique()
```

Též může být zajímavé, kolikrát máme o některé z výživných látek informaci. K tomu můžeme použít metodu `.value_counts()`. Ta nám pro každou výživnou hodnotu zobrazí, kolikrát se v tabulce vyskytuje.
Expand Down Expand Up @@ -143,4 +143,4 @@ Pokud chceme, aby stačilo splnění jedné podmínky, použijeme symbol `|`.

## Bonusy

::exc[excs/ceska-jmena-2]
::exc[excs/ceska-jmena]
2 changes: 2 additions & 0 deletions python-pro-data-1/spojovani/excs/znacky/exercise.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ Pro tabulku `branded_food` splň následující úkoly.
1. Ve sloupci `brand_owner` jsou názvy výrobců potravin. Zjisti tři výrobce s největším počtem potravin v tabulce.
1. Ve sloupci `branded_food_category` jsou kategorie potravin. Zjisti pět kategorií s největších počtem potravin v tabulce.

Nápověda: Na body 2 a 3 využij metodu, kterou jsme si již ukazovali v předchozí lekci. Její název se skládá ze dvou slov - anglického výrazu pro hodnotu a pro počet.

V tabulce je sloupec `fdc_id`, pomocí kterého ji můžeš propojit s tabulkou `food_merged`. Protože názvy jsou v obou tabulkách stejné, takže by bylo možné použít parametr `on`. Vyzkoušej si ale místo toho parametry `left_on` a `right_on`, kterým dáš stejnou hodnotu, tj. název sloupce `fdc_id`. Výsledek ulož do tabulky `food_merged_brands`.

Pro tabulku `food_merged_brands` splň následující úkoly.
Expand Down
5 changes: 3 additions & 2 deletions python-pro-data-1/spojovani/pokrocile-upravy.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ My funkci využijeme, abychom si vytvořili větší tabulku s názvy potravin.
Pozor na to, že v takto vzniklém DataFrame se nám **rozbije index**, protože se 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`.

```py
food_other = pd.read_csv("food_other.csv", ignore_index=True)
food = pd.concat([food_sample_100, food_other])
food_sample_100 = pd.read_csv("food_sample_100.csv")
food_other = pd.read_csv("food_other.csv")
food = pd.concat([food_sample_100, food_other], ignore_index=True)
```

K čemu je spojování vlastně dobré? Některé programy například ukládají data za každý den do samostatného souboru, takže pokud potřebujeme data za jeden týden, stačí nám stáhnout a spojit 7 souborů a ostatní stovky souborů a gigabajty dat můžeme ignorovat.
Expand Down
1 change: 1 addition & 0 deletions python-pro-data-1/vizualizace/excs.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
## Cvičení

::exc[excs/odstin]
::exc[excs/catplot]