PRÁCE S DATY

Aneb začátky naší cesty jako datových analytiček

Arranger nás napadl náhodou, ale hned se nám zalíbil z několika důvodů. Nejvíce se nám zamlouvalo praktické využití finálního produktu. Dále jsme považovaly za usnadňující faktor, že jsou data veřejně dostupná na internetu a není tedy potřeba žádat soukromé subjekty ani jiné instituce (státní i neziskové) o poskytnutí potřebných dat. Jelikož jsme si zhruba naplánovaly, jak bychom chtěly při zpracování projektu postupovat, tak jsme věděly, že si vyzkoušíme prakticky všechno, co práce s daty může nabídnout - získávání, návrh datového modelu a propojení atributů, práce s jazykem SQL ve Snowflakeu, kde jsme vytvořily novou databázi, práce s Pythonem, kde jsme data čistily a připravovaly k importu do databáze a návrh dashboardu v Tableu, který měl sloužit jako návrh aplikace, ale nakonec sám o sobě se stal jakousi aplikací. Nakonec jsme chtěly, aby bylo možné na aplikaci dále pracovat i po skončení Digitální akademie, aby bylo možné náš projekt nadále vyvíjet.

Tohle všechno Arranger splňoval a proto jsme se do projektu s plnou chutí pustily.


Návrh datového modelu

Byly jsme si vědomy, že jestli chceme mít takovouto aplikaci, musíme mít všechny relevantní informace k tomu někde uložené. V té době jsme již znaly SQL i Snowflake, ve kterém jsme na hodinách pracovaly, tak jsme se rozhodly vytvořit databázi právě ve Snowflaku.

S mentorkami jsme rozebíraly nejefektivnější rozložení tabulek a atributů a následné propojování. Z obrázků níže je vidět určitý posun v návrzích. Finální návrh jsme se rozhodly nakonec vytvořit v Google nákresech, kde bylo možné si barevně odlišit například primární a cizí klíče.

Původní návrh
Původní návrh
Finální návrh
Finální návrh

Tabulky jsme navrhovaly tak, aby se s nimi následně dobře pracovalo při vytváření dashboard aplikace, ale vytvořily jsme i dvě čistě pro použití k vizualizaci.  

Teoreticky jsme měly databázi se vším všudy vymyšlenou, nyní bylo třeba ji skutečně vytvořit:

Ano, naše databáze se jmenuje Bejby. Nezní to příliš profesionálně a taky to neměl být ani původní název našeho projektu. Při vytváření databáze se nás Pavel zeptal na název kvůli právům ve Snowflaku, která jsme nejdříve musely získat. Název ještě nebyl vymyšlený, a tak Pavel se svým ostrovtipem zvolil pojmenování Bejby a Bejby_role. 

Děkujeme Pavlovi za toto originální pojmenování databáze a za spoustu dalších rad, které nám dal v průběhu zpracovávání celého našeho projektu.

Databáze byla vytvořená a přišel konečně čas na práci s daty.


Získávání a čištění dat

Data byla veřejně dostupná na internetu, ale bylo potřeba je z těch stránek získat rozumným způsobem do nějakého souboru (ideálně v JSON nebo CSV), abychom s tím mohly dále co nejsnadněji pracovat a zároveň obsahovala všechny informace podstatné pro náš projekt. Už toto zní jako mission impossible vzhledem k naší (zatím) neodbornosti ve web scrapingu, ale Jakub a Apify nám v tomhle bodě zásadním způsobem pomohli. :-)

Soubor, který jsme získaly, obsahoval nejen otevírací doby pošt, ale i vytíženost v jednotlivých hodinách dne, rating všech poboček, adresy, kde se dané pobočky nacházejí či souřadnice. Všechna data se stahovala z Google Maps.

Ukázka stažených dat z Google Maps
Ukázka stažených dat z Google Maps


Postupem jsme takto získaly ještě informace o městských úřadech a knihovnách.

Prvotní práci s daty jsme prováděly pouze u pošt. Naučily jsme se jak postupovat při čištění v Pythonu a jak sjednotit i velice různorodá data. Nejvíce problémů nám přinášela otevírací doba, která byla v podstatě co řádek, to nový způsob zápisu. 

