Analýza Erasmus pobytů s interaktivní mapou

Monika Krejčová
9 min readJun 2, 2019

--

Juliana Kontríková & Monika Krejčová

Mentor: Martin Matějka (Keboola)

Všechno to začalo před jedenácti týdny, kdy jsme se upsaly “ďábelskému sex-appealu” Czechitas a jejich projektu Digitální Akademie…

Vše začíná mapou a avokádem

Naše cesty se střetly, a to doslova, když Julča hledala, kde je Opero, v ruce smartphone a na displeji starou dobrou GoogleMaps aplikaci a v tom potkala mně :) Nad prvními sklenkami vína jsme zjistily, že máme podobné zájmy — a to především vášeň pro avokádo 🥑 ! Poté ještě pár dnů probíhaly námluvy a romantické večery nad prvními SQL skripty a náš Avocado Team byl oficiálně potvrzen vyplněním jedné z mnoha a mnoha tabulek, které jsme za naši kariéru na DA potkaly.

Během dalších večerů jsme s Julčou přišly na další společný zájem — kriminalitu 💣. Obě nás zajímají tak trochu sociopatologické jevy a při přemýšlení nad společným projektem jsme se nápadně často vracely k představě mapy kriminality Prahy. Snaha o získání dat pro projekt nám vydržela poměrně dlouho (rozuměj pár dní) díky počátečnímu nadšení a energii, se kterou do DA všechny vstupujeme. Nicméně jsme nakonec přišly na to, že se k potřebným údajům (tak jak bychom je my chtěly) v podstatě nelze v současné době dostat. Pár dní před večerem Meet your mentor jsme nakonec přišly na nápad s projektem, který je sice tématický jiný, ale ve kterém lze zachovat náš cíl vizualizovat data v mapě a mít i nějaké informace o kriminalitě. Já si tehdy v 7.patře v Avastu vzpomněla, že jsem po návratu ze svého pobytu v rámci Erasmus projektu vyplňovala formulář, kde jsem popisovala své zkušenosti a doplňovala jiné zajímavé informace. Sice jsme v průběhu práce na projektu pomocí SQL příkazu nad datasetem zjistily, že jsem ho nakonec ani neodeslala, ale moje vzpomínka nás dovedla k veřejně dostupné databázi s více než 30 tisíci vyplněnými formuláři nasbíranými za posledních asi 12 let:

No neanalyzuj to! S rozverně vyplněným medailonkem o nás dvou a dobrou náladou jsme byly připravené na seznámení s naším budoucím mentorem. Julča nám na akci Meet your mentor klofla Martina Matějku z Kebooly (neoficiální verze je taková, že spíše Martin vyhrál nás :)) a náš společný projekt mohl začít!

Od této chvíle začaly být naším hlavním útočištěm pražské kavárny. Pro nějaká doporučení se na nás neváhejte obracet, možná do budoucna uděláme i nějakou tu databázi “DA-friendly” kaváren…Po prvním setkání s Martinem, za jehož trpělivost a systematičnost práce mu neskonale děkujeme, jsme měli vykrystalizované cíle a nahrubo načrtnutý datový model.

Cíl našeho projektu

  • Analyzovat informace z dotazníku
  • Zpřístupnit některé důležité z nich budoucím studentům pomocí vizualizované mapy
  • Stáhnout nějaká další zajímavá data jako náklady na život, index kriminality a vizualizovat je (https://www.numbeo.com/cost-of-living/)

Datový model

Datový model (přes draw.io)

“Máme síce jemné obavy, ale slnko svieti a všetko sa zdá byť realistické.” (z deníku Julči)

1. fáze: Extrakce dat

Jak říká náš Martin průběžně téměř na všechno, cesta, přes kterou to budete dělat, je jasná…:)

Keboola Connection

A opravdu, ikonická chobotnice nás provázela téměř na každém kroku. První krok bylo stažení erasmáckých dat. Nejdříve jsme se potřebovaly seznámit s tím, jak funguje stahování dat přes webovou stránku, k čemuž nám posloužilo APIFY a jejich actor Web-scraper, který jsme si nakonfigurovaly pro naše potřeby. Kluci s Apify nám pomohli nastavit základní ‘page function’, protože zdrojový web byl trochu komplikovaněji strukturovaný (dotazníky vyskakovaly s vlastní URL adresou a nastavovalo se ‘pagination’, protože musel scraper projít přes 1700 stránek). Musely jsme se naučit trochu “číst” v CSS, HTML a JavaScriptu, abychom porozuměly, kde se naše data ve zdrojovém kódě nachází. Skrze několik více a méně úspěšných runů jednotlivých tasků (programátorská hantýrka) jsme se konečně dostaly k takové page function, která nám dokázala stáhnout většinu formulářů z webu. Problém byl v tom, že se kolem roku 2013 trochu změnil vzhled formuláře a také to, že ne každý student vyplnil všechny oddíly. Nakonec jsme rozchodily 4 tasky, skrze které šlo stáhnout přes 27 tisíc z asi 30 tis. dotazníků.

