⚙️ Pokročilé nástroje
Generovanie hodnôt a postupností
np.linspace
Pre vygenerovanie konkrétnej množiny hodnôt v zadanom intervale, prípadne hodnôt s konkrétnym krokom je vhodné použiť funkcie z balíčka NumPy.
Pre vygenerovanie vektora hodnôt, ktorý má známy začiatok a koniec, a potrebujeme konkrétny počet bodov v týchto hraniciach je vhodné na to použiť funkciu np.linspace(). Používa sa nasledovne: np.linspace(ZAČIATOK_INTERVALU, KONIEC_INTERVALU, POČET_VZORIEK)
Je potrebné mať na pamäti, že počet vzoriek udáva celkový počet hodnôť vrátane počiatočej a koncovej hodnoty. Ak úloha znie, že na potrebnom intervale je potrebné vypočítať 18 medzilahlých bodov, je potrebné za argument dostadiť číslo 20 (Počiatočná hodnota + Koncová hodnota + Počet medziľahlých bodov).
np.arange
V prípade, že chceme interval hodnôť z presne definovaným krokom je vhodné použiť funkciu np.arange(). Jej použitie je podobné ako v predchádzajúcom prípade, nasledovné: np.arrange(ZAČIATOK_INTERVALU, KONIEC_INTERVALU, KROK)
Je nutné podotknúť, že interval je zhora otvorený, t.z., že v koniec intervalu nie je v rámci výsledného vektora zahrnutý, a je slúži len ako zastavovacia podmienka pre počet krokov.
Deklarácia premenných za sebou
Pre ušetrenie miesta a sprehladnenie kódu môžeme okrem štandardného spôsobu deklarácie a priradenia hodnôt k premenným, použiť aj spôsob zápisu za sebou. Vo všeobecnosti je to zapísateľné nasledovne: NÁZOV_PREMENNEJ_1, NÁZOV_PREMENNEJ_2, NÁZOV_PREMENNEJ_3,... = HODNOTA_PREMENNEJ_1, HODNOTA_PREMENNEJ_2, HODNOTA_PREMENNEJ_3...
Na príklade to môžeme ukázať nasledovne:
Štandardný spôsob
Alternatívny spôsob (za sebou)
Definovanie siete bodov (grid) s požadovaným intervalom a štruktúra DataFrame (Pandas)
V rámci niekorých úloh sme sa stretli so zadaním, kedy bolo potrebné spočítať určité hodnoty v rámci zemepisnej siete. Mnohé matematické vzťahy sú prevažne závislé len od jednej premennej (napr. šírky alebo dĺžky), je tak možné úlohu riešiť jednoduchým inkrementovaním hodnôt v konkrétnom intervale. Avšak korektnejší prístup je vytvoriť nezávislú množinu dvojíc súradníc a k riešeniu pristupovať ako k unikátnym bodom, aj napriek tomu, že výsledky môžu byť redundantné.
Efektívne riešenie spočíva v použití jednoduchých funkcií a zavedením dátového typu DataFrame.
Definovanie siete bodov (grid)
Import knižníc
Definovanie intervalov (v smere šírky/dĺžky) a krokov
V tomto kroku definujeme premenné pre rozsah (maximum a minimum) daných zemepisných (sférických) smerov. Treťou premennou je krok v daných smeroch. Krok definujeme individuálne nakoľko táto metóda riešenia umožňuje aby bol krok v jednotlivých smeroch odlišný.
Definovanie vektora postupných hodnôt
Pomocou funkcie np.arange() definujeme zo zadaných hraníc a krokov, pole (vektor) hodnôt. Univerzálna syntax je nasledovná: np.arange(DOLNÁ_HRANICA, HORNÁ_HRANICA, KROK). Použitá funkcia však to tvorby vektora nezahrňuje hornú hranicu, pre nás je však aj táto hodnota podstatná. V našom prípade je tak vhodná syntax nasledovná: np.arange(DOLNÁ_HRANICA, HORNÁ_HRANICA + KROK, KROK).
Definovanie dvojrozmernej mriežky bodov
Po vytvorení vektorov hodnôt, je potrebné vytvoriť viacrozmernú mriežku (v našom prípade dvojrozmernú). Tento cieľ dosiahneme použitím funkcie np.meshgrid(). Do funkcie v našom prípade dosadíme len vytvorené vektory. Takýto spôsob vytvorí mriežku n-tíc z dosadených súradníc. Toto je vhodné pre rozličné vizualizácie a použitie v grafoch. Na vloženie do tabuľky a následné výpočný je potrebné uložiť iba diskrétne dvojice súradníc.
Sploštenie poľa pre ďalšie použitie
Pre získanie dvojíc je nutné mriežku sploštiť. Sploštenie tohto typu mriežky vakonáme metódou .ravel(). Syntax je nasledovná: MRIEŽKA.ravel().
Uloženie sploštených hodnôt do štruktúry (tabuľky) DataFrame
Pre jednoduhšie výbočty je vhodné uložiť hodnoty do štruktúry DataFrame z knižnice Pandas. Ide v zásade o jednoduchú tabuľku. Jej použtie je analogické k dátovému typu dict()(dictionary-slovník). Syntax pre náš prípad je nasledovná: NÁZOV_TABUĽKY = pd.DataFrame({"NÁZOV_STĹPCA_1":HODNOTY_STĹPCA_1, "NÁZOV_STĹPCA_2":HODNOTY_STĹPCA_2 ,...})
Modul Pandas a dátový typ DataFrame
Definovanie štruktúry DataFrame
Najbežnejší spôsob je použitie dict(), kde kľúče predstavujú názvy stĺpcov a hodnoty sú zoznamy alebo NumPy polia.
Základná práca so štruktúrou Dataframe
Modul Pandas a štruktúra DataFrame je veľmi komplexná. Zhrnúť zoznam najpodstatnejších funkcií je veľmi náročné, a závisí od aplikačnej oblasti. Vybral som však niekoľko základných funkcí, vhodných ako odrazový mostík:
df.head(N), df.tail(N) - zobrazí N prvých/posledných hodnôt tabuľky
df.describe() - zobrazí základné numerické štatistiky
df['NÁZOV_STĹPCA'] - výber stĺpca
df.loc[INDEX], df.iloc[ČÍSLO_RIADKU] - výber riadku
df[df['NÁZOV_STĹPCA'] > HODNOTA] - filtrovanie hodnôt
df['NAZOV_NOVÉHO_STĹPCA'] = HODNOTY - definovanie nového stĺpca a priradenie hodnôt
df.drop(columns=['STĹPEC']) - odstránenie stĺpca z tabuľky
1.2.3 Import a export z/do súboru (csv,excel,txt…)
Niektoré situácie si vyžadujú import/export hodnot z/do štruktúry tabuľky DataFrame. Balíček Pandas podporuje prácu s mnohými formátmi. Medzi najbežnejšie však určite patria formáty:
- CSV
- MS Excel
- TXT
Použitie niektorých funkcií je viazané na použitie oddeľovača jednotlivých hodnôt v riadku. Pri práci v jazyku Python využivame najčastejšie nasledujúce oddeľovače (delimiters/separators):
- Čiarka -
"," - Bodkočiarka -
";" - Tabulátor -
"\t" - Medzera -
" " - Zvislá čiara (pajpa) -
"|"
1.2.3.1 Import zo súboru
pd.read_csv('NÁZOV_SÚBORU.csv')
pd.read_excel('NÁZOV_SÚBORU.xlsx')
pd.read_csv('NÁZOV_SÚBORU.txt', delimiter='ODDEĽOVAČ')
1.2.3.2 Export do súboru
df.to_csv('NÁZOV_SÚBORU.csv')
df.to_excel('NÁZOV_SÚBORU.xlsx')
df.to_csv('NÁZOV_SÚBORU.txt', sep='ODDEĽOVAČ')
Ďalšie užitočné funkcie
zip
Funkcia zip() spája viaceré iterovateľné objekty (zoznamy, n-tice, …) tak, že vytvára páry (alebo n-tice) prvkov na rovnakých indexoch. Použtie funckie si môžeme ukázať na cykle for(), ktorý sme použili aj v rámci cvičení: