Upozornenie:

Táto domáca úloha z roku 2018 bola písaná mnou v roku 2018. Tento predmet bol môj prvý hryz do dátovej vedy.

Odovzdanú prácu tu nechávam v originále, bez zmien.

BI-VZD: Úkol č. 1 – vizualizace dat a web scraping (do 26. října)

  • V rámci tohoto úkolu musíte opanovat nástroje pro stahování dat z webu (tzv. web scraping) a následně data zpracovat a vizualizovat.
  • Jak jsme ukázali na prvním cvičení (poslední část), data o závěrečných pracích na některých univerzitách skýtají zajímavé informace.
  • Vaším úkolem je vybrat si jednu z univerzit ze seznamu níže, uložit data o závěrečných pracích v tabulkovém formátu a pak vymyslet vizualizace a zobrazení dat, které umožní orientaci v těchto datech a zvýrazní zajímavé informace.

Úkoly jsou zadány tak, aby Vám daly prostor pro invenci. Vymyslet jak přesně budete úkol řešit, je důležitou součástí zadání a originalita či nápaditost bude také hodnocena!

Výběr zdroje dat

Níže jsou odkazy na katalogy knihoven vybraných vysokých škol. Je třeba pochopit, jak z něho dostat informace o závěrečných pracích (bakalářky a diplomky) a ty pak nějak vyparsovat.

Případně si můžete vybrat školu dle uvážení na portálu theses.cz, ale musí být splněno následující:

  • závěrečné práce musí být z jedné školy, alespoň z období 5 let, a musí jich být alespoň 2000,
  • u každé práce získáte alespoň následující: informaci o typu (bakalářka/diplomka), název, jméno vedoucího (vč. titulů), rok obhajoby, hodí se i jméno oponenta.

Pokyny k vypracování

Základní body zadání, za jejichž (poctivé) vypracování získáte 8 bodů:

  • Stáhněte data z vybraného zdroje a uložte je do tabulky ve formátu csv.
  • Data musí obsahovat u každé práce (= 1 řádek tabulky) alespoň toto:
    • informaci o typu (bakalářka/diplomka), název, jméno vedoucího (vč. titulů), rok obhajoby, hodí se i jméno oponenta
  • V druhé části Vašeho Jupyter notebooku pracujte s touto tabulkou načtenou z csv souboru (aby opravující nemusel spouštět stahování z webu).
  • Tabulku ve formátu csv také odevzdejte.
  • S využitím vybraných nástrojů zpracujte data a vymyslete vizualizace a grafy, aby bylo vidět následující:
    • Časový vývoj (po rocích) počtu obhájených prací (vč. rozlišení jejich typu).
    • Nejpilnější vedoucí (počet vedených prací na rok, za celou dobu atp.).
    • To samé pro oponenty a pro součet vedených a oponovaných prací.
    • Průměrný počet (medián, minimum, maximum, rozptyl) prací na vedoucího (resp. oponenta) a rok a další informace o rozložení vedení prací na školitele.
    • Rozložení vedoucích prací (a oponentů) podle titulů (bakalářský titul, magisterský titul, doktorský titul, docent, profesor, atp.).

Další body zadání za případné další body (můžete si vybrat, maximum bodů za úkol je každopádně 12 bodů):

  • (až +2 body) Zobrazte tabulku (a případně i jiné věci) v Jupyter notebooku pomocí http://beakerx.com.
  • (až +2 body) Vymyslete další zajímavé pohledy na data.
  • (až +4 body) Vytvořte na základě Vašich dat interaktivní webovou stránku s popisem a vizualizací dat (bude asi nutné použít i nějaké javascriptové balíčky atp.).
  • (až +4 body) Stáhněte data k více školám a porovnejte výsledky. Zkuste najít společné školitele/oponenty.

Poznámky k odevzdání

  • Řiďte se pokyny ze stránky https://courses.fit.cvut.cz/BI-VZD/homeworks/index.html.
  • Odevzdejte nejen Jupyter Notebook, ale i csv soubor(y) se staženými daty.
  • Opravující Vám může umožnit úkol dodělat či opravit a získat tak další body. První verze je ale důležitá a bude-li odbytá, budete za to penalizováni.

METROPOLITNÍ UNIVERZITA PRAHA

Sťahovanie dát a uloženie do tabuľky vo formáte .csv

  • Pre spracovávanie prác som si vybral túto univerzitnú stránku, pretože, mimo iného, dokáže zobrazovať 100 položiek na jeden request. Tým som znížil celkový počet requestov a teda som menej čakal na server. Metódu POST som, bohužiaľ, nedokázal použiť, musel som parsovať celé html stránky.
  • Nepodarilo sa mi získať lepšie spracovateľné dáta, formát MARC21 je asi najlepšie strojovo čitateľný (aspoň sa tak na začiatku tváril).
  • Rozhodol som sa zvýšiť počet dát, nech to vyzerá celé zaujímavejšie. Naťahal som všetky práce z rokov 2012-2017, dostal som skoro 9000 záznamov.
  • Dáta som stiahol najskôr ako .html súbory (~25MB), ktore som neskôr parsoval do .csv súborov pomocou BeautifulSoup a Pandas.
import numpy as np
import pandas as pd
import sklearn as skit
import matplotlib.pyplot as plt
import seaborn as sns
import requests
from bs4 import BeautifulSoup
import re
from collections import OrderedDict

Načítavanie a uloženie do .csv súborov.

def retrieve_page(url, year, page):
    dll = "l.dll?"
    parameters = {'h~' : '', 'DD' : '56', 'TF' : 'K', 
                  'P1' : '19', 'V1' : 'r', 'H1' : str(year),'J1' : '.', 'L1' : '1', 
                  'P2' : '2', 'V2' : 'z', 'H2' : '', 'J2' : '.', 'L2' : '1', 
                  'P3' : '3', 'V3' : 'z', 'H3' : '', 'J3' : '.', 'L3' : '1', 
                  'P4' : '4', 'V4' : 'z', 'H4' : '', 'J4' : '.', 'L4' : '1', 
                  'P5' : ' ', 'V5' : 'z', 'H5' : '', 'J5' : '.', 
                  'VSE' : 'on', 'TL' : 'MR21', 'Pg' : str(page)
    }
    print("fetching...")
    r = requests.get(url + dll, params=parameters)
    print("fetched from URL: " + r.url + "\n")
    return r.text

def get_marcs(content):
    bs = BeautifulSoup(content, features="html5lib")
    table = bs.find("table",{"class":"vse"}) 
    vse = table.findAll("font")
    marcs = list(f.get_text() for f in vse)
    return marcs

