To mě těší. Příště si něco řekneme o validaci schématu (to je ale jen část článku), takže by mě zajímalo, o jaké téma by byl zájem.
Kdybych si mohl vybrat, líbila by se mi třeba ukázka konverze dataframu do html tabulky s použitím vlastního stylování, ale to asi taky nebude téma na článek, spíš na odstavec...
diky, uz se taky tesim na dalsi, nejake namety:
group by, resample (+datetime index)
a pouzivani dataframu jako zdroj pro grafy
Mňa by zaujímalo, ako sa v pandas pracuje s veľkým množstvom dát. Napríklad s CSV súborom, ktorý má desiatky gigabajtov a z neho potrebujeme vypočítať min, max, sumu, priemer a pod.
Kouknul buych se při tom na https://docs.dask.org/en/latest/dataframe.html
Ocenil bych nějaký srovnání. Díky
Taková zajímavost je, že autor pandasu pracuje na Arrow:
https://wesmckinney.com/blog/apache-arrow-pandas-internals/
27. 11. 2020, 13:39 editováno autorem komentáře
Pokud se tyka zpracovani velkych objemu dat, tak Pandas ma stale znacne problemy (pomaly, velke naroky na pamet, diskutabilni paralelizace).
V pripade velkych dat je lepsi pouzivat Dask (https://dask.org/), ktery Pandas "emuluje" a ma mnohem lepsi vykonove charakteristiky.
27. 11. 2020, 09:21 editováno autorem komentáře
podle me dask neni o moc lepsi, neresi problem pomalosti pythonu.
spravna cesta jsou knihovny generujici dotazy pro rychle analyticke databaze
V tomto pripade je to asi cokoliv nad par GB. Jak pisou zle jazyky, pro dataframe pocitejte pro RAM 5-10x puvodni velikosti dat.
Jestli ovsem mate vetsi data, rad se neco dozvim. Ja jsem skoncil na nejakych 50 milionech radku. Do toho objemu jsem byl spokojeny.
Díky za další článek/seriál na přínosné téma.
I ze strany PyLadies je o Pandas a zpracování dat tabulkového typu, zájem.
Chystám se Pandasu pořádně podívat na zoubek už léta, možná bude tenhle seriál tou správnou rozbuškou.
V roce 2005 jsem rozjížděl projekt, při kterém by se mi Pandas velmi hodil, ale to ještě neexistoval a i s dalšími nástroji byl problém. Třeba csv reader neuměl UTF-8.
Takže jsem si na to udělal vlastní knihovny a pak, když už se začal prosazovat Pandas, tak jsem neměl motivaci ho používat.
V tom projektu se zpracovávají velké soubory z mnoha datových zdrojů (t/csv, xls různých/hrůzných formátů, dbf, fpt a pod...) a to data místy pěkně nečistá, například soubory uložené ve více znakových sadách spojené do jednoho souboru, BOM/neBOM, soubory s formátovacími znaky uvnitř dat...
Co mě zajímalo a v článku jsem to nenašel, jak Pandasu říc, aby načítal do jednoho data frame data z několika souborů (např. data_part1.csv, data_part2.csv), nebo několika listů v souborech z tabulkových kalkulátorů.
Že by to mělo jít jsem dohledal např v:
https://pbpython.com/pandas-excel-tabs.html
https://medium.com/@kadek/elegantly-reading-multiple-csvs-into-pandas-e1a76843b688
V mém případě je občas nutné "sáhnout" do těch datových souborů a nahradit problematické řetězce, což řeším voláním sedu, kterého z pythonu krmím parametry.
Někdy nastupuje heuristika, která na požádání hlídá počty sloupců, prázdné hodnoty, korelaci hodnot ve více sloupcích, unikátnost položek,... a na základě výsledků z heuristiky je buď datový zdroj hlasitě odmítnut, nebo je po řadě úprav zkonvertován do použitelnějšího stavu a pak importován.
Volitelně se pak vytváří soubory s odmítnutými záznamy a důvodem odmítnutí konkrétních řádků, které se posílají na ruční kontrolu/doplnění.
Složitější úpravy vstupních dat už hádám Pandas neumí?
"což řeším voláním sedu, kterého z pythonu krmím parametry."
proc? Kvuli inplace nahrade? Znate parametr inplace ve standardnim modulu fileinput?
Díky za tip. Neznal jsem ho, páč jsem zvyklý na ten sed, tak jsem po tom nepátral, ale je dobré o něm vědět, může se hodit.
Zkusil jsem ho a musí se s ním opatrně.
Vyzkoušel jsem inplace=True na 1,5GB souboru ve kterém bylo trochu bordýlku.
Zahlásilo to UnicodeDecodeError a soubor měl rázem téměř nulovou velikost.
Encoding to asi neumí a nejde to použít dohromady s openhookem.
I když jsem dal ze zvědavosti mode="r" (nebo deprecated mode="U") tak to při chybě soubor vynulovalo.
Alespoň ta vynulovaná data nezůstala viset ve vzduchoprázdnu a filesystem je uvolnil. Kontroloval jsem pomocí df před a po.
Při mode="rb" to vtipně zahlásí, TypeError, že očekává "str" a ne bytes-like obejct. a soubor stejně vynuluje.
Pozitivní je, že s cca 50MB souborem, který jsem prohnal iconven a zbavil ho unicode pracoval fileinput cca stejně rychle jako sed.
BTW: iconv ten soubor očisti od unicode za osminu času.
pokud se jedna o par ne-unicode znaku, muzete ctenemu souboru/stdin nastavit, aby handloval ne-unicode znaky bez padu, (treba volbou replace)
3. 12. 2020, 14:50 editováno autorem komentáře
V tomhle případě jsem se Unicode znaků zbavil jen proto, abych porovnal rychlost zpracování přes fileinput a sed, jinak je potřebuji, ale díky za tip.
Ty úpravy dat přímo během načítání jsou docela problém. Něco jde vyřešit snadno, něco callbackem, ale úplně obecné problémy až po načtení do datového rámce - a to může být pozdě, pokud je objem dat obrovský. Zkusím nastřelit nějaké řešení ve třetí části.
S pandas jsem se poprvé setkal cca před rokem, kdy jsem potřeboval zpracovat velké mnoho-listové xlsx soubory. Původně jsem myslel, že je jen načtu a zbytek logiky budu muset dopsat, jaké milé překvapení bylo, že spoustu operací lze napsat "na jeden řádek". Od té doby jsou pandy jedna z oblíbených knihoven. Takže těším se na tuhle část seriálu (o Excelu a o numpy), určitě se bude čemu přiučit.
Pekne. Jeden namet ode me :
- vyjasnit situaci okolo view vs. copy dataframu pri operacich nad DF.
Jupyter casto vypisuje ruzove hlasky informujici o dvojznacne situaci nebo nevhodnem pristupu. (To, ze clovek obcas navic pouzije nejake deprecated funkce tomu take nepomaha. ) A v pripade velkych objemu si clovek treba nemuze ani kopii dataframu dovolit....
Tak diky.
Internet Info Root.cz (www.root.cz)
Informace nejen ze světa Linuxu. ISSN 1212-8309
Copyright © 1998 – 2021 Internet Info, s.r.o. Všechna práva vyhrazena.