Všechny cesty vedou do Czechitas

Martina & Tereza
10 min readMay 30, 2021

--

Autorky: Martina Gelnerová, Tereza Morávková

Mentoři: Jakub Balada, Lucie Burišin, Zuzana Pelechová

Místo dlouhého úvodu výstižný SELECT:

SELECT
CASE
WHEN “ Marťa bydlí blíž než 1,5hod autem od Czechitas ”
THEN “ Není téma projektu ”
WHEN “ Marťa neriskne, že Digitální akademie bude celá online ”
THEN null
WHEN “ Terka nestáhne Marťu k sobě do týmu ”
THEN “ Není náš dream team ”
WHEN “ Apify nezaujme náš 'tým s nejvíce dětmi' ”
THEN “ Samy to nezvládneme ”
ELSE “ Naše dobrodružství může začít! ”
END,
“ Tereza, Martina ” AS tým číslo 2,
“ Jakub, Zuzka a Lucka z Apify ” AS mentoři
FROM Czechitas Digitální Akademie — Data (jaro 2021);

Na začátku našeho příběhu bylo dilema, a to ještě dávno před začátkem Digitální akademie. Martina váhala, zda se vůbec přihlásit, data jí lákala, ale do Prahy to má přes hodinu a půl cesty. Vsadila na covidem způsobený lockdown a jako “one in a lifetime chance” se přihlásila s tím, že s trochou štěstí proběhne většina akademie online.

TÉMA / CÍL PROJEKTU

Hlavní inspirací pro téma projektu byl právě Martiny “problém” s dojezdovým časem a mapa na blogu. Nápad vizualizovat kolik času reálně trvá dojet na pražskou pobočku Czechitas se s postupujícími týdny a znalostmi rozrůstal. Mnohem názornější a přínosnější bude vizualizovat dojezdy do všech poboček Czechitas, dle nastavených parametrů dynamicky vždy do té nejbližší. Bude pak lépe vidět, že v rámci Česka jsou nemalé oblasti, které to mají na prezenčně pořádaný kurz Czechitas opravdu daleko. Jak by se situace změnila, pokud by Czechitas otevřely další pobočky? Kolik nových poboček by bylo třeba pro rozumné pokrytí celého území ČR? Která města se jeví pro nové pobočky jako nejvhodnější?

Vizualizace zobrazuje dojezdové časy do stávajících poboček Czechitas, červeně jsou zvýrazněny oblasti s dojezdem delší než 1 hodina. Zároveň vidíme, že v tuto chvíli má 32% obyvatel ČR nejbližší pobočku Czechitas dál než 1 hodinu cesty autem. Interaktivní dashboard umožňuje volit mezi aktivními pobočkami a tak simulovat dostupnost při konání kurzu pouze na vybraných pobočkách. Umožňuje také vizualizovat změnu situace v případě otevření poboček v dalších krajských městech. Pro interaktivní dashboard klikněte ZDE

Na základě diskuzí s mentory jsme náš projektový záměr rozšířily o analýzu pracovního trhu a přihlášek na kurzy Czechitas tak, aby naše výsledné doporučení bylo dostatečně argumentačně podložené.

Naši analýzu jsme postavily na následujících datasetech:

  • 87tis. dojezdových časů
  • 37tis. přihlášek na kurzy Czechitas
  • 23tis. inzerátů všech pracovních pozic z jobs.cz a startupjobs.cz
  • seznam všech měst a obcí v ČR

DOPORUČENÍ PLYNOUCÍ Z NAŠEHO PROJEKTU

  • Otevřít nové pobočky
  • Přesunout část kurzů do online formy
  • Upravit rozsahy tematických okruhů kurzů

1. Otevřít nové pobočky

Na základě analýzy dostupnosti stávajících poboček a nabídky juniorních IT pozic v jednotlivých městech a krajích doporučujeme:

  • otevřít novou pobočku v Plzni => pokrytí západních Čech
  • otevřít novou pobočku v Pardubicích nebo Hradci Králové => pokrytí přechodu Čechy/Morava. Oblast dobré dostupnosti je pro tato dvě města velmi podobná, dají se tedy chápat jako zastupitelné.
  • v další fázi otevřít pobočku v Jihlavě
