Diplomky na MFF

In [1]:
from __future__ import division
from diplomky import learning

data = learning.read('data/diplomky.json')
features = learning.extract_features(data)
In [2]:
features.head(10)
Out[2]:
result program generator language pages branch division
0 1 Fyzika TeX Slovenština 60 Astronomie a astrofyzika (FA) Astronomický ústav UK (32-AUUK)
1 1 Matematika TeX Angličtina 48 Matematické modelování ve fyzice a technice (M... Matematický ústav UK (32-MUUK)
2 1 Matematika TeX Čeština 51 Pravděpodobnost, matematická statistika a ekon... Katedra pravděpodobnosti a matematické statist...
3 1 Matematika TeX Čeština 46 Pravděpodobnost, matematická statistika a ekon... Katedra pravděpodobnosti a matematické statist...
4 3 Informatika TeX Angličtina 69 Matematická lingvistika (IML) Ústav formální a aplikované lingvistiky (32-UFAL)
5 1 Informatika MSWord Angličtina 53 Softwarové systémy (ISS) Kabinet software a výuky informatiky (32-KSVI)
6 3 Informatika MSWord Čeština 80 Teoretická informatika (ITI) Katedra teoretické informatiky a matematické l...
7 1 Fyzika TeX Slovenština 102 Teoretická fyzika (FTF) Ústav teoretické fyziky (32-UTF)
8 1 Fyzika TeX Angličtina 56 Jaderná a subjaderná fyzika (FJF) Ústav částicové a jaderné fyziky (32-UCJF)
9 1 Matematika TeX Angličtina 74 Numerická a výpočtová matematika (MNVM) Katedra numerické matematiky (32-KNM)

10 rows × 7 columns

In [3]:
def percentage(group):
    return len(group) / len(features)

def average_result(features, column):
    return features.groupby(column)['result'].agg([np.mean, percentage])

display(average_result(features, 'program'))
display(average_result(features, 'language'))
display(average_result(features, 'generator'))
mean percentage
program
Fyzika 1.245136 0.252953
Informatika 1.731481 0.425197
Matematika 1.504587 0.321850

3 rows × 2 columns

mean percentage
language
Angličtina 1.501992 0.370571
Slovenština 1.894737 0.074803
Čeština 1.509317 0.554626

3 rows × 2 columns

mean percentage
generator
MSWord 1.639423 0.204724
OOo/LO 2.009524 0.051673
TeX 1.473858 0.743602

3 rows × 2 columns

In [4]:
from scipy.stats import chi2_contingency
def chi2test(feature):
    ct = features.pivot_table(rows=[feature], cols=['result'], values=['index'], aggfunc=len)
    display(ct)
    chi2, p, dof, ex = chi2_contingency(ct)
    print 'p =', p

chi2test('program')
chi2test('language')
chi2test('generator')
result 1.0 2.0 3.0 5.0
program
Fyzika 412 82 18 2
Informatika 501 208 98 57
Matematika 436 140 61 17

3 rows × 4 columns

p = 5.22614514071e-18

result 1.0 2.0 3.0 5.0
language
Angličtina 526 140 55 32
Slovenština 71 48 22 11
Čeština 752 242 100 33

3 rows × 4 columns

p = 3.50756218576e-06

result 1.0 2.0 3.0 5.0
generator
MSWord 251 102 44 19
OOo/LO 45 32 19 9
TeX 1053 296 114 48

3 rows × 4 columns

p = 4.57038666653e-08

In [5]:
learning.make_pdf(features, '/tmp/general.pdf', tree__max_depth=5, tree__min_samples_leaf=10)
learning.make_pdf(features[features['program'] == 'Informatika'], '/tmp/informatika.pdf', tree__max_depth=4, tree__min_samples_leaf=5)
In [6]:
from sklearn import tree, ensemble, svm

tr = tree.DecisionTreeClassifier(min_samples_leaf=10, max_depth=5)
print learning.crossval(tr, features)

rf = ensemble.RandomForestClassifier(min_samples_leaf=10, max_depth=8)
print learning.crossval(rf, features)

svc = svm.SVC()
print learning.crossval(svc, features)
0.665356331594
0.663879233155
0.666340352693
In [7]:
(features['result'].value_counts() / len(features)).to_frame('percentage')
Out[7]:
percentage
1 0.663878
2 0.211614
3 0.087106
5 0.037402

4 rows × 1 columns

In [7]: