Průvodce absolventky DA — data na pracovním trhu

Pavlína & Adéla
10 min readMay 28, 2023

Autorky: Adéla Flanderová, Pavlína Vencovská

Mentoři: Joel Jančařík, Ondřej Jelínek

Obsah:

  • Úvod: Jak si vybrat téma projektu?
  • Schéma: Jak šly tabulky za sebou
  • Kapitola první: Čištění dat
  • Kapitola druhá: Klíčová slova
  • Kapitola třetí: Jak jsme na tom s dovednostmi z akademie na pracovním trhu?
  • Kapitola čtvrtá: Statistika
  • Závěr

Téma nevíme, ale máme data!

Říkali — “Vyberte si téma, které vás zajímá, abyste měly motivaci projekt dokončit”. Tak jo. Zájmů by bylo, ale co nás jako budoucí úspěšné absolventky DA — data zajímá rozhodně obě dvě? Určitě to, co nás na pracovním trhu čeká po dokončení kurzu.

Dostaly jsme možnost využít scrapu od Apify, který před námi sepsala Martina Gelnerová, a rády jsme se ho ujaly. Pod vyscrapovanými daty jsme v Keboole dohledaly tabulku, ve které se schovávaly celé texty inzerátů z portálu jobs.cz. Rozhodly jsme se pustit do jejich analýzy a cestou se rozhlížet, kam nás data zavedou. Cesta je cíl!

Hlavní misí pro nás bylo vyzkoušet si společně témata, která jsme se na akademii učily. Pája se těšila spíš na Python, a Adél zase na SQL. Ukázalo se, že bude příležitost bohatě si vyzkoušet obojí. Podívejte, jak se nám to povedlo.

Schéma: Jak šly tabulky za sebou

Celým projektem nás provázela naše drahá Keboola. Pod krokem “Step 1” se schovává naše původní tabulka, do které se scrapují data od března do dubna (2023). Vycházíme tedy ze zhruba půl milionu vyscrapovaných inzerátů z portálu jobs.cz. V transformaci “Step 2” nám z první fáze čištění zbyde o něco víc než 30 000 unikátních inzerátů, které v kroku “Step 3” dál čistíme — už máme konkrétnější a konkrétnější představu o tom, co nás na datech zajímá. To nás směruje do takové podoby tabulek, které tvoříme v transformacích v krocích “Step 4” a “Step 5”. V závěru několikaměsíčního procesu si načítáme tabulky do Tableau a konečně vizualizujeme výsledky!

Kapitola první: Čištění dat

Čištění v SQL

Na počátku byla vyscrapovaná data, která jsme si k prohlížení otevřely ve snowflaku. Od téhle chvíle se naši mentoři, select *, a print() stávají našimi nejlepšími kamarády.

Po tom, co jsme se s tabulkou důkladně seznámily, jsme zjistily, že se nám scrapují data každý den v plném rozsahu, tudíž máme v datasetu spoustu duplicit. K jejich odstranění jsme využili window funkci, prostřednictvím které jsme nejdříve dohledaly kolikrát tam daný inzerát je, poté záznamy očíslovaly a seřadily od nejnovějšího inzerátu. Tyto inzeráty jsme poté vyfiltrovaly, abychom mohly vytvořit tabulku zahrnující pouze tyto aktuální inzeráty. Samozřejmě jsme poté ověřily, že se nám počet záznamů shoduje s distinktními záznamy původní tabulky a měly z toho první velkou radost!

S čištěním jsme ale nebyly zdaleka u konce, datum bylo třeba převést na správný datový typ a kategorie pro prvotní přehlednost spojit do jednoho sloupce.

Ve sloupci zobrazující plat se zobrazovalo všechno možné. V lepším případě to bylo rozpětí nabízeného platu. Některé hodnoty byly v korunách, jiné v eurech, některé za měsíc, jiné za rok… Ale není nic, co bychom jako účastnice DA nevyřešily a tradá sloupec platu za měsíc v korunách je na světě a s ním i nová tabulka očištěných dat.

