%matplotlib inline

import pandas as pd
import matplotlib.pyplot as plt
import numpy as py
#import scipy

# Make the graphs a bit prettier, and bigger
#pd.set_option('display.mpl_style', 'default')
#plt.rcParams['figure.figsize'] = (15, 5)


# This is necessary to show lots of columns in pandas 0.12. 
# Not necessary in pandas 0.13.
pd.set_option('display.width', 5000) 
pd.set_option('display.max_columns', 60)

"""
Explanation: Alpsko smučanje
Priprava podatkov
End of explanation
"""


pot="csv-datoteke/smucarji.csv"
smucarji = pd.read_csv(pot, index_col='id')

"""
Explanation: Najprej sem spletne strani FIS pobrala podatke o smučarjih in njihovih id številkah na spletišču FIS. Id-je sem potrebovala za sestavljanje url naslovov posameznih športnikov. Zbrane podatke sem nato spravila v datoteko smucarji.csv.
End of explanation
"""


smucarji[:10]

"""
Explanation: Tabela izgleda tako:
End of explanation
"""


pot_brem = "csv-datoteke/BREM  Eva-Maria.csv"
brem = pd.read_csv(pot_brem, parse_dates=['datum'])

"""
Explanation: Nato sem za vsakega od tekmovalcev s strani z njegovimi rezultati (npr. Eva-Maria Brem) pobrala podatke o vsaki tekmi: datum, prizorišče, disciplino, uvrstitev, zaostanek.
End of explanation
"""


brem[:10]

"""
Explanation: Tabela za Evo-Mario Brem:
End of explanation
"""


pot1 ="csv-datoteke/vse.csv"
vse = pd.read_csv(pot1, parse_dates=['datum'])

"""
Explanation: Žal si z datumi ne bomo mogli pomagati, saj so na spletni strani z rezultati zapisani v različnih formatih. Kot primer si lahko ogledamo prvo in drugo vrstico zgornje tabele. Iz prve vrstice lahko sklepamo, da je zapis v obliki YYYY-MM-DD, kar pa bi pomenilo, da je bila tekma v drugi vrstici izvedena 3. julija 2016, kar pa iz očitnih razlogov ni res. Tega žal ne morem popraviti.
Da lahko primerjam tudi tekmovalce med seboj, sem naredila še csv datoteko 'vse.csv', v kateri zapišem vse podatke kot zgoraj in id tekmovalca:
End of explanation
"""


vse[197:203]

"""
Explanation: Tabela izgleda tako:
End of explanation
"""


def pretvori(bes):
    if bes in ['DNQ1', 'DNF1', 'DSQ2', 'DNS1','DNF2','DSQ1','DNS2','DNQ2','DNF','DNC1','DSQ','DNS']:
        return 0
    else:
        return int(bes)

"""
Explanation: V kasnejši analizi se pojavi težava, da so podatki o uvrstitvi lahko številke ali besedilo (npr. DNQ1, DNF1, DSQ2 in DNS1), ki označuje odstope, diskvalifikacije in podobne anomalije.
Zato tabelam dodamo nov stolpec mesto1, kjer besedilne podatke identificiramo z 0. Tu nas ne zanima, zakaj tekmovalec ni osvojil točk.
End of explanation
"""


tocke=[0,100,80,60,50,45,40,36,32,29,26,24,22,20,18,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]

def pretvori_2(bes):
    if bes in ["DNQ1", "DNF1", "DSQ2", "DNS1", "DNF2"]:
        return 0
    else:
        if int(bes) > 30:
            return 0
        else:
            return tocke[int(bes)];        

"""
Explanation: Če bomo želeli delati analizo skupnega seštevka, moramo pretvoriti mesto tudi v točke. Definiramo seznam 'tocke', v katerega na i-to mesto (i teče od 0 do 30) zapišemo, koliko točk tekmovalec dobi za osvojeno i-to mesto. Nato napišemo še funkcijo, ki nam pretvori mesto v osvojene točke.
End of explanation
"""