Vizualizace dojezdových časů do stávajících poboček Czechitas, červeně zvýrazněny oblasti s dojezdem delším než 1 hodina. Simulována změna situace při otevření nových poboček Czechitas dle našeho doporučení: Plzeň + Pardubice / Hradec Králová a následně Jihlava.

Ze stejné analýzy nám vyplynulo, že v tuto chvíli je zbytečné uvažovat o nových pobočkách v ostatních krajských městech, protože:

  • buď jsou v relativně dobře dostupné v rámci stávajících poboček (Ústí nad Labem)
  • nebo zde není možnost uplatnění absolventek, protože zde není nabídka junior IT pozic (Karlovy Vary)
Juniorní nabídky práce v IT rozřazené dle krajů a tematických kategorií Czechitas. Z vizualizace jasně vidíme, že v Karlovarském kraji nejsou nabízeny prakticky žádné junior IT pozice a proto zde není uplatnění pro absolventky kurzů Czechitas. V návaznosti na dříve uvedené doporučení otevřít novou pobočku v Pardubicích nebo Hradci Králové (obsluhující tyto dva kraje) je vhodné si všimnout, že při sečtení inzerátů za tyto dva kraje by zde plánovaná pobočka nabídla dokonce lepší uplatnění absolventek než Plzeňský kraj.

2. Přesunout část kurzů do online formy

Z analýzy dojezdových časů z přihlášek na kurzy vyplývá, že ochota dojíždět se láme okolo 30 minut, v dalších časových skupinách je počet přihlášek již výrazně nižší (další skok nastává okolo 1 hodiny času dojíždění).

U dlouhodobých kurzů je ochota dojíždět nižší než u kurzů krátkodobých. Je to logické, pokud se jedná o jednorázovou cestu, jsou účastnice ochotny dojíždět dále než při opakovaných cestách.

Vizualizace dojezdových časů z přihlášek na kurzy a akce Czechitas — odlišeno dle formy účasti (prezenční / online) a typu kurzu (krátkodobý / dlouhodobý).

Portfolio kurzů Czechitas vždy akcentovalo prezenční kurzy. Pokud však srovnáme počty přihlášek dle formy výuky, je zřejmé, že účastnice se online výuky nebojí. Z níže uvedeného grafu převisu poptávky po kurzech Czechitas je jasně vidět, že o kurzy byl zájem ve všech formách a kategoriích. Obecně lze říci, že více než třetina přihlášených zájemkyň není přijata, toto překvapivě platí i pro kurzy realizované online.

Srovnání počtu přihlášek (přijatých a nepřijatých zájemkyň) podle tematických kategorií kurzů Czechitas

Proto doporučujeme zvýšení počtu kurzů realizovaných online formou. Je třeba mít na paměti, že zdaleka ne všechny pobočky nabízejí plný rozsah portfolia kurzů. Online či hybridní forma výuky pak výrazně zvýší dostupnost kurzů. Toto je třeba řešit především u dlouhodobých kurzů, kde je zřejmá nižší ochota dojíždět a zároveň jsou tyto kurzy realizovány pouze na vybraných pobočkách.

Stávající situace dostupnosti krátkodobých a dlouhodobých kurzů Czechitas.

3. Upravit rozsahy tematických okruhů kurzů

Na základě srovnání počtu přihlášek do jednotlivých tematických kategorií kurzů Czechitas a počtu nabízených juniorních IT pozic rozdělených dle stejných kategorií doporučujeme:

  • akcentovat sekci Digitální marketing, protože aktuální podíl tohoto tématu je v kurzech Czechitas minimální, ale je to 4. nejžádanější oblast mezi inzerovanými pracovními pozicemi
  • rozšířit sekci Programuju, protože se jedná se o naprostou jedničku mezi inzerovanými pracovními pozicemi
Srovnání počtu inzerovaných junior pozic dle tematických kategorií a počtu přihlášek na stejně tematicky členěné kurzy Czechitas za rok 2020 (zvýrazněno absolvovaní / nepřijatí). Vidíme zde jasný nedostatek kurzů / přihlášek v kategorii Digitální marketing, ačkoliv by o absolventky byl na trhu práce zájem. Stejně tak vidíme podobný počet absolventů v tématech Data a Programuju, ačkoliv nabídka pozic v kategorii Programuju je výrazně vyšší než v kategorii Data. Naopak téma Web je v zájmu i počtu absolventů oproti nabídce volných míst nadhodnocena.