Největším oříškem však byly kategorie, které se při zadávání inzerátu na Jobs vyplňují na 9 místech. Naším cílem bylo mít ke každému inzerátu pouze jednu vypovídající kategorii. Poté, co jsme každý sloupeček s kategoriemi unionem spojili pod sebe, jsme zjistily, že unikátních kategorií je 548. Uff, to asi v Tableau jen tak nezobrazíme. Začal dlouhosáhlý brainstorming, do jakých kategorií pozice budeme rozřazovat a hlavně JAK to uděláme. Jelikož nás čekal hackathon, to znamená více mozků, zaměřily jsme se na to JAK. JAK vypadalo asi následovně, aneb “když nevíš, kresli!”

Inspirací nám byl projekt z akademie před námi, do kterého se nám scrapovala data. Holky rozřazovaly IT pozice do 8 kategorií stanovených podle Czechitas. My ale chtěly zohlednit i klíčová slova v názvech inzerátů a protože nejsme troškařky, tak pro celý pracovní trh. Vytvořily jsme si 2 separátní tabulky, jedna zobrazovala rozřazení podle klíčového slova v názvu a druhá kategorizovala dle zadavatelů na Jobs.

A teď to všechno spojit…

Vytvořily jsme si dočasnou tabulku „kategorie_k“ na „zunionované“ kategorie, odstranily řádky, kde kategorie nebyla vyplněna a námi oblíbené joinování mohlo začít!

Hm, ke každému ID máme kategorii nebo kategorie? Co s tím? Kterou teda vyberu jako tu „pravou“ pro pracovní nabídku?

Vytvořily jsme tedy union all na join tabulkách a vytvořily nový sloupec „zdroj“, podle kterého se budeme řídit.

Ale teď, co je důležitější? Kategorie přiřazená z klíčového slova v názvu nebo z kategorie zadané uživatelem na Jobs?

Nasčítaly jsme počet jedné kategorie z jednoho zdroje a a přiřadily tu kategorii, kde byl počet vyšší. V některých případech se ale počet mohl shodovat, v tomto případě jsme rozhodly, že přiřazení dle klíčového slova v názvu bude mít přednost, ale top přiřazení bude, pokud se kategorie shodne jak v názvu, tak v kategorii přiřazené uživatelem.

Uf. Tak to bychom měly. Teď to naplnění výše zmíněných separátních tabulek s vhodnou rozkategorizací.

Začala ta nudnější část projektu a to přemýšlení jaké unikátní kategorie budeme mít a jak do nich všechny inzeráty spadají. Unikátní kategorie jsme stanovily podle Jobs.cz, které rozřazuje pracovní nabídky do zhruba 26 kategorií. Nás, jakožto účastnice DA, zajímají hlavně IT pozice, proto jsme IT svět rozdělily na dalších 8 kategorií.

A přiřazení jako takové jsme začaly konzultovat s ChatGPT. Ale i když je hodně chytrý, při tvorbě tabulek, ze kterých se poté tvořily kategorie, jsme na něj bedlivě dohlížely a všechny nesrovnalosti jsme lidským mozkem poupravily.

Po pár hodinách (ok, spíše dnech) se nám každé unikátní id inzerátu spojilo s jednou kategorií a voilá, můžeme se pustit do čištění v pythonu!

Čištění v Pythonu

Na počátku práce v pythonu jsme měly hrubou představu o tom, co s ním v projektu budeme dělat — zřejmě to bude nějaká práce s textem. Vycházíme z už zmíněné vyscrapované tabulky s půl milionem řádků, ve kterém texty inzerátů vypadaly například nějak takhle:

První věc, která při čtení inzerátů v tabulce ruší naše lidské oko jsou html tagy. Zjišťujeme, že nejsme první, kdo něco podobného řešil a je na to v pythonu knihovna! S poetickým názvem Beautiful soup. Seznamujeme se a výsledkem je očištěný text.

Jeho struktura ovšem není na práci člověkem úplně přehledná, a tak si spolu s Ondrou převádíme inzeráty ještě otagované do prohlížeče a prohlížíme si, co v nich vlastně je. Odhalujeme, že některé z nich obsahují pouze osekané části textu, a my bychom tyhle oseky chtěly vyřadit.

Pomocí kouzelného nástroje inspect (ctrl + shift + c) se noříme do hloubek struktury kódu, a voilá, určujeme si “div” s třídou “content” jako výchozí pro další analýzu.