vse['mesto1'] = vse['mesto'].map(pretvori)
brem['mesto1'] = brem['mesto'].map(pretvori)
vse['tocke'] = vse['mesto1'].map(pretvori_2)
brem['tocke'] = brem['mesto1'].map(pretvori_2)
brem[:5]

"""
Explanation: Tabelam zdaj dodamo stolpce:
End of explanation
"""


vse[2024:2028]

"""
Explanation: Zgornja tabela prikazuje predelano tabelo za Evo-Mario Brem. Enako smo naredili s tabelo z vsemi podatki:
End of explanation
"""


brem['disciplina'].value_counts()

"""
Explanation: Analiza
Analiza dosežkov Eve-Marie Brem
Pa si poglejmo, v katerih disciplinah najpogosteje tekmuje Eva-Maria Brem:
End of explanation
"""


brem['disciplina'].value_counts().plot(kind='pie', figsize=(6,6))

"""
Explanation: Eva-Maria Brem je torej najpogosteje tekmuje v slalomu in veleslalomu. Ponazorimo to še z grafom:
End of explanation
"""


slalom = brem['disciplina'] == 'Slalom'
brem[slalom][:10]

veleslalom = brem['disciplina'] == 'Giant Slalom'
brem[veleslalom][:10]

"""
Explanation: Čeprav najpogosteje tekmuje v slalomu in veleslalomu, pa to nista nujno disciplini, v katerih dosega najboljše rezultate. Najprej si poglejmo, kakšni so njeni rezultati v slalomu in nato še veleslalomu:
End of explanation
"""


brem[slalom]['mesto1'].value_counts().plot(kind='bar', title="Rezultati E. M. Brem v slalomu")

brem[veleslalom]['mesto1'].value_counts().plot(kind='bar', title='Rezultati E. M. Brem v veleslalomu')

"""
Explanation: Iz tabel je razvidno, da so njeni razultati v slalomu v vačini na repu trideseterice, med tem ko se v veleslalomu uvršča med 5 najboljših. To se še lepše vidi z grafov:
End of explanation
"""


brem.groupby(['disciplina'])['tocke'].sum() / brem['tocke'].sum()

"""
Explanation: Poglejmo še koliko točk je v povprečju osvojila pri posamezni disciplini, da določimo njeno "paradno disciplino".
End of explanation
"""


prvi_del = brem[brem['datum'].dt.year == 2016]
drugi_del = brem[(brem['datum'].dt.month > 9) & (brem['datum'].dt.year == 2015)]
tabela = prvi_del.append(drugi_del)
tabela

"""
Explanation: Veleslalom je torej precej očitno disciplina, ki ji prinaša največ točk.
Poglejmo si še podatke za letošnjo sezono. Prva tekma je bila 24. 10. 2015 v Soeldnu.
End of explanation
"""


tabela['mesto1'].value_counts().plot(kind='pie')

"""
Explanation: Ker si z datumi ne moremo pomagati, glejmo le dosežena mesta:
End of explanation
"""


tabela[tabela['disciplina'] == 'Giant Slalom']['mesto1'].value_counts().plot(kind='pie')

"""
Explanation: Podoben graf si poglejmo posebej še za veleslalom:
End of explanation
"""


po_krajih = brem.groupby(['kraj'])['tocke'].sum() / brem['tocke'].sum()
po_krajih.nlargest(7)

"""
Explanation: Opazimo, da ena uvrstitev odstopa: to je njena prva uvrstitev v sezoni: "le" 8. mesto v Soeldnu 24. 10. 2015.
Poglejmo si še analizo po prizoriščih. Postavimo si vprašanje, kje dosega boljše rezultate.
End of explanation
"""


po_krajih1 = brem.groupby(['kraj'])['tocke'].mean()
po_krajih1.nlargest(7)

"""
Explanation: V Are-ju je osvojila kar 20 % vseh svojih točk. Ali tam dosega tudi najvišja mesta?
End of explanation
"""


brem.groupby(['kraj']).size().sort_values(ascending = False)

