In [18]:
import pandas as pd, numpy as np, matplotlib.pyplot as plt
%matplotlib inline
In [202]:
#tantargycsoport szotar
cc={
    'magyar':'nyelvek',\
    u'német':'nyelvek',\
    u'román':'nyelvek',\
    u'angol':'nyelvek',\
    u'francia':'nyelvek',\
    'matematika':u'matek-info',\
    'informatika':u'matek-info',\
    'fizika':u'természettudományok',\
    u'kémia':u'természettudományok',\
    u'földrajz':u'természettudományok',\
    u'biológia':u'természettudományok',\
    u'csillagászat':u'természettudományok',\
    u'történelem':u'társadalomtudományok',\
    u'történelem ':u'társadalomtudományok',\
    u'róm. Kat vallás':u'társadalomtudományok',\
    u'szociológia':u'társadalomtudományok',\
    u'közgazdaság':u'társadalomtudományok',\
    u'filozófia':u'társadalomtudományok',\
    u'rajz':u'művészetek',\
    u'zene':u'művészetek',\
    u'vállalkozás':u'társadalomtudományok',\
    u'logika':u'társadalomtudományok',\
    u'pszichológia':u'társadalomtudományok',\
    u'lélektan':u'társadalomtudományok',\
    }

Versenyek

In [203]:
data={}
for i in pd.read_excel('eredmenyek.xlsx').fillna(0).T.iteritems():
    
    #tantargycsoport check
    if i[1][3] not in cc: print i[1][3]
    
    #evszam
    if i[1][0] not in data: data[i[1][0]]={}
    #evfolyam
    if i[1][2][:str.find(str(i[1][2]),'.')] not in data[i[1][0]]:data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]]={}
    #osztaly
    if i[1][2][str.find(str(i[1][2]),'.')+1:] not in data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]]:
        data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]][i[1][2][str.find(str(i[1][2]),'.')+1:]]={}
    #tantargycsoport
    if cc[i[1][3]] not in data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]][i[1][2][str.find(str(i[1][2]),'.')+1:]]:
        data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]][i[1][2][str.find(str(i[1][2]),'.')+1:]][cc[i[1][3]]]=[]
    
    data2={}
    data2['nev']=i[1][1]
    data2['tantargy']=i[1][3]
    data2['szint']=i[1][4]
    data2['hely']=i[1][5]
    data2['megjegyzes']=i[1][6]
    
    data[i[1][0]][i[1][2][:str.find(str(i[1][2]),'.')]][i[1][2][str.find(str(i[1][2]),'.')+1:]][cc[i[1][3]]].append(data2)
In [204]:
#adatok mentese
import json
file('data.json','w').write(json.dumps(data))

Osztalyzatok

Adattisztogatas - nincs szukseg OCR-ra

In [252]:
data2={}
import re
printer=False
#adatok beolvasas, online excel fajlok helye: http://blog.csaladen.es/marci/
#ezek mar uto-formazottak, eredetiek hely http://mag.ro/file.php?Zj0zMDc=
for y in range(2002,2011):
    if y not in {2005}:
        year=repr(y)
        df=pd.read_excel(year+'.xlsx')
        data2[year]={}
        for i in df.index[:]:
            #ha nem ures sor
            if df.loc[i].dropna().count()>0:
                if df.loc[i].dropna()[0].__class__ != int:
                    if u'OSZTÁLY:' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][8:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2]
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2]
                        if printer: print y,ev,osztaly,0
                    if u'oszTáLy:' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][8:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2].capitalize()
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2].capitalize()
                        if printer: print y,ev,osztaly,1
                    if u'OSZTÁLY ' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][0:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2]
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2]
                        if printer: print y,ev,osztaly,2
                    if u'OSZTÁLY' not in df.loc[i].dropna()[0]: 
                        if u'OSYTÁLY' not in df.loc[i].dropna()[0]: 
                            if u'oszTáLy' not in df.loc[i].dropna()[0]: 
                                if ev not in data2[year]:data2[year][ev]={}
                                if osztaly not in data2[year][ev]:data2[year][ev][osztaly]=[[],[],[]]

                                #oszlop szerinti olvasas nev/media/helyseg
                                if df.loc[i].dropna().count()==3:
                                    data2[year][ev][osztaly][0].append(df.loc[i].dropna()[0].strip())
                                    data2[year][ev][osztaly][1].append(df.loc[i].dropna()[1])
                                    data2[year][ev][osztaly][2].append(df.loc[i].dropna()[2].strip())

                                #korrekcio ha a fenti befuccsol
                                elif df.loc[i].dropna().count()==1:
                                    #ha legalabb egy szam
                                    if re.search("\d", df.loc[i].dropna()[0]):
                                        a=re.search("\d", df.loc[i].dropna()[0]).start()
                                        data2[year][ev][osztaly][0].append(df.loc[i].dropna()[0][:a].strip())
                                        data2[year][ev][osztaly][1].append(df.loc[i].dropna()[0][a:].replace(" ", "")[:4])
                                        data2[year][ev][osztaly][2].append(df.loc[i].dropna()[0][a:].replace(" ", "")[4:].strip())
                                        
                                elif df.loc[i].dropna().count()==2:
                                    try:
                                        b=df.loc[i].dropna()[0]+df.loc[i].dropna()[1]
                                        if re.search("\d", b):
                                            a=re.search("\d", b).start()
                                            data2[year][ev][osztaly][0].append(b[:a].strip())
                                            data2[year][ev][osztaly][1].append(b[a:].replace(" ", "")[:4])
                                            data2[year][ev][osztaly][2].append(b[a:].replace(" ", "")[4:].strip())
                                        
                                    except:
                                        print 'error', df.loc[i].dropna()[0]
                                        raise SyntaxError