def parse_marc(marc):
    """
    Main function for parsing.
        Input str example:

        lab    -----nam  22----- i 4500
        008    171115s2017    xr |||||||||||||||||eng d
        100 1# $aBalochová, Žaneta,$c[absolvent],$g8853$4dis
        245 10 $aOptimalizace systému řízení bezpečnosti České republiky =$bOptimalization of the security 
        management system of the Czech Republic - NEOBHÁJENÁ PRÁCE /$cJan Žantovský ; vedoucí práce Pavel Štalmach
        264 #1 $aPraha,$c2017
        300 ## $a85 stran
        500 ## $aDatum obhajoby: 21.06.2017
        502 ## $aDiplomová práce (Mgr.) -- Metropolitní univerzita Praha, o.p.s., Katedra anglofonních studií, 2017
        655 #7 $adiplomové práce$7fd132022$2czenas
        700 1# $aKolinská, Klára,$d1967-$7mzk2005312854$4ths
        700 1# $aŽeníšek, Jakub$4opn
        710 2# $aMetropolitní univerzita Praha$7kn20080215020

    Returns dict
        all types of columns needed for later pd.DataFrame.

    """
    temp = {}
    leader = "";
    oponent = "";
    for s in marc.splitlines():
        code = s[:3]
        meat = re.split("[\$][a-z0-9]", s[7:])
        try:
            if(code == "008"):
                temp["id"] = s[7:13]
                temp["year"] = s[14:18]
                temp["lang"] = s[-5:-2]
            if(code == "100"):
                temp["author"] = re.split("[\$][a-z0-9]", s[5:])[1].replace(',' ,'')
            if(code == "245"):
                split = re.split("[\$][a-z0-9]", s[7:])
                pos_second = 2
                if("[rukopis]" in s):
                    pos_second = 3
                if(temp["lang"] == "eng"):
                    temp["name_eng"] = split[1][:-2]
                    temp["name_czk"] = split[pos_second][:-2]
                if(temp["lang"] == "cze" or temp["lang"] == "slo"):
                    temp["name_czk"] = split[1][:-2]
                    temp["name_eng"] = split[pos_second][:-2]
                if "NEOBHÁJENÁ PRÁCE" in s:
                    temp["unconvinced"] = 1
                if ("vedoucí práce" in s):
                    leader = re.search('vedoucí práce?(.*)', s).group(1).split(";")[0].strip()
                if ("oponent" in s):
                    res = re.search('oponent(.*)$', s)
                    oponent = res.group(1).strip()

            if(code == "264"):
                if("place" not in temp):
                    temp["place"] = meat[1].replace(",", "")
                temp["year"] = meat[2]
            if(code == "300"):
                pages = re.match("[0-9]+", meat[1]).group(0)
                temp["pages"] = pages
            if(code == "502"):
                    spl = meat[1].split("--")
                    temp["thesis"] = spl[0].strip()
                    temp["school"] = spl[1].split(",")[0].strip()
                    faculty = spl[1].split(",")[2].strip()
                    if(not faculty.isdigit()):
                        temp["faculty"] = faculty
            if(code == "700"):
                if(meat[len(meat)-1]=="opn"):
#                     if("oponent" not in temp):
                    temp["oponent"] = meat[1].replace(",", "")
                if(meat[len(meat)-1]=="ths"):
#                     if("leader" not in temp):
                    temp["leader"] = meat[1].replace(",", "")

            if(code == "260"):
                if("place" not in temp):
                    temp["place"] = meat[1].replace(":", "").strip()
        except Exception as e:
            print("ERROR in line: " + s)
            print(e)
            raise(e)

    if ("oponent" not in temp and oponent != ''):
        temp["oponent"] = reverse_words(oponent)

    if ("leader" not in temp and leader != ''):
        temp["leader"] = reverse_words(leader)
    return temp

def reverse_words(input): 
    inputWords = input.split(" ") 
    inputWords=inputWords[-1::-1] 
    output = " ".join(inputWords) 
    return output 

def retrieve_csv(year, pages, fetch=False):
    """
    set fetch=True, if you need to download the html.

    writes .csv file with name: 'mupcz<year>.csv' of given year.
    """
    url = 'https://s-knihovna.mup.cz/katalog/'
    dfs = list()
    for page in range(1, pages + 1):

        if(fetch==True):
            page_html = retrieve_page(url, year, page)

            with open("html-pages/" + str(year) + str(page) + ".html", 'w') as file:
                file.write(page_html)
        else:
            with open("html-pages/" + str(year) + str(page) + ".html", 'r') as file:
                page_html = file.read()

        marcs = get_marcs(page_html)
        data = list()
        print("processing: " + str(len(marcs)) + " records...")
        for d in marcs:
            try:
                parsed = parse_marc(d)
                if(parsed != {}):
                    data.append(parsed)
            except Exception as e:
                print(e)
        print("processed: " + str(len(data)) + " records.")
        df = pd.DataFrame(data)
        dfs.append(df)
    all = pd.concat(dfs, sort=False)
    all.to_csv("mupcz" + str(year) + ".csv")

npages = 20

Drobné testy

  • Potreboval som otestovať používané metódy, dáta neboli vždy v konzistentnom stave (autor sa niekedy volal ‘[rukopis]’, vedúci práce zas ‘NEOBHÁJENÁ PRÁCE’ atď.)
# # tests 

# with open('tests.txt','r') as f:
#     test = f.read()
#     print(test)
#     print(parse_marc(test))

# with open("html-pages/" + str(2012) + str(1) + ".html", 'r') as file:
#     page_html = file.read()
# marcs = get_marcs(page_html)
# data = list()
# print("processing: " + str(len(marcs)) + " records...")
# for d in marcs:
#     try:
#         print(d)
#         parsed = parse_marc(d)
#         if(parsed != {}):
#             print(parsed)
#             print()
#             data.append(parsed)
#     except Exception as e:
#         print(e)
# print("processed: " + str(len(data)) + " records.")

# parse_marc(get_marcs(retrieve_page(url='https://s-knihovna.mup.cz/katalog/', year=2017, page=12))[0])

Spúšťať len v prípade sťahovania/parsovania dát

  • Mohlo by to trvať dlho. Ak sa do funkcie retrieve_csv() pripíše fetch=True, začne sťahovať dáta priamo z knižnice.
  • Inak to len parsuje dáta z html stránok (mali by byť stiahnuté predom). Trvá to cca ~35sec.