JAK JSME K DOPORUČENÍM DOŠLY

Dojezdové časy (autem)

Dataset časů dojezdu autem z každé obce v ČR (viz seznam obcí) do všech měst, kde má Czechitas aktuálně pobočku, a do zbylých krajských měst, jako míst potenciálních poboček, jsme scrapovaly pomocí vlastního Python skriptu přes API služby here.com. Bylo to naše první setkání s API, ale díky přehledné a podrobné dokumentaci šlo napsání skriptu překvapivě dobře. Pouze jsme řešily, jak data průběžně zapisovat, protože scrape dojezdů do jedné destinace (6.259 záznamů) trval přes 45 minut a občas relace prostě spadla. Bylo pak nutné stahování navazovat a výsledné soubory spojovat. Celkem scrapování trvalo víc jak 11 hodin a získaly jsme dataset 87.626 dojezdových časů.

Python skript pro scrapování dojezdových časů z API služby here.com

Přihlášky na kurzy Czechitas

Od Czechitas jsme získaly plné portfolio kurzů a akcí konaných v období 01/2019–03/2021 a dataset všech přihlášek za stejné období. Anonymizované údaje z přihlášek obsahovaly město, odkud se zájemkyně hlásí, a údaje o kurzu (např. název, časová dotace, pořádající pobočka, forma: online/prezenční).

Dataset přihlášek, který na první pohled vypadal moc hezky, měl jednu vadu. Město účastnice bylo uvedené tak, jak ho sama ve webovém formuláři vyplnila. Dozvěděly jsme se tak třeba, že nám do toho, kde bydlí, vůbec nic není, nebo že “teď žiju v Německu/Brně/Kolíně…, ale za měsíc se budu stěhovat”, často se objevovaly překlepy. Při transformaci v Keboole (Snowflake) našly uplatnění funkce SPLIT_PARTS, LOWER a TRANSLATE pro převedení měst na jednotnou formu bez českých znaků a především nekonečný CASE WHEN pro vyčištění překlepů nebo oddělení přihlášek ze zahraničí.

Vzhledem k tomu, že názvy obcí v ČR se často opakují, tak po prvním pokusu o napojení oficiálního seznamu obcí dataset trochu nabobtnal. Pak nezbývalo než při transformaci postupně řešit, kdy jednu ze stejnojmenných obcí vybrat a kdy přihlášky s nejednoznačným městem radši vyhodit.

SQL skript pro čištění datasetu přihlášek na kurzy — sjednocení názvu měst; oprava překlepů a oddělení zahraničí; join na seznam obcí

Když byly přihlášky na kurzy vyčištěné a obohacené o údaje o obcích, pomocí LEFT JOIN jsme na obce napojily dojezdové časy do příslušné pobočky. Aby byly všechny údaje snadno vizualizovatelné v Tableau, použily jsme joinování pomocí UNION ALL. Po úspěšných transformacích jsme všechny datasety z Kebooly exportovaly jako .tde soubor připravený k vizualizaci.

SQL skript pro propojení datasetu přihlášek na dojezdové časy do příslušné pobočky; rozdělení na online a prezenční kurzy; převedení dojezdového času na HH:MM

Inzeráty pracovních pozic

Inzeráty jsme se rozhodly scrapovat pomocí služby Apify.com a obratem narážíme na první překážku — skripty se zde zadávají v JavaScriptu, který je pro nás zcela neznámý. Základ skriptu nám proto pomohla vytvořit Zuzka z Apify a my se v něm pak “hrabaly” a řešily jsme adresování konkrétních prvků na stránkách.

Apify — task pro scraping Startupjob.cz

Stahování inzerátů ze Startupjobs.cz bylo jednodušší, ale ukázalo se, že celkový počet inzerátů a především poměr junior pozic je velmi nízký v porovnání s Jobs.cz. A nám jde hlavně o juniorské pozice. Proto se nakonec rozhodneme dále pokračovat pouze s inzeráty z Jobs.cz. A ty nás notně potrápily.