OCR - karaterfelismeres

In [253]:
printer=False
#adatok evkonyvekbol, fenykepek->pdf->OCR->excel
for y in range(2011,2015):
        year=repr(y)
        df=pd.read_excel(year+'.xlsx')
        data2[year]={}
        for i in df.index[:]:
            #ha nem ures sor
            if df.loc[i].dropna().count()>0:
                if df.loc[i].dropna()[0].__class__ != int:
                    if u'OSZTÁLY:' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][8:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2]
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2]
                        if printer: print y,ev,osztaly,0
                    if u'oszTáLy:' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][8:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2].capitalize()
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2].capitalize()
                        if printer: print y,ev,osztaly,1
                    if u'OSZTÁLY ' in df.loc[i].dropna()[0]: 
                        a=df.loc[i].dropna()[0][0:].replace(" ", "")
                        try: ev=a[:str.find(str(a[:4]),'.')]
                        except: ev=a[:str.find(str(a[:3]),'.')]
                        try: osztaly=a[str.find(str(a[:4]),'.')+1:str.find(str(a[:4]),'.')+2]
                        except: osztaly=a[str.find(str(a[:3]),'.')+1:str.find(str(a[:3]),'.')+2]
                        if printer: print y,ev,osztaly,2
                    if u'OSZTÁLY' not in df.loc[i].dropna()[0]: 
                        if u'OSYTÁLY' not in df.loc[i].dropna()[0]: 
                            if u'oszTáLy' not in df.loc[i].dropna()[0]: 
                                if ev not in data2[year]:data2[year][ev]={}
                                if osztaly not in data2[year][ev]:data2[year][ev][osztaly]=[[],[],[]]

                                #oszlop szerinti olvasas nev/media/helyseg
                                if df.loc[i].dropna().count()==3:
                                    data2[year][ev][osztaly][0].append(df.loc[i].dropna()[0].strip())
                                    data2[year][ev][osztaly][1].append(df.loc[i].dropna()[1])
                                    data2[year][ev][osztaly][2].append(df.loc[i].dropna()[2].strip())

                                #korrekcio ha a fenti befuccsol
                                elif df.loc[i].dropna().count()==1:
                                    #ha legalabb egy szam
                                    if re.search("\d", df.loc[i].dropna()[0]):
                                        a=re.search("\d", df.loc[i].dropna()[0]).start()
                                        data2[year][ev][osztaly][0].append(df.loc[i].dropna()[0][:a].strip())
                                        data2[year][ev][osztaly][1].append(df.loc[i].dropna()[0][a:].replace(" ", "")[:4])
                                        data2[year][ev][osztaly][2].append(df.loc[i].dropna()[0][a:].replace(" ", "")[4:].strip())
                                        
                                elif df.loc[i].dropna().count()==2:
                                    try:
                                        b=df.loc[i].dropna()[0]+df.loc[i].dropna()[1]
                                        if re.search("\d", b):
                                            a=re.search("\d", b).start()
                                            data2[year][ev][osztaly][0].append(b[:a].strip())
                                            data2[year][ev][osztaly][1].append(b[a:].replace(" ", "")[:4])
                                            data2[year][ev][osztaly][2].append(b[a:].replace(" ", "")[4:].strip())
                                        
                                    except:
                                        print 'error', df.loc[i].dropna()[0]
                                        raise SyntaxError