# Start only when you need to fetch/parse data. 
# This could take longer than you would like to (parsing: ~35sec, fetching: way too long.).

# import time
# start = time.time()
# for year in range(2012, 2018):
#     retrieve_csv(year, npages)
# end = time.time()
# print("evaluation time: " + str(end-start) + " seconds")

Vsetky .csv subory su prilozene v commite.

  • Staci ich len poslat do dataframe. Neskor pripadne zobrazit zakladne info.
csvs = list()
for year in range(2012, 2018):
    csvs.append(pd.read_csv("mupcz" + str(year) + ".csv"))
df = pd.concat(csvs, ignore_index=True, sort=False)
# display(df.head())
display(df.info())
# display(df.describe())
display(df.isnull().sum())
# display(df.notnull().sum())
display(df.nunique())
# df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8968 entries, 0 to 8967
Data columns (total 15 columns):
Unnamed: 0     8968 non-null int64
author         8968 non-null object
faculty        8950 non-null object
id             8968 non-null int64
lang           8968 non-null object
leader         8964 non-null object
name_czk       8968 non-null object
name_eng       8968 non-null object
oponent        8920 non-null object
pages          8965 non-null float64
place          8968 non-null object
school         8967 non-null object
thesis         8967 non-null object
unconvinced    296 non-null float64
year           8968 non-null int64
dtypes: float64(2), int64(3), object(10)
memory usage: 1.0+ MB



None



Unnamed: 0        0
author            0
faculty          18
id                0
lang              0
leader            4
name_czk          0
name_eng          0
oponent          48
pages             3
place             0
school            1
thesis            1
unconvinced    8672
year              0
dtype: int64



Unnamed: 0      100
author         7356
faculty          13
id              389
lang              3
leader          426
name_czk       7928
name_eng       8249
oponent         627
pages           170
place             9
school            1
thesis            8
unconvinced       1
year              6
dtype: int64

Čistenie dát

  • niekedy sa vyskytnú drobné nedostatky v dátach.
dc = df.copy()
dc.drop(columns=["Unnamed: 0"], inplace=True)
dc["convinced"] = dc["unconvinced"].isnull()
dc.drop(columns=["unconvinced"], inplace=True)
dc.drop(columns=["school"], inplace=True)

df = dc.copy()
dc = df.copy()

string_cols = ["thesis", "faculty", "lang", "place", "year"]
for col in string_cols:
    dc[col] = dc[col].astype('category')

display(dc.nunique())
df = dc.copy()
df.info()
author       7356
faculty        13
id            389
lang            3
leader        426
name_czk     7928
name_eng     8249
oponent       627
pages         170
place           9
thesis          8
year            6
convinced       2
dtype: int64


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8968 entries, 0 to 8967
Data columns (total 13 columns):
author       8968 non-null object
faculty      8950 non-null category
id           8968 non-null int64
lang         8968 non-null category
leader       8964 non-null object
name_czk     8968 non-null object
name_eng     8968 non-null object
oponent      8920 non-null object
pages        8965 non-null float64
place        8968 non-null category
thesis       8967 non-null category
year         8968 non-null category
convinced    8968 non-null bool
dtypes: bool(1), category(5), float64(1), int64(1), object(5)
memory usage: 544.9+ KB

Natiahnutie titulov do separátnej tabuľky

  • Tituly u vedúcich a oponentov neboli priamo v dátach z knižnice.
  • Sťahujem ich teda priamo zo stránky MUP, podobný princíp ako pri sťahovaní záverečných prác. .csv priložené.
def retrieve_academics_html(url, fetch=False):
    name = url.split("/")[-2]
    name = "html-pages/" + name + ".html"
    if(fetch==True):
        page_html = requests.get(url).text
        with open(name, 'w') as file:
            file.write(page_html)
        print("file: " + name + ", written.")
    else:
        with open(name, 'r') as file:
            page_html = file.read()
            print("file: " + name + " was read.")
    return page_html


def get_dotted(html):
    bs = BeautifulSoup(html)
    faculty = bs.find(name="h1").text
    temps = []
    table = bs.find("div", {"class": "uckatedra2"})
    spans = table.findAll("span", attrs={"vc-inner"})
    for s in spans:
        temp = {}
        temp["faculty"] = faculty
        gen = list(s.children)

        pair = get_titles(gen[0])
        temp["name"] = pair[0]
#         print(pair[0])
        temp["titles"] = pair[1]
#         print(pair[1])
        for title in pair[1]:
            temp[title] = 1
#         temp[]
        try:
            temp["special"] = gen[2].replace("-", "").strip()
        except Exception as e:
            pass
        temps.append(temp)

    externals = get_externals(bs.find("ul", {"class": "ucext"}), faculty)
    for t in externals:
        temps.append(t)

    return temps

def get_externals(lis, faculty):
    if lis is None:
        return []

    lis = lis.find_all("li")

    temps = []
    for l in lis:
        raw = l.text
        temp = {}
        temp["faculty"] = faculty

        pair = get_titles(raw)
        temp["name"] = pair[0]
#         print(pair[0])
        temp["titles"] = pair[1]
        temp["special"] = "externista"
#         print(pair[1])
#         for title in pair[1]:
#             temp[title] = True
        temps.append(temp)
    return temps

def get_titles(full):
    titles = []
    name = ""
    first = full.split(",")[0]
    second = full.split(",")[1:]

    for s in first.split(" "):
        if "." in s:
            titles.append(s.strip())
        if ("." not in s and "^et$" not in s):
            name += s + " "
    name = reverse_words(name).strip()

    for spl in second:
        spl = spl.replace(",", "").strip()
        if(spl != ""):
            titles.append(spl.strip())
    return name, titles
# # tests again

# display(get_titles("Markéta Zezulková"))
# display(get_titles("Mgr. Miroslava Škaloudová"))
# display(get_titles("Mgr. Markéta Zezulková, Ph.D., MA, PGCE"))
# display(get_titles("doc. PhDr. RNDr. Nikola Hynek, M.A., PgDip Res, Ph.D"))
# display(get_titles("doc. Ing. Tomáš Frýza, Ph.D."))
# display(get_titles("PhDr. et Mgr. Ivana Spurná, Ph.D."))
# display(get_titles("doc. PhDr., PaedDr. Hana Horáková, Ph.D."))
# display(get_titles("PhDr. Petra Andělová, Ph.D."))

# get_dotted(retrieve_academics_html("https://www.mup.cz/o-univerzite/katedry/katedra-pravnich-disciplin-a-verejne-spravy/"))