Ukázka zápisu otevírací doby
Ukázka zápisu otevírací doby

Zde bychom chtěly poděkovat Danovi, že nás provedl čištěním i takových případů a velice ochotně nám pomohl. :-) 

Způsob, jakým se nám podařilo nakonec data získat, je zobrazen níže v Python kódu.

I když jsme si připojily Python ke Snowflaku, tak jsme v něm nakonec pouze připravily kód, kterým jsme všechna data najednou vložily do databáze.

Vkládání dat provázelo mnoho peripetií, které, jak se pak ukázalo, byly zapříčiněný základními neznalostmi a místo pár minut nám zabraly téměř dva celé dny, ale chybami se člověk učí. A i když nám to v ten moment nepřišlo tak zábavné, jistě se tomu v budoucnu budeme smát. :-) 

Když jsme celý proces zvládly u pošt, pokračovaly jsme stejně i s knihovnami a úřady, kde jsme se již při čištění a importu do databáze orientovaly. U knihoven a úřadů probíhalo čištění ve větším množství hlavně oblasti názvů.

Kód v Pythonu vypadal následovně:

Paralelně s čištěním jsme již pracovaly na dashboardu. Když byla data vyčištěná a uložená v databázi, pustily jsme se naplno do testování a doplňování již rozpracovaného dashboardu (wireframu),  vizualizace a menší datové analýzy.

Příprava dashboardu

Pro správné fungování wireframu bylo zapotřebí udělat ještě pár věcí. První otázkou byl správný výpočet vzdálenosti. Rozhodly jsme, společně s našimi mentorkami, že první verze Arrangeru bude mít nastavené výchozí body defaultně a bude fungovat "hlavně pro nás". Na tomto modelu si budeme testovat, jak to vlastně celé funguje.
Insertovaly jsme čtyři my places, a to dva domovy (Lucka/Terka), práci (Startup Market jakožto pražský domov DA Czechitas) a školu (FF UK). Ty jsme nastavily jako výchozí body a spočítaly k nim vzdálenosti díky funkci haversine v SQL. Joinováním jsme pak vytvořily novou tabulku určenou pro vzdálenosti.

SQL query pro vytvoření tabulky MY_DISTANCE
SQL query pro vytvoření tabulky MY_DISTANCE

Na Hackhathonu (pozn. speciální den v DA - intenzivní 8hodinová práce na projektu) jsme také přemýšlely jak vizualizovat otevírací dobu. V naší tabulce je otevírací doba zaznamenána ve sloupečkách day, from a to. Pokud má nějaká instituce přestávky na oběd, bude mít pro jeden den více záznamů (např. day 1, from 8 to 12 & day 1, from 13 to 17). Nicméně pro vizualizaci otevírací doby v Tableau tento formát zápisu není úplně nejlepší. Vytvořily jsme si proto v Pythonu kód na novou tabulku open_hours_visual, kdy pro každou instituce pro každý den a pro každou minutu (po půl hodinách) bude zaznamenáno TRUE/FALSE podle toho, jestli má pobočka v tomto určitém čase otevřeno či zavřeno.

Čištění, příprava a obohacování dat se tímto dovršilo a mohly jsme se pustit do dashboardu (wireframu).


Další možný vývoj Arrangeru

Došly jsme do bodu, kdy náš dashboard pracuje de facto jako aplikace, ale zatím to není aplikace. Původně jsme měly v plánu vytvořit jednoduchou aplikaci, což doufáme, že se nám v budoucnu ještě podaří.

Otevírá se nám spousta možností, jak tento projekt nadále obohacovat, jaké další informace může zobrazovat, jak ho nadále zlepšovat, aby se uživatelsky dobře ovládal a nakonec se stal užitečným pomocníkem pro každého, kdo si potřebuje zorganizovat pochůzky, což bylo od počátku naším cílem.

Na závěr bychom rády použily citát Jana Macáka (český youtuber), kterého se nejspíš budeme po Digitální akademii držet, a to: "Pracuješ tvrdě, odpočívej tvrdě".

Vytvořte si webové stránky zdarma! Tento web je vytvořený pomocí Webnode. Vytvořte si vlastní stránky zdarma ještě dnes! Vytvořit stránky