In [254]:
#mediak listava alakitasa, normalizalas
for year in data2:
    for ev in data2[year]:
        for osztaly in data2[year][ev]:
            try: 
                data2[year][ev][osztaly][1]=\
                 list(np.array([i.replace(" ", "").replace(",", "") for i in data2[year][ev][osztaly][1]]).astype(float))
            except:pass
            
            for i in range(len(data2[year][ev][osztaly][1])):
                try:
                    if data2[year][ev][osztaly][1][i].__class__==unicode:
                        if data2[year][ev][osztaly][1][i]==u'ism\xe9tl\xf5':
                            data2[year][ev][osztaly][1][i]=4
                        if data2[year][ev][osztaly][1][i]==u'ism\xe9tl\u0151':
                            data2[year][ev][osztaly][1][i]=4
                        if data2[year][ev][osztaly][1][i]==u'oszt\xe1lyism\xe9tl\u0151':
                            data2[year][ev][osztaly][1][i]=4
                        if data2[year][ev][osztaly][1][i]==u'eltan\xe1csolt':
                            data2[year][ev][osztaly][1][i]=0
                        if data2[year][ev][osztaly][1][i]==u'\xe1t\xedratkozott':
                            data2[year][ev][osztaly][1][i]=0
                        if data2[year][ev][osztaly][1][i]==u'elment':
                            data2[year][ev][osztaly][1][i]=0
                        if data2[year][ev][osztaly][1][i]==u'elment ':
                            data2[year][ev][osztaly][1][i]=0
                        if re.search("\d", data2[year][ev][osztaly][1][i]):
                            data2[year][ev][osztaly][1][i]=int(data2[year][ev][osztaly][1][i].replace(",", "").replace(" ", ""))
                except:pass
                try:
                    if data2[year][ev][osztaly][1][i]>101:
                        data2[year][ev][osztaly][1][i]/=100.0

                    elif data2[year][ev][osztaly][1][i]>11:
                        data2[year][ev][osztaly][1][i]/=10.0
                except:pass   
In [255]:
for y in range(2002,2015):
    if y not in {2005}:
        print y,data2[repr(y)].keys()
2002 [u'IX', u'XI', u'XII', u'X']
2003 [u'IX', u'XI', u'XII', u'X']
2004 [u'IX', u'XI', u'XII', u'X']
2006 [u'IX', u'XI', u'XII', u'X']
2007 [u'IX', u'XI', u'XII', u'X']
2008 [u'IX', u'XI', u'XII', u'X']
2009 [u'IX', u'XI', u'XII', u'X']
2010 [u'IX', u'XI', u'XII', u'X']
2011 [u'IX', u'XI', u'XII', u'X']
2012 [u'IX', u'XI', u'XII', u'X']
2013 [u'IX', u'XI', u'XII', u'X']
2014 [u'IX', u'XI', u'XII', u'X']
In [256]:
for year in data2:
    for ev in data2[year]:
        for osztaly in data2[year][ev]:
            if len(data2[year][ev][osztaly][0])<10:
                #problemasak
                print year,ev,osztaly,len(data2[year][ev][osztaly][0])