Spustiť v prípade potreby sťahovania a parsovania titulov priamo zo stránky

  • Ak chcete sťahovať a parsovať zo stránky katedier, stačí len nastaviť vo funkcii fetch=True
  • Ak to už raz pustíte, nstaviť na False, html súbory by mali byť natiahnuté. Čítam teda odtiaľ.
  • Každopádne nič z tohoto nepotrebujete (jedine ak by ste veľmi chceli overiť správnosť kódu), všetko je v academics.csv
  • Nerátam externistov.
def retrieve_academics_csv(fetch=False):
    url = "https://www.mup.cz/"
    r = requests.get(url + "o-univerzite/katedry/")
    bs = BeautifulSoup(r.text, features="html5lib")
    div = bs.find(name="div", attrs={"border-box"})
    urls = []

    for a in div.findAll("a", href=True):
        urls.append(url + a["href"])

    print("fetching and parsing...")
    acs = pd.DataFrame()
    for u in urls:
        html = retrieve_academics_html(u, fetch)
        ac = pd.DataFrame(get_dotted(html))
        acs = pd.concat([ac, acs], ignore_index=True)
    print("fetching and parsing done!")
    acs.to_csv("academics.csv")

#     uncomment this, when csv needed
# retrieve_academics_csv(fetch=True)
acad = pd.DataFrame(pd.read_csv("academics.csv"))
acad.drop(columns=["Unnamed: 0"], inplace=True)
display(acad.name.isnull().sum())
display(acad.name.nunique())
display(acad.info())
dropped = acad.name.drop_duplicates()
dropped.duplicated().count()
1



223


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 233 entries, 0 to 232
Data columns (total 30 columns):
B.A.                       4 non-null float64
BA                         1 non-null float64
CSc.                       14 non-null float64
CSc. Dr. hab.              1 non-null float64
DELTA                      2 non-null float64
DSc.                       1 non-null float64
Dr.                        1 non-null float64
Ing.                       26 non-null float64
JUDr.                      18 non-null float64
LL.M.                      1 non-null float64
M.A.                       6 non-null float64
M.Phil.                    1 non-null float64
M.Sc. et M.Sc.             1 non-null float64
MBA                        4 non-null float64
MSc.                       1 non-null float64
MUDr.                      1 non-null float64
Mgr.                       44 non-null float64
PaedDr.                    3 non-null float64
PaedDr. Hana Horáková      1 non-null float64
Ph.D.                      79 non-null float64
Ph.D. - vedoucí katedry    1 non-null float64
PhDr.                      33 non-null float64
RNDr.                      3 non-null float64
doc.                       23 non-null float64
faculty                    233 non-null object
name                       232 non-null object
prof.                      16 non-null float64
prom. práv.                1 non-null float64
special                    128 non-null object
titles                     233 non-null object
dtypes: float64(26), object(4)
memory usage: 54.7+ KB



None





224

Časový vývoj (po rocích) počtu obhájených prací (vč. rozlišení jejich typu).

gr = df.groupby(["year","thesis"]).size()
gr = gr.reset_index(name="count")
gr
sns.catplot(data=gr, x="year", y="count", hue="thesis", kind="bar", legend_out=True, aspect=1.5, height=7)
<seaborn.axisgrid.FacetGrid at 0x11313bd68>

Nejpilnější vedoucí (počet vedených prací na rok, za celou dobu atp.).

group = df.groupby(["leader"]).size()
bestL = group.idxmax()

best_acad = acad[acad.name == bestL]
display(bestL + ": as best leader, leading: " + str(group.values.max()) + " thesis.")
display(best_acad[["name", "titles", "faculty"]])


best_leader = df[df.leader == bestL]

# best_leader.year.astype("category")
best_leader.thesis = best_leader.thesis.astype("category")

sns.countplot(data=best_leader, x=best_leader.year, hue=best_leader.thesis)
'Abrhám Josef: as best leader, leading: 260 thesis.'
nametitlesfaculty
20Abrhám Josef[‘doc.’, ‘Ing.’, ‘Ph.D.’]Katedra právních disciplín a veřejné správy
/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py:4405: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self[name] = value





<matplotlib.axes._subplots.AxesSubplot at 0x1139d45f8>




To samé pro oponenty a pro součet vedených a oponovaných prací.

group = df.groupby(["oponent"]).size()
bestO = group.idxmax()
display(bestO + ": as best oponent, oponing: " + str(group.values.max()) + " thesis.")

# napriek vsetkej snahe, najlepsi oponent ostava utajeny...
best_oponent = df[df.oponent == bestO]

best_oponent = df[df.oponent == bestO]

sns.countplot(data=best_oponent, x=best_oponent.year, hue=best_oponent.thesis)
'Fireš Adam: as best oponent, oponing: 427 thesis.'





<matplotlib.axes._subplots.AxesSubplot at 0x113be04a8>
leaders = df.groupby(["leader"], sort=True).size()
oponents = df.groupby(["oponent"], sort=True).size()

l = pd.DataFrame(columns=["name", "leading"])
l.name = leaders.keys()
l.leading = leaders.values
l.sort_values("leading",ascending=False)

o = pd.DataFrame(columns=["name", "oponing"])
o.name = oponents.keys()
o.oponing = oponents.values

r = l.set_index("name").join(o.set_index("name"))
r["sum"] = r["leading"] + r["oponing"]
r.fillna(0)
r.sort_values("sum", ascending=False).head(10)
leadingoponingsum
name
Fireš Adam234427.0661.0
Abrhám Josef260311.0571.0
Horváthová Zuzana160175.0335.0
Anděl Petr142181.0323.0
Novotný Lukáš163155.0318.0
Rouč Vít106120.0226.0
Makariusová Radana18136.0217.0
Bauerová Helena12095.0215.0
Křepelka Jiří10098.0198.0
Cabada Ladislav10196.0197.0

Průměrný počet (medián, minimum, maximum, rozptyl) prací na vedoucího (resp. oponenta) na rok a další informace o rozložení vedení prací na školitele.

# overall
print("Overall stats")
display("MEDIAN", r.median())
display("MEAN", r.mean())
data = r.copy()
data.sort_values(["leading", "oponing"], ascending=False, inplace=True)
# sns.regplot(x=data.leading, y=data.oponing, ci=100, marker='+')
Overall stats



'MEDIAN'



leading     7.0
oponing    10.5
sum        27.0
dtype: float64



'MEAN'



leading    21.042254
oponing    20.490323
sum        48.329032
dtype: float64
dfgL = df.groupby(
        by=["year", "leader"]
    ).size().reset_index(name="per_leader")