S velkou mírou uspokojení používáme znalosti nabité domácím úkolem v pythonu, a rochníme se v tom, že víme, jak načíst data, něco s nimi provést a zase vrátit do nové tabulky. Samo po cestě procházíme i trnitějšími chvilkami při seznamování se s errorovými hláškami, ale těmi vám nebudeme kazit den.

Takhle nějak vypadal výsledný kód, který jsme prohnaly transformací (ve schématu Step 3) v Keboole.

Můžete si v něm dohledat:

  1. krásnou polívku, která texty inzerátů čistí od tagů
  2. vytvoření nového sloupce v tabulce, kde budou už jen ty inzeráty, které jsme prohlásili za obsažné a dostatečně očištěné pro naše účely
  3. taky třeba navýšení limitu toho, co jupyter notebook v keboole zvládne přechroustat, poněvadž původní soubor byl na něj moc velký
  4. tvorba tabulky ocisteny_text, ve které nám zbydou dva sloupce — “id”, a “text_div” a s nimi jsme se pustili do další práce.

V nové tabulce už data vypadají o něco lépe. Prohlašujeme je za dostatečně očištěná pro naše účely a už se těšíme, co najdeme uvnitř!

Kapitola druhá: klíčová slova

Objevujeme čistou radost, kterou máte, když se po čištění dat dostanete konečně k té více analytické části práce. Hned nás zajímá, jak jsme na tom na pracovním trhu s dovednostmi získanými na akademii — kolikrát máme v inzerátech SQL? Kolikrát Python? Používá se ještě ETL, nebo už převažuje ELT? Tvoříme si seznam všech slov, která bychom chtěly v inzerátech dohledat.

Tady je opět ukázka kódu. Můžete v něm najít:

  1. Co nás vedle předmětů z akademie zajímá na pracovním trhu
  2. Použití regulárních výrazů na hledání klíčových slov v textu
  3. A na závěr si můžete tipnout, kolikrát jsme našly ChatGPT!

Výsledkem je taková tabulka, která mi umožní v Tableau filtrovat pozice podle toho, zda je v inzerátu klíčové slovo obsažené, nebo ne. Varianta, kdy by nějaký náborář zformuloval větu “SQL vás u nás určitě nečeká” nás napadla, ale předpokládáme, že bude tak vzácná, že nám výsledek příliš nezkreslí. Jakou vizualizaci jsme z toho vyčarovaly najdete v následující kapitole.

Kapitola třetí: Jak jsme na tom s dovednostmi z akademie na českém pracovním trhu?

A konečně, jak to vypadá s počty slov v inzerátech? Nejžádanější z předmětů na akademii je s přehledem SQL, v závěsu Python, a hned za ním (pro nás překvapivě) statistika. Tady máme i naše řešení hádanky z kapitoly Klíčová slova — ChatGPT jsme v inzerátech našli pouze a právě jednou ❤

S pomocí filtrů jsme v Tableau vyčarovaly dashboard, na kterém si můžeme navolit naše oblíbené dovednosti a podle nich vybírat tu pravou práci. Funguje tak, že pokud nemám preferenci, nechám zaškrtlé obojí, pokud mám, volím True nebo False. Pro ukázku jsem zvolila tu variantu, kdy vyřazuji inzeráty bez uvedení SQL a zároveň chci vidět ty z inzerátů, které uvádí plat. Uvedená částka je průměrem v případě, že bylo u inzerátu v platu uvedené rozpětí.

Na celém trhu z nástrojů stále vítězí Excel, ale v rámci Datové analytiky ho přeci jen předehnalo SQL.

A jak jsme na tom s platovým ohodnocením? V porovnání s dalšími odvětvími IT světa jsme na tom jako datoví analytici zhruba uprostřed.

Zato pokud zohledníme celý pracovní trh, je značné, že všechny IT kategorie vedou. Pokud se tedy shodneme, že čím větší medián platu, tím lepší. 😊

V následujícím grafu je znázorněný počet pracovních inzerátů na portálu Jobs.cz. Barevně rozlišený je medián platu v daném odvětví. Je zde vidět, že například v administrativě je nabídek na trhu práce hodně, ale v porovnání s ostatními je odměna za tuto práci nízká.

Kapitola čtvrtá: Statistika

Protože statistika pro nás nuda není, chtěly jsme si srovnání mezi platy otestovat i přes statistické hypotézy.

Při výběru testů jsme dbaly na pokyny našeho lektora Jirky Pešíka a preferovaly ty, které byly vytvořeny více než jedním odborníkem. Věříme výroku “víc hlav víc ví” a využíváme tedy kolektivní moudrosti při výběru nejvhodnějších testů.

IT vs. mimo IT sektor

Traduje se, že platy v IT jsou výrazně odlišné, než v jiném pracovním prostředí. Je to pravda? Pojďme si “promluvit” se statistikou a uvidíme, jestli se to potvrdí.

Začaly jsme provádět test normality na naše data, přičemž jsme zvolily Shapiro-Wilkův test.

  • Nulová hypotéza (H0): Platy pracovních nabídek v našem souboru dat mají normální rozdělení.
  • Alternativní hypotéza (HA): Platy pracovních nabídek v našem souboru dat nemají normální rozdělení.

Po provedení Shapiro-Wilkova testu naše data neprojevila normální rozdělení. Na základě tohoto zjištění jsme se rozhodly pokračovat v analýze pomocí neparametrického testu.

Pro otestování rozdílu mezi průměrnými platy v oblasti IT a mimo IT jsme se rozhodly použít Mann-Whitneyho test, který je jedním z neparametrických testů.

  • Nulová hypotéza (H0): Neexistuje žádný rozdíl mezi průměrnými platy v IT a mimo IT.
  • Alternativní hypotéza (HA): Existuje statisticky významný rozdíl mezi průměrnými platy v IT a mimo IT.

P-hodnota vyšla menší než 0.05, ti zkušenější už teď tuší výsledek, pro zbytek je interpretace taková, že v tomto případě zamítáme nulovou hypotézu a přijímáme alternativní, což nás vede k výsledku, který už jsme od počátku předpokládaly a to, že opravdu existuje významný rozdíl mezi průměrnými platy v IT a mimo IT!

A aby to opravdu nebyla nuda, zobrazily jsme si pro toto srovnání i boxploty s označením mediánů pro IT sektor a pro “ne IT” sektor.

Digitální akademie: Data nebo Web?

Pro IT svět už jsme se rozhodly, i když pokud bychom se zaměřovaly ve výběru oboru jen podle předešlých analýz, tak bychom daleko nedošly, že ..

Jakou tedy zvolit digitální akademii od Czechitas❤?

Druhá statistická analýza se zaměřila na data pro “Data analyst / BI” a “Web development”.

Nejprve jsme otestovaly normalitu dat pomocí Shapiro-Wilkova testu, která zde vyšla negativně a proto jsme znovu použily neparametrický Mann-Whitneyho test. P-hodnota vyšla větší, než 0.05, tudíž nezamítáme nulovou hypotézu a můžeme říci, že neexistuje statisticky významný rozdíl mezi průměrnými platy v oblasti dat a webu.

Pro názornost jsme i tady vytvořily boxploty na obě kategorie, které prokazují předchozí tvrzení a zobrazují medián.

Závěrem

Poslední měsíce nás přesvědčily, že se na českém pracovním trhu jako absolventky Digitální akademie — data neztratíme. Doufáme, že vás jsme přesvědčily taky.

Velké poděkování patří určitě každému, kdo se s námi pustil na tuhle cestu. Našim spolužačkám za společné prožívání euforie z úspěchů i neúspěchů. Našim lektorům/kám a koučům/kám za nadšení pro obor, kterým nás nakazili. Za to stejné patří dík i našim mentorům, a k tomu za trpělivé vedení projektu, protože jeho realizace by bez nich trvala mnohem, mnohem, mnohem déle a cesta by byla o poznání trnitější. A určitě i Terezce a celému týmu Czechitas za tuhle jedinečnou příležitost, o které už teď můžeme s jistotou říct, že nám změnila životy! (k lepšímu, aby bylo jasno, k lepšímu). Stálo to za to!

--

--