In [257]:
year='2009'
ev='IX'
osztaly='A'
print len(data2[year][ev][osztaly][0]),len(data2[year][ev][osztaly][1]),len(data2[year][ev][osztaly][2])
data2[year][ev][osztaly]
29 29 29
Out[257]:
[[u'Andr\xe1s \ufffd\ufffd\u0151ke',
  u'Andr\xe1s Alp\xe1r',
  u'Antal Zsolt R\xf3bert',
  u'B\xedr\xf3 Brigitta',
  u'Both Anita',
  u'Dragu Erika',
  u'Ferencz Ad\xe9l',
  u'Ferencz Hunor',
  u'F\xfcl\xf6p Zsolt',
  u'F\xfcl\xf6p Erika',
  u'Gidr\xf3 Szid\xf3nia',
  u'Gy\xf6rgy Zsuzsanna',
  u'Ho\ufffdpoth Ren\xe1ta M\xe1ria',
  u'I\ufffdets Vill\u0151',
  u'Imre T\xfcnde',
  u'Imre Hunor',
  u'Incze Katalin',
  u'Kelemen Kinga',
  u'L\u0151rinczy Ta\ufffd\xe1s',
  u'M\xe1rton B\xedborka Bernadette',
  u'Moln\xe1r Ad\xe9l',
  u'Moln\xe1r Andrea',
  u'Portik Szende',
  u'S\xe1ndor Szilveszter',
  u'Szilveszter Szid\xf3nia',
  u'Tank\xf3 T\xedmea',
  u'Vaszi Henrietta',
  u'Vaszi M\xe1ria',
  u'Veress T\xedmea'],
 [9.18,
  8.15,
  8.71,
  9.05,
  8.86,
  8.92,
  8.86,
  9.6,
  9.05,
  8.31,
  8.47,
  8.86,
  9.36,
  8.55,
  8.94,
  8.47,
  9.07,
  8.97,
  8.44,
  8.36,
  9.1,
  9.23,
  9.23,
  8.52,
  8.81,
  8.57,
  8.63,
  8.78,
  8.92],
 [u'Cs\xedkszentsi\ufffdon',
  u'Cs\xedkszereda',
  u'Cs\xedkcsomort\xe1n',
  u'Cs\xedkszenttam\xe1s',
  u'Szentegyh\xe1za',
  u'Cs\xedkszereda',
  u'Cs\xedksz\xe9pv\xedz',
  u'K\xe1poln\xe1s',
  u'Cs\xedkszereda',
  u'Cs\xedkd\xe1nfalva',
  u'Cs\xedkszenttam\xe1s',
  u'Cs\xedkmadaras',
  u'Tusn\xe1df\xfcrd\u0151',
  u'Cs\xedkszereda',
  u'Cs\xedkmadaras',
  u'Cs\xedkszentsimon',
  u'Cs\xedkszereda',
  u'Cs\xedkszereda',
  u'Cs\xedkszereda',
  u'Cs\xedkjen\u0151falva',
  u'Cs\xedkszereda',
  u'Cs\xedkszereda',
  u'Gyilkost\xf3',
  u'Cs\xedkjen\u0151falva',
  u'Cs\xedkszereda',
  u'Gyimesk\xf6z\xe9plok',
  u'Cs\xedkszentimre',
  u'Cs\xedkszereda',
  u'Cs\xedkszentsimon']]

Statisztika gyujtes

In [258]:
ar=np.array(data2[year][ev][osztaly][1])
temp = ar.argsort()[::-1]
ranks = np.empty(len(ar), int)
ranks[temp] = np.arange(len(ar))
In [259]:
ranks
Out[259]:
array([ 4, 28, 18,  7, 14, 12, 15,  0,  8, 27, 23, 13,  1, 21, 10, 24,  6,
        9, 25, 26,  5,  3,  2, 22, 16, 20, 19, 17, 11])
In [260]:
ar
Out[260]:
array([ 9.18,  8.15,  8.71,  9.05,  8.86,  8.92,  8.86,  9.6 ,  9.05,
        8.31,  8.47,  8.86,  9.36,  8.55,  8.94,  8.47,  9.07,  8.97,
        8.44,  8.36,  9.1 ,  9.23,  9.23,  8.52,  8.81,  8.57,  8.63,
        8.78,  8.92])
In [261]:
data3={}
data_ev={}
data_ossz={}
for year in data2:
    data3[year]={}
    data_ev[year]={}
    
    for ev in data2[year]:
        data3[year][ev]={}
        arr=[[],[],[],[],[]]
        for osztaly in data2[year][ev]:
            for k in range(3):
                arr[k]+=data2[year][ev][osztaly][k]
            arr[3]+=[osztaly for i in range(len(data2[year][ev][osztaly][0]))]
            
            if osztaly not in data_ev[year]:data_ev[year][osztaly]=[]
            data_ev[year][osztaly]+=data2[year][ev][osztaly][1]
            if osztaly not in data_ossz:data_ossz[osztaly]=[]
            data_ossz[osztaly]+=data2[year][ev][osztaly][1]                
        
        #iskola sorrend felallitasa
        ar=np.array(arr[1])
        temp = ar.argsort()[::-1]
        ranks = np.empty(len(ar), int)
        ranks[temp] = np.arange(len(ar))
        
        for i in range(len(ranks)):
            if ranks[i]<10:
                data3[year][ev][repr(ranks[i])]=[arr[0][i],arr[1][i],arr[2][i],arr[3][i]]
In [262]:
#adatok mentese
import json
file('data3.json','w').write(json.dumps(data3))

Osztalyzatok plot

In [270]:
#0, 4-esek csereje nan-ra
for year in data2:
    for ev in data2[year]:
        for osztaly in data2[year][ev]:
            for i in data2[year][ev][osztaly][1]:
                if i in {0,4}:
                    data2[year][ev][osztaly][1][i]=np.nan