dfgL.year = dfgL.year.astype("category")
dfgL.head()
yearleaderper_leader
02012Abrhám Josef73
12012Adamcová Lenka3
22012Anděl Petr40
32012Andělová Petra16
42012Bahýl’ová Lenka1
dfgO = df.groupby(
        by=["year", "oponent"]
    ).size().reset_index(name="per_oponent")
dfgO.year = dfgO.year.astype("category")
dfgO.head()
yearoponentper_oponent
02012Abrhám Josef59
12012Adamcová Lenka10
22012Anděl Petr43
32012Andělová Petra6
42012Babický Stanislav1
dfi = dfgL.copy()
# dfi = dfg.set_index([dfg.year, dfg.leader])
# dfi.drop(columns=["year", "leader"], inplace=True)
dfi = dfi.groupby("year").mean()
dfi.rename(columns={"per_leader":"mean_per_year"})
mean_per_year
year
20126.552239
20137.497778
20147.473934
20157.455882
20167.309278
20176.203704
dfi = dfgO.copy()
# dfi = dfg.set_index([dfg.year, dfg.leader])
# dfi.drop(columns=["year", "leader"], inplace=True)
dfi = dfi.groupby("year").mean()
dfi.rename(columns={"per_oponent":"mean_per_year"})
mean_per_year
year
20124.584656
20135.213622
20144.980831
20154.828571
20164.889655
20174.118852
df1 = dfgL.rename(columns={"per_leader":"per_person"})
df2 = dfgO.rename(columns={"per_oponent":"per_person"})



concatenated = pd.concat([df1.assign(dataset='leader'), df2.assign(dataset='oponent')], 
                         sort=False, ignore_index=True)



sns.catplot(x='year', y='per_person', data=concatenated, hue="dataset", 
            kind="violin", legend_out=True, aspect=1.5, height=8)
# lo = pd.concat([dfgL, dfgO], ignore_index=True)
# sns.catplot(data=lo, )
/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval





<seaborn.axisgrid.FacetGrid at 0x113de1780>

Rozložení vedoucích prací (a oponentů) podle titulů (bakalářský titul, magisterský titul, doktorský titul, docent, profesor, atp.).

  • Informácie o akademických pracovníkoch celkovo
# https://gist.github.com/jlln/338b4b0b55bd6984f883

def splitDataFrameList(df,target_column,separator):
    ''' df = dataframe to split,
    target_column = the column containing the values to split
    separator = the symbol used to perform the split
    returns: a dataframe with each entry for the target column separated, with each element moved into a new row. 
    The values in the other columns are duplicated across the newly divided rows.
    '''
    def splitListToRows(row,row_accumulator,target_column,separator):
        split_row = row[target_column].replace("[", "").replace("]", "").replace("'", "").split(separator)
#         split_row = row[target_column]
        for s in split_row:
            new_row = row.to_dict()
            new_row[target_column] = s.strip()
            row_accumulator.append(new_row)
    new_rows = []
    df.apply(splitListToRows,axis=1,args = (new_rows,target_column,separator))
    new_df = pd.DataFrame(new_rows)
    return new_df
print("Nr. of externals:", len(acad[acad.special == "externista"].index))
# display(acad.head(5))

# gr = acad.groupby(["faculty","name"]).size().reset_index(name="nr")
# a = acad.copy()
# # a = acad.agg(func="sum")
# a = acad.replace(np.nan, 0)
# a = a.groupby(["faculty"])
# display(a.agg("sum"))
# display(type(acad.titles[0]))

a = acad.copy()
a = a[["titles", "faculty"]]


a = splitDataFrameList(a, "titles", ",")

a = a.groupby(["faculty", "titles"]).size().reset_index(name="count")
a
# a = a.dropna()
# a.isna().count()
Nr. of externals: 100
facultytitlescount
0Katedra International Relations and European S…Ing.2
1Katedra International Relations and European S…Mgr.3
2Katedra International Relations and European S…Ph.D.8
3Katedra International Relations and European S…doc.1
4Katedra anglofonních studiíB.A.1
5Katedra anglofonních studiíBA1
6Katedra anglofonních studiíBc.1
7Katedra anglofonních studiíCSc.3
8Katedra anglofonních studiíDELTA1
9Katedra anglofonních studiíM.A.3
10Katedra anglofonních studiíMgr.8
11Katedra anglofonních studiíPh.D.10
12Katedra anglofonních studiíPhDr.9
13Katedra anglofonních studiídoc.3
14Katedra anglofonních studiíprof.3
15Katedra asijských studiíIng.3
16Katedra asijských studiíM.A.1
17Katedra asijských studiíM.Sc. et M.Sc.1
18Katedra asijských studiíMgr.5
19Katedra asijských studiíPh.D.12
20Katedra asijských studiíPhDr.5
21Katedra asijských studiídoc.4
22Katedra bezpečnostních studiíDr.1
23Katedra bezpečnostních studiíIng.5
24Katedra bezpečnostních studiíM.Phil.1
25Katedra bezpečnostních studiíMgr.2
26Katedra bezpečnostních studiíPh.D.7
27Katedra bezpečnostních studiíPhDr.2
28Katedra bezpečnostních studiíRNDr.1
29Katedra bezpečnostních studiídoc.4
85Katedra politologie a humanitních studiíM.A.1
86Katedra politologie a humanitních studiíMgr.6
87Katedra politologie a humanitních studiíPh.D.10
88Katedra politologie a humanitních studiíPhDr.7
89Katedra politologie a humanitních studiíRNDr.1
90Katedra politologie a humanitních studiídoc.3
91Katedra politologie a humanitních studiíprof.2
92Katedra právních disciplín a veřejné správyCSc.4
93Katedra právních disciplín a veřejné správyCSc. Dr. hab.1
94Katedra právních disciplín a veřejné správyIng.5
95Katedra právních disciplín a veřejné správyJUDr.19
96Katedra právních disciplín a veřejné správyMgr.7
97Katedra právních disciplín a veřejné správyPaedDr.1
98Katedra právních disciplín a veřejné správyPh.D.14
99Katedra právních disciplín a veřejné správyPhDr.4
100Katedra právních disciplín a veřejné správydoc.4
101Katedra právních disciplín a veřejné správyprof.2
102Katedra průmyslového vlastnictvíCSc.3
103Katedra průmyslového vlastnictvíDBA1
104Katedra průmyslového vlastnictvíDrSc.1
105Katedra průmyslového vlastnictvíIng.5
106Katedra průmyslového vlastnictvíJUDr.10
107Katedra průmyslového vlastnictvíLL.M.2
108Katedra průmyslového vlastnictvíMBA1
109Katedra průmyslového vlastnictvíMEPP1
110Katedra průmyslového vlastnictvíMgr.4
111Katedra průmyslového vlastnictvíPh.D.9
112Katedra průmyslového vlastnictvídoc.2
113Katedra průmyslového vlastnictvíprof.5
114Katedra průmyslového vlastnictvíprom. práv.1