Naučily jsme se vypořádat s pagination, ale opět jsme narazily — tentokrát na limity stánek. Bez ohledu na slibovaný počet inzerátů, Jobs.cz zobrazí výpis maximálně 165 stránek (ca 5tis inzerátů) a dál už nás nepustí. Snažíme se toto obejít stahováním menších setů přes vybrané kategorie, ale opět narážíme — zjišťujeme, že není možné se spolehnout na správné zařazení inzerátů v jednotlivých kategoriích. Po třech týdnech scrapování, spojování, čištění, transformací a orchestrací v Keboole, a po řadě zpětných kontrol docházíme k závěru, že není vyhnutí a musíme scrapovat opravdu celý rozsah inzerátů Jobs.cz — na to my ale se svými znalostmi nestačíme. Nakonec tedy s úlevou vítáme pomoc Andreje, kodéra z Apify, který pro nás scrapovací actor vytvořil. Doufaly jsme v získání přehledu inzerátů za několik týdnů, nakonec vzhledem ke komplikacím musíme pracovat pouze s inzeráty staženými v horizontu 2 týdnů.

SQL skript pro rozlámání inzerátů s více kategoriemi na jednotlivé záznamy s pouze jednou kategorií

Jak celý dataset uchopit? Ze všech inzerátů potřebujeme vyfiltrovat pouze ty pro nás relevantní, tj. pozice odpovídající tématickým kategoriím kurzů Czechitas, s odlišením zda se jedná o pozici juniorskou či nikoliv. V prvním kroku vycházíme z kategorizace inzerátů, jak ji mají nastavenou v rámci Jobs.cz. V druhém kroku hledáme námi vytipované stringy v názvech inzerátů (označení pozic a technologií, junior/absolvent apod.), čímž vyzobáváme další a další pro nás relevantní inzeráty z té velké anonymní masy. Ve třetím kroku využijeme pomoci Markéty z Geeney, která nám z názvů inzerátů vyextrahuje seznam opakujících se frází, a my opět řešíme, které pro nás budou relevantní a pod jakou kategorii mají inzerát přiřadit. Ve čtvrtém kroku přes tyto fráze znovu projíždíme názvy všech inzerátů a opět přiřazujeme potřebné kategorie.

SQL skript Čištění datasetu inzerátů — doplnění informace, zde jde o juniorskou pozici; přiřazování kategorií odpovídajících tématům kurzů Czechitas; napojení datasetu Seznam obcí pro vizualizaci přes kraje a následné čištění vzniklých duplicit

Seznam všech měst a obcí v ČR

Seznam všech měst a obcí v České republice jsme získaly zde. Obsahuje 6259 obcí včetně uvedení jejich okresu, kraje, PSČ a GPS souřadnic.

GPS souřadnice jsme využily při scrapování dojezdových časů, kde jsme latitude/longitude doplňovaly do url jednotlivých stahovaných položek. Dále jsme souřadnice potřebovaly pro vizualizaci dojezdových časů a inzerátů na mapě. Přiřazení obcí pod kraje se nám zase hodilo při analýze inzerátů, kde je názornější sledovat situaci přes kraje než přes jednotlivá města.

VIZUALIZACE A ANALÝZY

Souhrn našich analýz je uveden v textu výše. Případní zájemci o hlubší studium detailů jsou srdečně zváni do našich celkových vizualizací na Tableau Public.

Přihlášky Czechitas a související vizualizace

Dojezdové časy a související vizualizace

Inzeráty a související vizualizace

PŘÍNOS NAŠEHO PROJEKTU A CO S NÍM DÁL

Věříme, že naše analýza bude impulzem k otevírání dalších poboček a kurzů Czechitas. Dle přání Martiny především v oblasti severního Plzeňska — ok, tak tedy aspoň v té Plzni.

Společně jsme vytvořily soubor nástrojů a postupů, který umožní Czechitas podložit rozhodování o otevírání nových poboček či obsahové směřování kurzů daty.

Je nám jasné, že použitý dataset inzerátů je pouze krátkodobým snímkem reality. Bylo by vhodné ve stahování a analýze inzerátů pokračovat dlouhodobě, aby bylo možné zachytit trendy na trhu práce.