#ujrafuttatas
ar=np.array(data2[year][ev][osztaly][1])
temp = ar.argsort()[::-1]
ranks = np.empty(len(ar), int)
ranks[temp] = np.arange(len(ar))
data3={}
data_ev={}
data_ossz={}
for year in data2:
    data3[year]={}
    data_ev[year]={}
    
    for ev in data2[year]:
        data3[year][ev]={}
        arr=[[],[],[],[],[]]
        for osztaly in data2[year][ev]:
            for k in range(3):
                arr[k]+=data2[year][ev][osztaly][k]
            arr[3]+=[osztaly for i in range(len(data2[year][ev][osztaly][0]))]
            
            if osztaly not in data_ev[year]:data_ev[year][osztaly]=[]
            data_ev[year][osztaly]+=data2[year][ev][osztaly][1]
            if osztaly not in data_ossz:data_ossz[osztaly]=[]
            data_ossz[osztaly]+=data2[year][ev][osztaly][1]                
        
        #iskola sorrend felallitasa
        ar=np.array(arr[1])
        temp = ar.argsort()[::-1]
        ranks = np.empty(len(ar), int)
        ranks[temp] = np.arange(len(ar))
        
        for i in range(len(ranks)):
            if ranks[i]<10:
                data3[year][ev][repr(ranks[i])]=[arr[0][i],arr[1][i],arr[2][i],arr[3][i]]
In [278]:
np.mean(data_ossz['D'])
Out[278]:
nan
In [275]:
np.nanmean(data_ev['2002']['A'])
Out[275]:
8.6621428571428574
In [378]:
import random
import matplotlib as mpl
import matplotlib.font_manager as font_manager
path = 'Righteous-Regular.ttf'
prop = font_manager.FontProperties(fname=path)
In [280]:
cc={"A":0,"A ":0,"B":1,"C":2,"D":3,"E":4,"e":4,"F":5,"G":5}
osztalyok="ABCDEFG"
dd={"9":9,"10":10,"11":11,"12":12,"IX":9,"X":10,"XI":11,"XII":12}
ee=[u"filológia",u"társadalom-\ntudományok",u"természet-\ntudományok",u"matematika-\ninformatika"]
colors=["#6b6ecf","#b5cf6b","#d6616b","#e7ba52","#e7ba52","#e7ba52"]
colors2=["#9c9ede","#cedb9c","#e7969c","#e7cb94","#e7cb94","#e7cb94"]
mpl.rc('font', family='Trebuchet MS')
fig, ax = plt.subplots(2,3,subplot_kw=dict(axisbg='#111111'),figsize=(14,11))
for i in range(6):
    ax[i/3][i%3].grid(color='#222222', linestyle='--')
    ax[i/3][i%3].set_xlim(2001,2015)
    ax[i/3][i%3].set_ylim(7,10.1)
    ax[i/3][i%3].set_axisbelow(True)
    ax[i/3][i%3].set_xticklabels([2000,2002,2004,2006,2008,2010,2012,2014],fontproperties=prop,color="#666655")
    ax[i/3][i%3].set_yticklabels(["7.00","7.50","8.00","8.50","9.00","9.50","10.00"],fontproperties=prop,color="#666655")
ax[1][1].set_xlabel(u"Tanév vége",fontproperties=prop,size=18,color="#666655")
ax[0][0].set_ylabel(u"Év végi általános",fontproperties=prop,size=18,color="#666655")
ax[1][0].set_ylabel(u"Év végi általános",fontproperties=prop,size=18,color="#666655")
ma=[[] for i in range(6)]
for yr in range(2002,2015):
    if yr not in {2005}:
        year=repr(yr)
        for ev in data2[year]:
            for osztaly in data2[year][ev]:
                y=data2[year][ev][osztaly][1]
                ind=cc[osztaly]
                ind2=cc[osztaly]
                #osztalyprofilok javitasa: pl. a D osztaly neha bioszkemia, neha matekinfo
                if yr==2002:
                    if dd[ev]==9:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                        if osztaly=="E": ind2=2
                    if dd[ev]==12:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=3
                        if osztaly=="E": ind2=2
                if yr==2003:
                    if dd[ev]==10:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="D": ind2=2
                    if dd[ev]==12:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                        if osztaly=="E": ind2=2
                if yr==2004:
                    if dd[ev]==11:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==12:
                        if osztaly=="D": ind2=2
                if yr==2005:
                    if dd[ev]==12:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                if yr==2012:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                if yr==2013:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                if yr==2014:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="D": ind2=2
                x=[yr-0.5+random.random() for i in range(len(y))]
                ax[ind/3][ind%3].scatter(x,y,50,c=colors[ind2],alpha=0.5)
                ax[ind/3][ind%3].scatter(yr,np.nanmean(data_ev[year][osztaly]),150,c=colors2[ind],alpha=1)
                    
