import numpy as np
from reseni05 import ukol0, ukol2, ukol3, ukol4, bonus0
# TODO: Pokud zbyde čas přidat ukázku pandas
Zde je prvních 10 řádek
!head "../csv/missing-values.csv"
prvni, druhe, treti 1, 1, 3 1, 3, 3 1, -1, 3 4,, 6 4,3, 6 4,4, 5, , 9 5, 4, 9 7, 0, 9
Načtěte dnešní cvičný datový soubor.
print(ukol0())
[(1., 1., 3.) (1., 3., 3.) (1., -1., 3.) (4., nan, 6.) (4., 3., 6.) (4., 4., nan) (5., nan, 9.) (5., 4., 9.) (7., 0., 9.) (7., nan, 9.) (7., 0., 9.)]
Upravte předchozí kód, aby umožňoval indexaci pomocí názvů sloupců.
data = ukol0()
print('prvni: ', data['prvni'])
print('druhe: ', data['druhe'])
print('treti: ', data['treti'])
prvni: [1. 1. 1. 4. 4. 4. 5. 5. 7. 7. 7.] druhe: [ 1. 3. -1. nan 3. 4. nan 4. 0. nan 0.] treti: [ 3. 3. 3. 6. 6. nan 9. 9. 9. 9. 9.]
Nahraďte NaN v datech průměrem hodnot daného sloupce. Bez cyklů, jen za pomocí indexace.
data = ukol0()
print(data.dtype.names)
for col in data.dtype.names:
ukol2(data, col)
for row in data:
print(row)
('prvni', 'druhe', 'treti') (1., 1., 3.) (1., 3., 3.) (1., -1., 3.) (4., 1.75, 6.) (4., 3., 6.) (4., 4., 6.6) (5., 1.75, 9.) (5., 4., 9.) (7., 0., 9.) (7., 1.75, 9.) (7., 0., 9.)
Pro každou unikátní hodnotu z prvního sloupce spočítejte průměr jejich hodnot v druhém sloupci.
ukol3(data)
Pro hodnotu 1.000 je průměr hodnot druhého sloupce 1.000 Pro hodnotu 4.000 je průměr hodnot druhého sloupce 2.917 Pro hodnotu 5.000 je průměr hodnot druhého sloupce 2.875 Pro hodnotu 7.000 je průměr hodnot druhého sloupce 0.583
Vykreslete graf, který bude jako sloupce zobrazovat četnosti hodnot z prvního sloupce. A lineplot, který zobrazí průměrné hodnoty z předchozí úlohy.
ukol4(data)
Nechť máme body dané vektory x a y, aproximujte tuto funkci přímkou neboli použijte pro popis bodů Lineární regresi.
Jelikož pracujeme jen ve 2D, lze přímku popsat jako y = ax + b. Lineární regresi si nepište, v numpy je funkce np.linalg.lsts().
V matplotlib vykreslete všechny body a výslednou přímku.
x = np.arange(0, 9)
y = [18, 21, 19.5, 21.5, 25, 23, 26, 25.5, 24]
bonus0(x,y)
Navrhněte algoritmus, který zkontroluje správné uzávorkování aritmetického výrazu s více druhy závorek. Použijte datovou strukturu standardní knihovny například z collections.
vstup1 = "1 * [ 5 + ( 3 ] * 2 }"
vstup2 = "1 * [ 5 + (- 3 )] - 0 + {-1 * 2 }"