Popis algoritmu pro doporučování cesty a kurzů
Následující řádky mají za cíl sjednotit představu a posléze osvětlit fungování algoritmu pro doporučování tzv. cesty a na základě vybrané doporučené cesty doporučit vhodné obory a/nebo kurzy k dostudování.
Cílové vydání | MVP ES |
---|---|
Epic | MVP ES |
Stav dokumentu | KONCEPT |
Vlastník dokumentu | @Michal Voráč |
Tech lead | JB / Kopr |
QA | Mia? |
Slovníček
V rámci dokumentu používáme některé termíny, které nemusí být na první přečtení srozumitelné. Snad tomu aspoň trochu pomůže násl. slovníček.
kvalifikace (cesta) - tabulka Qualification - jedna se o jeden radek z tabulky strom ktery definuje kombinaci uceneho predmetove skupiny a stupne skoly a pozadovanych typu vzdelani dle zakona
kurz – tabulka Course - jedna se konkretni instanci vzdelani za danou cenu, na dane skole, umoznujici ucit dane predmety na danem stupni
typ kvalifikace - enum QualificationTypeChoices - nabyva tri moznosti (Titul, Kurz CZV a Ostatni kvalifikace)
skolni stupen - tabulka SchoolLevel - zajimaji nas pouze 1. a 2. stupen ZŠ a SŠ
predmetova skupina - tabulka SubjectGroup - obsahuje jednotlive predmety (eg cizi jazyk obsahuje fr, aj, atd)
typ vzdelani z hlediska zakona - tabulka EducationType - jedna se o definici vzdelani dle zakona ktera definuje typ kvalifikace, nazev, stupen skoly na kterem lze ucit (pouze u Kurzu CZV a Titulu), a dale pro titul definuje vysokoskolsky titul (eg Mgr.) predmetovou skupinu kterou lze ucit, stupen skoly na kterem lze ucit a specializaci (eg Ucitelstvi, Specialni pedagogika)
Algoritmus
Vstupy
Skolni stupen kde chci ucit
Predmet ktery chci ucit
Moje absolvovane vzdelani v podobe vsech dosazenych typu vzdelani dle zakona
Výstupy
Tabulka kurzu a k nim jejich typ vzdelani dle zakona a k nim cesta, ktere jsou soucasti
Kroky
Vyfiltrovani cest (kvalifikaci) na zaklade stupne a predmetove skupiny (uroven granularity je “cesta”)
Prevedeni predmetu na predmetovou skupinu (tabulky Subject a SubjectGroup)
Pomoci where podminky na tabulce Qualification ziskam mozne cesty
Vraceni kurzu odpovidajicich danym cestam (kvalifikacim) seskupenych dle cest a serazenych dle faktu ze nejakou z danych typu kvalifikaci dle zakona v dane ceste mam jiz splnenou (uroven granularity je “kurz”)
Vratim si vsechny typy vzdelani dle zakona (tabulka Education type) ze kterych se sestavaji dane cesty (uroven granularity je “typ vzdelani dle zakona”)
Do teto tabulky doplnim sloupec “completed” ktery reflektuje zda jsem dany typ vzdelani dle zakona splnil v ramci sveho absolvovaneho studia
Seradim dane cesty (kurzy jsou najoinovane na typy vzdelani dle zakona a ty na cesty)
Nejjednoduseji podle toho kolik typu vzdelani dle zakona mi zbyva dostudovat (pocet typu vzdelani dle zakona ktere nemaji atribut “completed”)
Pro konkretni uzivatelem vybranou cestu vyhledam na potřebné typy vzdelani dle zakona kurzy ktere splnuji dane podminky pres titul, stupen skoly, predmety a specializaci
Prakticky
V rámci django ORM napíšu query na Qualification s where podmínkou (subjectGroup a SchoolLevel) a zároven join na EducationTypes
Převést vrácený seznam na pandas dataframe
V rámci pandas projedu seznam všech získaných EducationTypes a pomocí vytvoření nového sloupce označím atributem completed True nebo False podle uživatelova dosaženého vzdělaní
Vytvoření nového sloupce “edu_type_json”, který pro danou EducationTypu hodím do json všechny relevantní sloupce (viz prototyp ve figmě) včetně sloupce completed
Group by dataframu podle indexu (číslo) cesty kde EducationTypes pro danou cestu hodim do seznamu v novem sloupci “edu_type_list” všechny řádky sloupce “edu_type_json”.
Sečtu pro každou cestu vytvořením nového sloupce “count” počet položek ve sloupcu “edu_type_list”
Seřadím cesty podle slouce “count” vzestupně
Endpointy
Vrátit cesty na základě dosaženého vzdělání a předmětu a stupně školy (ZU-57)
Pro danou cestu vrátit kurzy (“tituly” + “csv” + “ostatní specializace”) (ZU-65)
Možnosti rozšíření řazení
Komplikovanejsi muze byt ze dam kurzu nebo titulu ruznou obtiznost nebo zohlednim preferenci uzivatele zda chce kurz nebo titul.
Nejvic komplikovane je ze zohledim misto konani kurzu v ramci dane cesty, resp dostupnost a vzdalenost mista konani kurzu od meho bydliste
Vstupy podrobne
Aneb co od uživatele vlastně víme a jak tomu říkáme.
Co víme | Odkud | Jaké jsou možnosti | Typ možností | Jak tomu říkáme |
---|---|---|---|---|
Kde chce učit |
| single-choice | Žádaný stupeň | |
Jaký předmět chce učit |
| single-choice | Žádaný předmět | |
Jaké má formální vzdělání |
| single-choice | Typ vzdělání uživatele | |
Ze kterého oboru má bakalářské nebo magisterské vzdělání |
| single-choice | Oblast vzdělání uživatele | |
(Pro jaký stupeň má učitelské vzdělání) |
|
|
|
|
(Pro jaký předmět má učitelské vzdělání) |
|
|
|
|
Jestli má vystudovaný relevantní kurz CŽV |
| multiple-choice | Relevantní kurz CŽV uživatele | |
Jestli má další relevantní zkušenosti |
| single-choice | Další relevantní zkušenosti uživatele |
Doporučení vhodné cesty
Doporučení vhodné cesty, resp. typicky vhodných cest je první část algoritmu. Na základě uživatelových vstupů mu doporučíme a vypíšeme možné cesty, jak si doplní svojí kvalifikaci.
Doporučení možných kurzů
Doporučení možných kurzů je druhým (a posledním) krokem algoritmu. Na základě uživatelových vstupů a zvolené cesty vypíšeme konkrétní relevantní kurzy k dostudování.
Questions
Otázka | Answer | Date Answered |
---|---|---|
|
@Former user (Deleted) Tohle je zatím myslím nice-to-have. To bych navrhoval řešit potom, co budeme mít alespoň ten základní algo funkční a nasazený. Ale fajn to tu mít. Možná mohl bys to dát pod nějaký nadpis “Možnosti rozšíření”, aby bylo jasné, že to teď neřešíme?