for ind in range(5):
    ax[ind/3][ind%3].text(0.98,0,osztalyok[ind],color="#666655",size=30, fontproperties=prop, \
          horizontalalignment='right',verticalalignment='bottom',transform=ax[ind/3][ind%3].transAxes)
ax[1][2].text(0.98,0,"F/G",color="#666655",size=30, fontproperties=prop,\
    horizontalalignment='right',verticalalignment='bottom',transform=ax[1][2].transAxes)
for i in range(4):
    ax[1][2].scatter(2005.5,9.5-i*0.5,150,c=colors[i],alpha=0.5)
    ax[1][2].text(2006,9.5-i*0.5,ee[i],color=colors[i],size=13, fontproperties=prop,\
        horizontalalignment='left',verticalalignment='center',alpha=0.5)
plt.suptitle(u'     A csíkszeredai Márton Áron Gimnázium tanulóinak osztályonkénti jegyáltalánosai',fontproperties=prop,\
             y=0.95,color="#666655",size=22)
plt.savefig('jegy.png',bbox_inches = 'tight', pad_inches = 0.1, dpi=150,facecolor="#111111", edgecolor='#888888')
plt.show()
In [281]:
cc={"A":0,"A ":0,"B":1,"C":2,"D":3,"E":4,"e":4,"F":5,"G":5}
osztalyok="ABCDEFG"
dd={"9":9,"10":10,"11":11,"12":12,"IX":9,"X":10,"XI":11,"XII":12}
ee=[u"filológia",u"társadalom-\ntudományok",u"természet-\ntudományok",u"matematika-\ninformatika"]
colors=["#6b6ecf","#b5cf6b","#d6616b","#e7ba52","#e7ba52","#e7ba52"]
colors2=["#9c9ede","#cedb9c","#e7969c","#e7cb94","#e7cb94","#e7cb94"]
mpl.rc('font', family='Trebuchet MS')
fig, ax = plt.subplots(2,3,subplot_kw=dict(axisbg='#111111'),figsize=(14,11))
for i in range(6):
    ax[i/3][i%3].grid(color='#222222', linestyle='--')
    ax[i/3][i%3].set_xlim(2001,2015)
    ax[i/3][i%3].set_ylim(9.45,10.05)
    ax[i/3][i%3].set_axisbelow(True)
    ax[i/3][i%3].set_xticklabels([2000,2002,2004,2006,2008,2010,2012,2014],fontproperties=prop,color="#666655")
    ax[i/3][i%3].set_yticklabels(["9.40","9.50","9.60","9.70","9.80","9.90","10.00"],fontproperties=prop,color="#666655")
ax[1][1].set_xlabel(u"Tanév vége",fontproperties=prop,size=18,color="#666655")
ax[0][0].set_ylabel(u"Év végi általános",fontproperties=prop,size=18,color="#666655")
ax[1][0].set_ylabel(u"Év végi általános",fontproperties=prop,size=18,color="#666655")
ma=[[] for i in range(6)]
for yr in range(2002,2015):
    if yr not in {2005}:
        year=repr(yr)
        for ev in data2[year]:
            for osztaly in data2[year][ev]:
                y=data2[year][ev][osztaly][1]
                ind=cc[osztaly]
                ind2=cc[osztaly]
                #osztalyprofilok javitasa: pl. a D osztaly neha bioszkemia, neha matekinfo
                if yr==2002:
                    if dd[ev]==9:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                        if osztaly=="E": ind2=2
                    if dd[ev]==12:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=3
                        if osztaly=="E": ind2=2
                if yr==2003:
                    if dd[ev]==10:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="D": ind2=2
                    if dd[ev]==12:
                        if osztaly=="B": ind2=0
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                        if osztaly=="E": ind2=2
                if yr==2004:
                    if dd[ev]==11:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                    if dd[ev]==12:
                        if osztaly=="D": ind2=2
                if yr==2005:
                    if dd[ev]==12:
                        if osztaly=="C": ind2=1
                        if osztaly=="D": ind2=2
                if yr==2012:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                if yr==2013:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                if yr==2014:
                    if dd[ev]==9:
                        if osztaly=="D": ind2=2
                    if dd[ev]==10:
                        if osztaly=="D": ind2=2
                    if dd[ev]==11:
                        if osztaly=="D": ind2=2
                x=[yr-0.5+random.random() for i in range(len(y))]
                ax[ind/3][ind%3].scatter(x,y,50,c=colors[ind2],alpha=0.7)
                ax[ind/3][ind%3].scatter(yr,np.mean(data_ev[year][osztaly]),150,c=colors2[ind],alpha=1)
                    