"""
Explanation: Najvišja mesta očitno dosega v Meribelu. Da rezultate še bolje razložimo, poglejmo, koliko tekem se je Eva-Maria Brem udeležila v posameznem kraju.
End of explanation
"""


sezona = vse[vse['datum'].dt.year == 2016]
drugi_del_vse = vse[(vse['datum'].dt.month > 9) & (vse['datum'].dt.year == 2015)]
sezona.append(drugi_del)[40:46]

"""
Explanation: V Are-ju se E. M. Brem je udeležila daleč največ tekem, zato ni čudno, da je tam osvojila največ točk. Prav tako ne moremo trditi, da je Meribel njeno "najboljše" prizorišče, saj je tam tekmovala na le eni tekmi.
Analiza več tekmovalcev
V tem razdelku bomo imeli nekaj težav, saj na strani, iz katere pobiramo podatke, ni zapisa o spolu tekmovalca.
Najprej pa poglejmo rezultate za sezono 2015/16.
End of explanation
"""


sezona.groupby(['id']).size()[:10]

sezona.groupby(['id']).size().max()

"""
Explanation: Zanima nas, koliko nastopov so zbrali tekmovalci v letošnji sezoni. Prikazujemo število nastopov za 10 tekmovalcev.
End of explanation
"""


nova = sezona.groupby(['id']).size()
nova.nlargest(6)

"""
Explanation: Tekmovalec ali tekmovalka z največ nastopi je nastopila 21-krat. Kdo pa je to?
End of explanation
"""


print(smucarji.get_value(index = 125871, col = 'ime'), ", ", smucarji.get_value(index = 127048, col = 'ime'))

"""
Explanation: To sta torej dva tekmovalca in sicer z id številkama 125871 in 127048 - Lara Gut in Alexis Pinturault.
End of explanation
"""


sezona.groupby(['id']).agg({'tocke':sum}).nlargest(columns = 'tocke', n = 10)

"""
Explanation: Kdo pa je osvojil največ točk? Poglejmo 10 najboljših:
End of explanation
"""


naj = [106332,127048,154950,125871,104502,27657,30368,107164,109079,137380]
for i in naj:
    print(i,': ', smucarji.get_value(index = i, col = 'ime'))

"""
Explanation: Še njihova imena:
End of explanation
"""


smucarji['drzava'].value_counts().head(10)

smucarji['drzava'].value_counts().plot(kind='bar', figsize = (12,6))

"""
Explanation: Analiza narodnosti
Zanima nas, koliko je smučarjev določene narodnosti. Najprej jih preštejmo, nato pa ponazorimo to z grafom:
End of explanation
"""


smucarji['smuci'].value_counts()

smucarji['smuci'].value_counts().plot(kind='pie', figsize=(6,6))

"""
Explanation: Analiza smuči
Najprej si oglejmo, katere znamke smuči so najpogostejše v svetovnem pokalu:
End of explanation
"""


smucarji[smucarji['smuci'] == "Head"]['drzava'].value_counts().plot(kind='bar')

"""
Explanation: Poglejmo, predstavniki katerih držav uporabljajo smuči Head (in koliko jih je):
To do: naredi graf, ki bo prikazal to za vse smuči.
End of explanation
"""


smucarji[smucarji['drzava'] == "AUT"]['smuci'].value_counts().plot(kind='bar')

"""
Explanation: Podobno si lahko pogledamo, katerim proizvajalcem smuči najbolj zaupajo smučarji iz avstrije:
End of explanation
"""


oboje = smucarji.groupby(['smuci','drzava']).size()
priprava = oboje.unstack().plot(kind='barh', stacked=True, figsize=(20, 14), fontsize=12)
priprava.legend(loc=(0.02,1), ncol=6)

"""
Explanation: Z analizo enega samega proizvajalca oz. ene same države ne dobimo širše slike, zato si oglejmo graf, ki za vsako državo prikaže, smuči katerega proizvajalca uporabljajo njeni reprezentanti.
End of explanation
"""