Začáteční část dlouhého skriptu našeho web-scraperu (Apify)

No a protože je cesta jasná, v Keboola connection jsme si přes Apify extractor stáhly data přímo do našeho Keboola projektu.

Mezitím jsme požádaly Numbeo o přístupový API klíč k jejich datům, což nebyl problém. V Keboole jsme pak přes její Generic extractor a konfiguraci v JSON formátu stáhly data o městech:

  • GPS souřadnice
  • ceny (nájem, potraviny, oblečení, atd.)
  • indexy (jako kriminalita, životní náklady, kvalita života, doprava apod.)
Stažení dat z Numbeo přes Generic
JSONeček v detailu

2.fáze: Čistíš, čistím a čistíme

Jelikož dotazníky měli různou strukturu, stáhly jsme za pomoci webscrapingu čtyři soubory dat. Pro naše potřeby jsme je potřebovaly sloučit do jedné tabulky. Na řadu přišla očekávaná práce v SQL, které jsme pilně nacvičovaly na hodinách s fyzickým SQL (hlavně na střeše Avastu :)). V unionované tabulce jsme zjistily hned několik nedostatků, které měla naše data, a kterých jsme se popravdě zděsily. Jako první jsme se však potřebovaly zbavit duplicit. Tak jsme si vytvořily novou transformaci CLEANING, jejímž výsledkem byla paradoxně tabulka DIRTY :) V ní se nám sice podařilo sjednotit názvy univerzit, rozkategorizovat studijní subjekty, ale získání akademického roku z různých formátů datumů byla velká výzva. Podařilo se nám to až v další transformaci, kterou jsme symbolicky nazvali ACADEMIC.

Část skriptu s čištěním datumů a napojením kódů univerzit
SQL kód, díky kterému jsme získaly požadovaný formát akademického roku

Z této části naší práce jsme si vzaly několik ponaučení:

  • až budeme někdy sbírat data, tak je důležité předdefinovat formát datumu
  • uživatelům necháme prostor na kreativitu jen v případech opravdu nutných (při získávání názorů, motivací ..)
  • všechna data, která budeme chtít analyzovat, si důkladně promyslíme předem

Následovala Julčina nejvíce oblíbená část — vytvoření normalizovaných tabulek.

Z očištěné tabulky pobytů jsme následně připravily výstup pro textovou analýzu — ve formulářích totiž mohli studenti vyplňovat otevřené otázky k různým tématům. Říkaly jsme si, že by z toho mohla vzniknout zajímavá analýza, ve které bychom mohly zkoumat sentiment studentů vůči různým oblastem podle univerzit nebo zemí/měst. Geneea nám dala přístup do jejich platformy Geneea Frida, ve které jsme si z nejčastějších keywords vybraly ty, které by nás jako budoucí studenty zajímaly a nastavily si je jako custom entity rozřazené do kategorií jako je ubytování, stravování, internet/pc apod., se kterými později následně pracujeme při vizualizaci.

Data, která jsme stáhly z webové stránky Numbeo, bylo potřeba zpracovat pro CleverAnalytics, aby se nám v mapě mohly ukazovat jednotlivé informace o městech. Indexy jako index kriminality, zeleně a parků, zdravotní péče apod. jsme najoinovaly na jednotlivá města. Nicméně ačkoliv Numbeo ukazuje pro dané město průměrné náklady na život (https://www.numbeo.com/cost-of-living/in/Prague), stáhnout se nedají. Respektive lze stáhnout pouze jednotlivé ceny items, ze kterých se průměrné náklady vypočítavají přímo na stránce Numbeo. Musely jsme opět kontaktovat Numbeo a poprosit je o informaci, jaký algoritmus se za jejich průměrnými náklady skrývá. Odpovědí je jejich estimator, který je defaultně nastavený, resp. je potřeba si ho jen nastavit na výpočet nákladů pro 1 osobu.

Estimator pro 1 osobu

Abychom tedy získaly stejné průměrné náklady na život v daném městě, bylo potřeba vybrat dané items, které se do těchto nákladů počítají a vynásobit je příslušnou konstantou podle estimatoru. Zároveň je bylo ještě potřeba dělit do různých kategorií, protože jedno item (pivo) mohlo mít různé násobky (constant) podle toho, v jaké kategorii bylo (Going out, Drink at Home…).

Vytváříme kategorie estimatoru — pro výpočet celkových nákladů

Když jsme nakonec získaly náklady pro jednotlivé kategorie a ty pak sečetly, čekal na nás ještě výpočet těchto položek:

Tyto 3 položky bylo potřeba vytvořit pro každé město pomocí výpočtů (neexistují jako items)

Nakonec jsme všechno najoinovaly a získaly konečně průměrné náklady podle města, které jsou +- stejné jako náklady na Numbeu.

Výpočty pro získání průměrných nákladů

Výslednou tabulku jsme pak použily dále pro finální vstupy do CleverAnalytics.

3.fáze: Vizualizace

Blížíme se do finiše, síly docházejí, ale vidina konce nám vlévá krev do žil. Bohužel pro naše blízké okolí nám zároveň úměrně s naší únavou klesá úroveň našich vtipů a začínáme fungovat na úrovni mitochondrií…Snažíme se doplňovat více H2O, protože nám rapidně stoupá spotřeba kofeinu s počtem objednaných flat white.

Při celkovém pohledu na náš projekt je potřeba brát v úvahu, že jsme analyzovaly dotazníky, které se vrátily. To znamená, že naše analýza a výstupy neukazují na hodnocení všech studentů Erasmu za poslední roky, ale pouze těch, kteří si dali tu práci dotazník vyplnit a poslat DZS (Dům zahraniční spolupráce).

Výsledky textové analýzy jsme vizualizovaly v Tableau. Pro představu uvádíme pár dashboardů:

Word cloud pro všechny univerzity
V dashboradě lze vybírat mezi zeměmi a také je porovnávat (zde Německo)

Naše entity (knihovna, výlety, přednáška, vyučující, potraviny apod) byly schovány do kategorií, které lze vidět pod nešikovně zvoleným názvem sloupečku “ENTITY”…

Lze porovnávat i mezi univerzitami, které nás zajímají

Dále jsme vizualizovaly některé zajímavé výsledky ze základní tabulky pobytů studentů, rovněž v Tableau:

Škála 1–5 (známky jako ve škole), kde tmavě zelená je 1 a červená je 5
Hold to s námi ti rodiče musí vydržet

Naší největší ambicí byla ovšem vizualizace v interaktivní mapě, protože jedním z našich cílů bylo pomoci studentům s výběrem kam jít na erasmácký pobyt. Na jedné z hodin datové analýzy jsme objevily kouzlo CleverAnalytics a jejich produktu CleverMaps. Pro nás to byl ideální nástroj pro tvorbu interaktivních filtrů, které se dají různě mezi sebou kombinovat. A navíc, je to celé v mapě!

Na začátek bylo potřeba získat geolokace všech evropských univerzit. V naší zázračné Keboole však existuje extractor Geocoding Augmentation, díky kterému se nám je podařilo získat. Pro potřeby CleverAnalytics jsme si potřebovaly vytvořit dvě tabulky (jednu základní, v níž byla data z dotazníků a druhou, v níž byly geolokace a data z Numbea). Jako první jsme si vytvořily účet v CleverAnalytics a stáhli si Shell a Javu. Potom následovalo prostudování tutoriálu a vytvoření vlastního projektu. Pro to, abychom Shell vůbec spustily bylo třeba vytvořit soubory credentials.txt a config.txt, do kterých jsme uložily naše přihlašovací údaje. Po tom, co jsme si vytvořily vlastní projekt přišlo na řadu vytváření datasetů, metrik, indikátorů, drillů, dashboardu, view a to vše v syntaxi json. Nejdříve jsme přes příkazovou řádku zadaly “dumpProject” a následně všechny soubory vytvářely v programu Notepad ++, které jsme ukládaly do konkrétních složek na disk.

Příklad datasetu
Příklad indikátoru

Po vytvoření jednotlivých json souborů jsme je přes příkazový řádek přidaly do projektu — s pomocí příkazu “addMetadata”. Pokud proběhlo přidání metadat do projektu v pořádku, s pomocí příkazu “pushProject” jsme je uploadly do projektu. Tento proces bylo třeba opakovat vždy při změně metadat.

Více než tisíc slov však řekne video, ve kterém bychom chtěly ukázat podle jakých různých parametrů si dokáže student vybrat svou cílovou univerzitu.

CleverMaps pro Erasmus

Simulace toho, jak by si mohl student vybírat různé filtry a pohledy

Jaký je přínos našeho projektu?

  • Přínos pro nás — vyzkoušely jsme si řadu nástrojů, naučily se mnoho věcí (převážně díky chybám) a zjistily jsme, že když chceme, zvládneme i na první pohled nemožné (a někdy i na ten druhý)
  • Budoucí studenti vyjíždějící na Erasmus by si mohli při zveřejnění projektu vybírat univerzity dle svých preferencí a vlastních filtrů
  • Na základě hodnocení univerzit studenty by si mohly jednotlivé zahraniční, ale i domácí instituce vzít ponaučení pro zlepšení kvality studia

Co do budoucna zlepšit?

  • Přidat další filtry do CleverMaps a více to vymazlit a zpřehlednit
  • Doplnit zdroje dat o další alternativní zdroje, které mohou zvýšit kvalitu datové analýzy (např.doplněním chybějících údajů)
  • Více si pohrát s grafikou a user-friendly designem

O co jsme se při práci opíraly?

Použité nástroje
  • Databáze Erasmus pobytů
  • Web Numbeo, který sumarizuje zajímavé informace pro digitální nomády
  • Excel verze podoby původního dotazníku od DZS (Dům zahraniční spolupráce)
  • Martin Matějka

--

--