Interaktivní mapa dojezdových časů je sama o sobě univerzálním nástrojem, který dle našeho názoru může najít široké uplatnění. Je samozřejmě možné v případě zájmu mapu upravit pro jiná cílová města, stačí automatizovanými skripty přepočítat dataset dojezdových časů.

Projekt lze dále rozvíjet doplněním interaktivní mapy pro dojezdy hromadnou dopravou. V limitovaném čase, který jsme mohly projektu věnovat, jsme tuto část nestihly realizovat. Stejně tak se nabízí možnost detailního rozpracování analýz přihlášek a inzerátů pracovních míst tak, aby vyhovovaly i dalším potřebám Czechitas.

CO NÁM PROJEKT DAL A VZAL

Martina Gelnerová

Do projektu jsem šla s jediným cílem — osahat si co nejvíce různých technologií, abych pak měla lepší představu, kam se v práci s daty vydat dál.

Vyzkoušela jsem si toho opravdu hodně — scrapování v Pythonu, scrapování přes Apify, milionkrát jsem se proklikala Keboolou tam a zase zpět. Ze začátku jsem měla tendenci vše řešit přes Python a for-cykly, nakonec jsem ale většinu transformací postavila ve SnowFlake. Když jsem napsala svůj první pivot table a flatten table, přestala jsem se sql bát.

V Tableau teď házím Context a Fixed v Calculation fields jako nic, stejně tak Measure Values nebo Dual Axis. Pochopila jsem, že tvrzení “práce s daty je z 80% o jejich čištění”, zdaleka není nadnesené. A v neposlední řadě jsem si uvědomila, že postavit dobrou prezentaci není zdaleka tak snadné, jak to vypadá.

Zkrátka šlo o velmi intenzivní čas. Ten euforický pocit, kdy po celodenním boji, ani ne 10 minut před koncem Hackatonu, vizualizace začne najednou ukazovat, co má. Ta frustrace, kdy snad po 150. načítáte sandbox v Keboole, protože se vám pořád někde rozjíždí počty řádek.

Přiznávám, jsem pohlcena datovým světem a již není cesta zpět.

Tereza Morávková

Měla jsem obrovské štěstí, že jsem oslovila právě Martinu. Zaujal mě její nápad, byl konkrétní a pochopitelný s praktickým přínosem. Navíc mě lákalo zobrazovaní v mapách. Tehdy jsem netušila, že Martina je univerzální IT mág a náš projekt bude mít celou dobu pevně v rukou.

Zatímco ona kouzlila se scrapováním inzerátů, já jsem žasla, jaké perly jsou mezi přihláškami účastnic. Společně jsme pomocí Marti Python skriptu stáhly dojezdové časy do všech stávajících i potenciálních poboček. Během prvního Hackathonu jsem ve Snowflake čistila dataset přihlášek (a pak mnohokrát znova a znova), spojila se seznamem obcí a v Tableau si je prohlédla v mapě a zkoušela, co z nich můžeme vyčíst. Výsledný SQL dotaz mi jako nováčkovi připadal strašně dlouhý a modlila jsem se, aby ho Keboola při transformaci zvládla (ne napoprvé, ale zvládla :)).

Před druhým Hackathonem jsem opět ve Snowflake napojila dojezdové časy na Czechitas pobočky z přihlášek. Tím se samozřejmě ukázaly další nedostatky v čištění dat, takže bylo třeba obětovat pár večerů na doladění. Ale ta radost nad grafem, který ukázal obrovský nárůst dojezdových časů na kurzy, za to stála.

Posledním společným úkolem je vybrat ty nej poznatky do prezentace a do 3 minut vtěsnat náš tříměsíční boj.

PODĚKOVÁNÍ

Děkujeme mentorům za důvěru a nelítostné zpětné vazby, které nás hodně naučily. Poděkování zaslouží také lektoři, lektorky, koučové a koučky za otevření nových obzorů a trpělivou pomoc v technický nesnázích. Spolužačkám děkujeme za blízkou komunitu a vzájemnou podporu a těšíme se, že se třeba někdy poznáme i naživo. A nesmíme zapomenout na naše rodiny, jejich trpělivost a samostatnost během našeho dobrodružství byla skvělá.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Responses (1)

Write a response