115 rows × 3 columns

sns.catplot(data=a, y="faculty", x="count", hue="titles", aspect=2, height=7)
<seaborn.axisgrid.FacetGrid at 0x113fd3128>
# nieco ako heatmap, nepodarilo sa mi to napasovat.. bohuzial.
a = acad.copy()
a = acad.replace(np.nan, 0)
a = a.groupby(["faculty"])
display(a.agg("sum"))
display(type(acad.titles[0]))
B.A.BACSc.CSc. Dr. hab.DELTADSc.Dr.Ing.JUDr.LL.M.Mgr.PaedDr.PaedDr. Hana HorákováPh.D.Ph.D. – vedoucí katedryPhDr.RNDr.doc.prof.prom. práv.
faculty
Katedra International Relations and European Studies0.00.00.00.00.00.00.02.00.00.03.00.00.07.00.00.00.01.00.00.0
Katedra anglofonních studií1.01.02.00.01.00.00.00.00.00.07.00.00.07.00.04.00.01.03.00.0
Katedra asijských studií0.00.00.00.00.00.00.00.00.00.02.00.00.04.00.02.00.01.00.00.0
Katedra bezpečnostních studií0.00.00.00.00.00.01.05.00.00.02.00.00.07.00.02.01.04.01.00.0
Katedra cizích jazyků2.00.00.00.01.00.00.01.00.00.014.01.00.03.00.02.00.02.00.00.0
Katedra mediálních studií0.00.01.00.00.00.00.00.00.00.08.00.00.08.01.08.00.01.02.00.0
Katedra mezinárodních vztahů a evropských studií0.00.00.00.00.00.00.01.00.00.05.01.01.014.00.07.00.03.02.00.0
Katedra mezinárodního obchodu1.00.04.00.00.00.00.014.00.00.00.00.00.011.00.01.01.04.01.00.0
Katedra politologie a humanitních studií0.00.01.00.00.01.00.00.00.00.01.00.00.06.00.05.01.01.02.00.0
Katedra právních disciplín a veřejné správy0.00.03.01.00.00.00.01.013.00.01.01.00.08.00.02.00.04.02.00.0
Katedra průmyslového vlastnictví0.00.03.00.00.00.00.02.05.01.01.00.00.04.00.00.00.01.03.01.0

11 rows × 26 columns

str
# Nepodarilo sa obhajit pracu tymto chudakom:
undefended = df[df.convinced == False]
display("number of undefended:", undefended.author.count())
display(undefended)
'number of undefended:'