for ind in range(5):
    ax[ind/3][ind%3].text(0.98,0,osztalyok[ind],color="#666655",size=30, fontproperties=prop, \
          horizontalalignment='right',verticalalignment='bottom',transform=ax[ind/3][ind%3].transAxes)
ax[1][2].text(0.98,0,"F/G",color="#666655",size=30, fontproperties=prop,\
    horizontalalignment='right',verticalalignment='bottom',transform=ax[1][2].transAxes)
for i in range(4):
    ax[1][2].scatter(2006,10-i*0.1,150,c=colors[i],alpha=0.7)
    ax[1][2].text(2006.5,10-i*0.1,ee[i],color=colors[i],size=13, fontproperties=prop,\
        horizontalalignment='left',verticalalignment='center',alpha=0.7)
plt.suptitle(u'     A csíkszeredai Márton Áron Gimnázium első tanulóinak osztályonkénti jegyáltalánosai',\
             y=0.95,color="#666655",fontproperties=prop,size=20)
plt.savefig('topjegy.png',bbox_inches = 'tight', pad_inches = 0.1, dpi=150,facecolor="#111111", edgecolor='#888888')
plt.show()
In [303]:
ff={u"nyelvek":0,u"társadalomtudományok":1,u"matek-info":2,u"természettudományok":3,u"művészetek":4};
hh={"0":1,"1":4,"2":3,"3":2,"u'D'":1,"4":1};
kk={"9":"IX","10":"X","X":"X","11":"XI","12":"XII"}
rr={u"országos":3,u"régió":2,u"helyi":1,u"helyi ":1};
data4=[0,0,0,0,0,0]
data5=[0,0,0,0,0]
data4b=[0,0,0,0,0,0]
data5b=[0,0,0,0,0]
data6=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
data7=[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
data6b=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
data7b=[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
data8={}
data8b={}
letszam={}
data9={}
data10={}
#letszam
for yr in range(2002,2015):
    if yr not in {2005}:
        year=repr(int(yr))
        if year not in letszam: letszam[year]={}
        for ev in data2[year]:
            for osztaly in data2[year][ev]:
                if year not in {2005}:
                    if cc[osztaly] not in letszam[year]:letszam[year][cc[osztaly]]=0
                    letszam[year][cc[osztaly]]+=len(data2[year][ev][osztaly.strip().capitalize()][0])
#komparativ statisztika
for year in data:
    if year not in data8: data8[year]=[0,0,0,0,0,0]
    if year not in data8b: data8b[year]=[0,0,0,0,0,0]
    for ev in data[year]:
        for osztaly in data[year][ev]:
            for tan in data[year][ev][osztaly]:
                data4[cc[osztaly]]+=len(data[year][ev][osztaly][tan])
                data8[year][cc[osztaly]]+=len(data[year][ev][osztaly][tan])
                data5[ff[tan]]+=len(data[year][ev][osztaly][tan])
                data6[cc[osztaly]][ff[tan]]+=len(data[year][ev][osztaly][tan])
                data7[ff[tan]][cc[osztaly]]+=len(data[year][ev][osztaly][tan])
                for k in data[year][ev][osztaly][tan]:
                    data4b[cc[osztaly]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    data8b[year][cc[osztaly]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    data5b[ff[tan]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    data6b[cc[osztaly]][ff[tan]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    data7b[ff[tan]][cc[osztaly]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    if k["nev"] not in data9: data9[k["nev"]]=0
                    data9[k["nev"]]+=1
                    if k["nev"] not in data10: data10[k["nev"]]=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
                    else: data10[k["nev"]]+=hh[repr(k["hely"])]*\
                                                    rr[k["szint"]]
In [289]:
letszam
Out[289]:
{'2002': {0: 99, 1: 106, 2: 99, 3: 93, 4: 100, 5: 129},
 '2003': {0: 101, 1: 108, 2: 105, 3: 95, 4: 104, 5: 104},
 '2004': {0: 109, 1: 117, 2: 108, 3: 99, 4: 112, 5: 52},
 '2006': {0: 116, 1: 118, 2: 109, 3: 110, 4: 116},
 '2007': {0: 110, 1: 118, 2: 108, 3: 101, 4: 109},
 '2008': {0: 107, 1: 114, 2: 108, 3: 95, 4: 105},
 '2009': {0: 113, 1: 116, 2: 111, 3: 102, 4: 108},
 '2010': {0: 116, 1: 116, 2: 112, 3: 107, 4: 110},
 '2011': {0: 118, 1: 120, 2: 113, 3: 114, 4: 113},
 '2012': {0: 120, 1: 118, 2: 121, 3: 101, 4: 119, 5: 29},
 '2013': {0: 118, 1: 118, 2: 121, 3: 108, 4: 119, 5: 55},
 '2014': {0: 116, 1: 125, 2: 121, 3: 118, 4: 121, 5: 83}}
In [302]:
data8
Out[302]:
{2002L: [16, 52, 36, 57, 77, 14],
 2003L: [53, 91, 57, 33, 108, 37],
 2004L: [30, 82, 42, 9, 184, 0],
 2005L: [4, 71, 35, 17, 117, 0],
 2006L: [12, 67, 27, 24, 198, 0],
 2007L: [13, 77, 31, 37, 107, 0],
 2008L: [16, 113, 31, 14, 93, 0],
 2009L: [41, 63, 20, 4, 97, 0],
 2010L: [10, 62, 89, 13, 172, 0],
 2011L: [15, 76, 91, 13, 162, 0],
 2012L: [33, 69, 48, 11, 185, 0],
 2013L: [48, 36, 143, 15, 294, 0],
 2014L: [17, 82, 123, 8, 413, 5],
 2015L: [28, 44, 58, 4, 180, 14]}
In [403]:
percapita={}
percapitab={}
for yr in range(2002,2015):
    if yr not in {2005}:
        year=repr(yr)
        for osztaly in letszam[year]:
            if osztaly not in percapita:percapita[osztaly]=[]
            if osztaly not in percapitab:percapitab[osztaly]=[]
            percapita[osztaly].append(data8[int(year)][osztaly]*1.0/letszam[year][osztaly])
            percapitab[osztaly].append(data8b[int(year)][osztaly]*1.0/letszam[year][osztaly])
            if yr==2004:
                if osztaly!=5:
                    percapita[osztaly].append((data8[2004][osztaly]*1.0/letszam['2004'][osztaly]+\
                                          data8[2006][osztaly]*1.0/letszam['2006'][osztaly])/2)
                    percapitab[osztaly].append((data8b[2004][osztaly]*1.0/letszam['2004'][osztaly]+\
                                          data8b[2006][osztaly]*1.0/letszam['2006'][osztaly])/2)
                else:
                    percapita[osztaly].append(data8[2004][osztaly]*1.0/letszam['2004'][osztaly])
                    percapitab[osztaly].append(data8b[2004][osztaly]*1.0/letszam['2004'][osztaly])
In [414]:
lbl=["A","B","C","D","E","F/G"]
pccolors=colors[:3]+["#bd9e39","#e7ba52","#8c6d31"]
fig, ax = plt.subplots(1,2,subplot_kw=dict(axisbg='#111111'),figsize=(12,4))
for i in range(2):
    ax[i].grid(color='#222222', linestyle='--')
    ax[i].set_xlim(0,12)
    ax[i].set_axisbelow(True)
    ax[i].set_xticklabels([2002,2004,2006,2008,2010,2012,2014],fontproperties=prop,color="#666655")
ax[0].set_ylim(0,1)
ax[1].set_ylim(0,3)
ax[0].set_yticklabels(["0","0.2","0.4","0.6","0.8","1"],fontproperties=prop,color="#666655")
ax[1].set_yticklabels(["0","0.5","1","1.5","2","2.5","3"],fontproperties=prop,color="#666655")
ax[0].set_xlabel(u"Tanév vége",fontproperties=prop,size=18,color="#666655")
ax[1].set_xlabel(u"Tanév vége",fontproperties=prop,size=18,color="#666655")
ax[0].set_ylabel(u"Verseny / tanuló",fontproperties=prop,size=18,color="#666655")
ax[1].set_ylabel(u"Pont / tanuló",fontproperties=prop,size=18,color="#666655")
plt.suptitle(u"Átlagban hány versenyen vettek részt a tanulók egy tanévben?",fontproperties=prop,size=18,color="#666655",y=1.05)
for osztaly in percapita:
    ax[0].plot(percapita[osztaly],color=pccolors[osztaly],alpha=0.7,label=lbl[osztaly],linewidth=4)
    ax[1].plot(percapitab[osztaly],color=pccolors[osztaly],alpha=0.7,linewidth=4)
l=ax[0].legend(loc=2,framealpha=0,prop=prop)
for text in l.get_texts():
    text.set_color("#666655")
plt.savefig('percapita.png',bbox_inches = 'tight', pad_inches = 0.1, dpi=150,facecolor="#111111", edgecolor='#888888')
plt.show()