296
authorfacultyidlangleadername_czkname_engoponentpagesplacethesisyearconvinced
66Pittr PavelKatedra právních disciplín a veřejné správy130516czeHlaváček PavelArabsko-izraelský problém a možná řešeníArab-Israeli problem and possible solutions – …Rosůlek Přemysl91.0Plzeň,Diplomová práce (Mgr.)2012False
132Škarda VáclavKatedra mezinárodních vztahů a evropských studií170504czeProkop MiroslavCesta ke vzniku Organizace spojených národůBasis of the establishment of the United Natio…NaN73.0Praha,Bakalářská práce (Bc.)2012False
135Bublikov VjačeslavKatedra mezinárodních vztahů a evropských studií130309czeVeber VáclavCo je strategie Evropa 2010?What is strategy Europe 2010? – NEOBHÁJENÁ PRÁCEAbrhám Josef53.0Hradec Králové,Bakalářská práce (Bc.)2012False
189Kuchynka MironKatedra mezinárodních vztahů a evropských studií140228czeGullová SoňaČeští podnikatelé a jimi nejčastěji používané …Czech Businessmen and Their most Used Business…Postler Milan57.0PrahaBakalářská práce (Bc.)2012False
190Kuchynka MironKatedra mezinárodních vztahů a evropských studií170505czeGullová SoňaČeští podnikatelé a jimi nejčastěji používané …Czech Businessmen and Their most Used Business…Postler Milan49.0PrahaBakalářská práce (Bc.)2012False
218Koubová Jaroslava DominikaKatedra právních disciplín a veřejné správy141212czeOdehnalová JanaDěti a dodržování dětských práv v ústavech pro…Children and the observance of children´s righ…Vostrá Zuzana54.0PlzeňBakalářská práce (Bc.)2012False
224Herbrecherová JindraKatedra právních disciplín a veřejné správy141212czeOutlá AnnaDiskriminace na základě pohlaví – NEOBHÁJENÁ P…Discrimination based on sexMalast Jan44.0PlzeňBakalářská práce (Bc.)2012False
225Pacovská MarkétaKatedra právních disciplín a veřejné správy150112czeOutlá AnnaDiskriminace na základě pohlaví – NEOBHÁJENÁ P…Discrimination based on sexJurek Petr51.0PlzeňBakalářská práce (Bc.)2012False
277Šobrová MichaelaKatedra mezinárodních vztahů a evropských studií170510czeAbrhám JosefEkonomiky vybraných zemíEconomically choosen EU countries – NEOBHÁJENÁ…NaN67.0PrahaBakalářská práce (Bc.)2012False
322Fencl LadislavKatedra mezinárodních vztahů a evropských studií140617czeOrt PetrEvropská bezpečnost ve 20. století – NEOBHÁJEN…European security in the 20th centuryRouč Vít107.0PlzeňDiplomová práce (Mgr.)2012False
348Tříska PavelKatedra mezinárodních vztahů a evropských studií150317czeKubata MartinEvropský Parlament a Evropská komise před a po…The European Parliament and the European Commi…Jurek Petr80.0PlzeňDiplomová práce (Mgr.)2012False
424Šnajberková BarboraKatedra mezinárodních vztahů a evropských studií140613czeBouchal MartinHamás a operace “Cast Lead” – NEOBHÁJENÁ PRÁHamas and operation “Cast Lead”Raděj Tomáš50.0PrahaBakalářská práce (Bc.)2012False
437Pelantová LjubaKatedra právních disciplín a veřejné správy141212czeCabada LadislavHistorie a budoucnost využívání GIS krajskými …The History and the future of using the GIS by…Malast Jan38.0PlzeňBakalářská práce (Bc.)2012False
460Slezáková TerezaKatedra mezinárodních vztahů a evropských studií130514czeAbrhám JosefHospodářská a měnová unieEconomic and monetary union – NEOBHÁJENÁ PRÁCENaN77.0Praha,Diplomová práce (Mgr.)2012False
480Čelovský JakubKatedra právních disciplín a veřejné správy141212czeChmelík JanCharakteristika násilných trestných činů – NEO…Characteristics of violent crimesOdehnalová Jana52.0PlzeňBakalářská práce (Bc.)2012False
514Špererová MichaelaKatedra mezinárodních vztahů a evropských studií140602czeAnděl PetrIslamistické tendence v JordánsIslamic tendencies in Jordan – NEOBHÁJENÁ PRÁCEBouchal Martin84.0PlzeňBakalářská práce (Bc.)2012False
543Šustr JanKatedra právních disciplín a veřejné správy131029czeNovotný VladimírKatastr nemovitostí a hlavní zásady vedení vla…Land registry and main principles of managemen…Křepelka Jiří44.0Praha,Bakalářská práce (Bc.)2012False
549Šabouk ŠtěpánKatedra politologie a humanitních studií140618czeRataj JanKlement Gottwald heroizace a diabolizace zbave…[rukopis] = Klement Gottwald disposed of heroi…Houda Přemysl45.0PrahaBakalářská práce (Bc.)2012False
569Petržíková JaroslavaKatedra mezinárodních vztahů a evropských studií140808czeRouč VítKomparace východního a západního odboje za II….Comparation of west and east resistance during…Koníček Zdeněk75.0PlzeňDiplomová práce (Mgr.)2012False
585Marchenko AnastasiaKatedra mezinárodních vztahů a evropských studií170504czeKlepárník VítKonflikt v Libyi 2011 a jeho předpokladyConflict in Libya 2011 and it’s preconditions …NaN48.0Praha,Bakalářská práce (Bc.)2012False
657Bouška PetrKatedra mezinárodních vztahů a evropských studií130309czeJungbauer RadomírMateriální prameny vzniku OSNMaterial sources of the UN – NEOBHÁJENÁ PRÁCETrávníčková Zuzana51.0Hradec Králové,Bakalářská práce (Bc.)2012False
677Havránek RichardKatedra mezinárodních vztahů a evropských studií131021czeKlepárník VítMezinárodní a národní instituce v boji proti t…International and national institutions in fig…Raděj Tomáš56.0Praha,Bakalářská práce (Bc.)2012False
680Zachař LuděkKatedra mezinárodních vztahů a evropských studií140617czeDruláková RadkaMezinárodní aspekty legální a nelegální migrac…International aspects of legal and illegal mig…Zemanová Štěpánka84.0PrahaDiplomová práce (Mgr.)2012False
755Úradníčková VeronikaKatedra mezinárodních vztahů a evropských studií170510sloHeřmanová EvaNajvýznamnejšie kultúrne aspekty Ruska vo sveteMost important cultural aspects of Russia in t…NaN95.0Praha,Diplomová práce (Mgr.)2012False
761Dietze AlbertKatedra mezinárodních vztahů a evropských studií150109czeKlepárník VítNárodní a mezinárodní instituce v boji proti t…National and international institutions in fig…Chalániová Daniela55.0PrahaBakalářská práce (Bc.)2012False
810Houdek RobertKatedra mezinárodních vztahů a evropských studií140617czeCabada LadislavNová specifika komunální politiky v Plzeňském …New specifics of local politics in the region …Bauerová Helena73.0PlzeňDiplomová práce (Mgr.)2012False
820Škvárová JolanaKatedra právních disciplín a veřejné správy170509czeSpurný RadekObecně k výkonu rozhodnuIn general for enforcement the decision – NEOB…NaN65.0PlzeňBakalářská práce (Bc.)2012False
823Gálová DanaKatedra právních disciplín a veřejné správy141212czeOdehnalová JanaObchod s lidmi – NEOBHÁJENÁ PRÁCEDana Gálová ; vedoucí práce Helena Hricová ; o…Vostrá Zuzana49.0Plzeň,Bakalářská práce (Bc.)2012False
829Veklich RuslanKatedra mezinárodních vztahů a evropských studií140711czeGullová SoňaObchodní politika Ruska – NEOBHÁJENÁ PRÁCERussian trade policyFireš Adam53.0PrahaBakalářská práce (Bc.)2012False
873Žáček JaroslavKatedra mezinárodních vztahů a evropských studií170505czeŠtalmach PavelOptimalizace systému řízení bezpečnosti České …Optimalization of the security management syst…NaN70.0PrahaDiplomová práce (Mgr.)2012False
6892Yadryshnikova DianaKatedra mezinárodního obchodu170728engFialová HelenaVládní deficit a dluh Řecka v období 2010-2015…Government Deficit and debt of Greece in 2010-…Fiala Jan60.0PrahaBakalářská práce (Bc.)2016False
6917Sklenářová NikolaKatedra International Relations and European S…170905engKolmhofer MartinJak kulturní normy ovlivňují ekonomickou organ…How cultural norms influence economic organiza…Březinová Kateřina52.0PrahaBakalářská práce (Bc.)2016False
6944Bostl FrantišekKatedra mezinárodních vztahů a evropských studií170308czeČermáková DanielaIntegrace jednotného trhu finančních nástrojů …Integration of single market for financial ins…Veselá Jitka75.0PrahaDiplomová práce (Mgr.)2016False
6960Habartová AdélaKatedra mezinárodních vztahů a evropských studií170727czeBouchal MartinIrák po roce 2003Iraq after 2003 – NEOBHÁJENÁ PRÁCEBudil Ivo T.48.0PrahaBakalářská práce (Bc.)2016False
6973Bačík JúliusKatedra mezinárodních vztahů a evropských studií170308czeBouchal MartinIslámský stát v Iráku a LevantěIslamic state in Iraq and the Levant – NEOBHÁJ…Breská Jana66.0PrahaDiplomová práce (Mgr.)2016False
6985Svoboda RadekKatedra mezinárodních vztahů a evropských studií170727czeNovotný DanielIzraelsko-palestinský konflikt a role EU/ČR – …Radek Svoboda ; vedoucí práce Daniel Novotný ;…Lippert Miloš53.0PrahaBakalářská práce (Bc.)2016False
6991Mezníková PetraKatedra mediálních studií170905czeVybíral PetrJak s námi komunikuje Jan Kraus. Čeština v tal…How to communicate with us Jan Kraus. Czech la…Niklesová Eva47.0PrahaBakalářská práce (Bc.)2016False
7030Byrtusová DanielaKatedra mezinárodních vztahů a evropských studií171016czeKlíma PavelKomparace integrovaných operačních středisek Č…Comparation of the operational centers of the …Abrhám Josef78.0PrahaDiplomová práce (Mgr.)2016False
7047Zavadilová DanielaKatedra politologie a humanitních studií171027czeBureš JanKomparace vývoje parlamentní kultury po roce 1…Comparison of development of parliamentary cul…Charvát Jakub83.0PrahaDiplomová práce (Mgr.)2016False
7178Krasnova DarinaKatedra mezinárodních vztahů a evropských studií180411czeNovotný DanielMezinárodní vztahy a bezpečnost v oblasti Asie…Darina Krasnova ; vedoucí práce Daniel Novotný…Lippert Miloš75.0PrahaDiplomová práce (Mgr.)2016False
7195Čamov RaymondKatedra průmyslového vlastnictví180716czePospíšil MichalMimosoudní a soudní ochrana práv majitele ochr…Extrajudical and judical protection of the rig…Horáček Roman196.0PrahaRigorózní práce (PhDr.)2016False
7204Jeřábková MiroslavaKatedra mediálních studií180317czeLupač PetrMóda a InternetFashion and Internet – NEOBHÁJENÁ PRÁCEFišerová Michaela50.0PrahaBakalářská práce (Bc.)2016False
7295Tuma VáclavKatedra asijských studií170310czeVostrá DenisaOdkaz mezinárodních událostí v soudobém japons…Reference of International events in contempor…Kolmaš Michal63.0PrahaDiplomová práce (Mgr.)2016False
7334Špitálský JaroslavKatedra mezinárodních vztahů a evropských studií180604czeFireš AdamPerspektivy energetické soběstačnosti a bezpeč…Perspectives of energy self-sufficiency and se…Tichý Lukáš108.0LiberecDiplomová práce (Mgr.)2016False
7354Fuksová MartaKatedra mediálních studií171115czeFišerová MichaelaPolitická rétorika a americká rasistická propa…Political rhetorics and American racist propag…Švantner Martin63.0PrahaDiplomová práce (Mgr.)2016False
7358Hojer MartinKatedra politologie a humanitních studií171027czeCabada LadislavPolitický marketing a jeho využití ve volebníc…Political marketing and its use in electoral c…Charvát Jakub75.0PrahaDiplomová práce (Mgr.)2016False
7381Shtjefni OrtensaKatedra International Relations and European S…170301engErkomaishvili DavidTransformace po studené válce: případová studi…Post-Cold War transitions: the case study of A…Power Gerald70.0PrahaBakalářská práce (Bc.)2016False
7518Kaydashov MaximKatedra mezinárodních vztahů a evropských studií170222czeStřítecký VítPrvní a druhá čečenská válkaFirst and Second Chechen War – NEOBHÁJENÁ PRÁCEFireš Adam42.0PrahaBakalářská práce (Bc.)2016False
7553Salaba PetrKatedra mezinárodních vztahů a evropských studií170222czeKubata MartinRada Evropské unie – vznik, vývoj, současnostCouncil of the European Union – origin, develo…Bauerová Helena62.0PrahaBakalářská práce (Bc.)2016False
7558Dunka LubomírKatedra mezinárodních vztahů a evropských studií180604czeBudil Ivo T.Rasová ideologie a moderní světRacial ideology and modern world – NEOBHÁJENÁ …Rataj Jan65.0LiberecDiplomová práce (Mgr.)2016False
7598Sitdikov DinarKatedra International Relations and European S…171115engBraun MatsDinar Sitdikov ; vedoucí práce Mats Rickard Br…The Role of the European Union in global polit…Kovář Jan61.0PrahaDiplomová práce (Mgr.)2016False
7648Nedorostová MilenaKatedra International Relations and European S…170301czeBraun MatsSmall states in the EU and intelligent agenciesMalé státy v EU a zpravodajské služby – NEOBHÁ…Kolmašová Šárka47.0PrahaBakalářská práce (Bc.)2016False
7651Tománková AlexandraKatedra právních disciplín a veřejné správy170222czeKlíma PavelSměrnice Evropské unie a jejich implementace d…Directives of European Union and its implement…Odehnalová Jana52.0PrahaBakalářská práce (Bc.)2016False
7667Drtil MarekKatedra mezinárodních vztahů a evropských studií171016czeBudil Ivo T.Současná kritika multikulturalismuContemporary critique of multiculturalism – NE…Kolinská Klára88.0PrahaDiplomová práce (Mgr.)2016False
7684Perepelkina AlisaKatedra mezinárodních vztahů a evropských studií180308czeBureš JanSovětizace střední a východní evropy po roce 1945Sovietization of Central and Eastern Europe af…Valeš Lukáš58.0PrahaBakalářská práce (Bc.)2016False
7789Lukyová NathalieKatedra International Relations and European S…170301engÖzel Volfová GabrielaTurecko-EU vztahy a vyhlídky na vstup Turecka …Turkey-EU Relations and the Prospects for Turk…Tureček Břetislav71.0PrahaBakalářská práce (Bc.)2016False
7878Kovalaková LucieKatedra mezinárodních vztahů a evropských studií171016czeBudil Ivo T.Vývoj islámského světa v kontextu vztahů se zá…Evolution of the Islamic world in the context …Bouchal Martin74.0PrahaDiplomová práce (Mgr.)2016False
7913Červenková VendulaKatedra mezinárodních vztahů a evropských studií170308czeNovotný LukášVztah Švýcarska a Evropské UnieRelationship between Switzerland and the Europ…Anděl Petr81.0PrahaDiplomová práce (Mgr.)2016False
8465Šídlová MichaelaKatedra mediálních studií180523czeVojtěchovský MiroslavObraz literárního humoru – Divadlo Járy CimrmanaImage of the Literary Humor – Jára Cimrman´s T…Köpplová Barbara93.0PrahaDiplomová práce (Mgr.)2017False
8642Hercjuk TomášKatedra průmyslového vlastnictví171030czePítra VladimírPřímé a nepřímé využívání vynálezuDirect and indirect patent use – NEOBHÁJENÁ PRÁCEŠpindler Karel60.0PrahaDiplomová práce (Mgr.)2017False

296 rows × 13 columns

Leave a Reply

Your email address will not be published. Required fields are marked *