Zdrojová data pro tuto tabulku jsou dostupná zde
import pandas as pd
orig_data = pd.read_csv("ZDO2014evaluation.csv")
#orig_data.sort(column=['score'], ascending=False)
#print orig_data
gb = orig_data.groupby('team')
#print gb.max().sort(column=['score'], ascending=False)
gbsort = gb.max().sort(column=['score'], ascending=False)
gbsort['score']
#tt.tolist()
team RakHejdovaJuna 0.940804338003 RakHejdovaJuna2 0.78640776699 nedvedj 0.699029126214 cervenym 0.68932038835 sample M. Jirik 0.300970873786 nedvedj2 0.0194174757282 Name: score, dtype: object
K těmto bodům jsou pak v hodnocení funkčnosti ještě přidány body za dokumentaci v kódu, demo režim, git atd.
%pylab inline --no-import-all
import matplotlib.pyplot as plt
print np.power(gbsort['score'].astype(np.double),2)*36
## vizualizace progrese
te = np.arange(0,1.1,0.1)
y = np.power(te,2)*36
plt.figure(figsize=(2,1.5))
plt.plot(te,y)
Populating the interactive namespace from numpy and matplotlib team RakHejdovaJuna 31.864061 RakHejdovaJuna2 22.263738 nedvedj 17.591102 cervenym 17.105854 sample M. Jirik 3.261005 nedvedj2 0.013573 Name: score, dtype: float64
[<matplotlib.lines.Line2D at 0x7f52e824e590>]
#pd.set_option('display.max_columns', None)
print orig_data.tail(40)
#print dir(pd)
team score date time 132 nedvedj 0.323995 2014-06-10 10:27:20.666130 133 RakHejdovaJuna 0.940804 2014-06-10 10:28:26.399551 134 RakHejdovaJuna2 0.000000 2014-06-10 10:28:26.485093 135 nedvedj2 0.000000 2014-06-10 10:28:26.662503 136 sample M. Jirik 0.000000 2014-06-10 10:30:10.339569 137 cervenym 0.618445 2014-06-10 10:32:06.897540 138 nedvedj 0.344937 2014-06-10 10:32:59.784266 139 RakHejdovaJuna 0.939873 2014-06-10 10:34:05.136954 140 RakHejdovaJuna2 0.000000 2014-06-10 10:34:05.223635 141 nedvedj2 0.000000 2014-06-10 10:34:05.401491 142 sample M. Jirik 0.000000 2014-06-10 10:40:05.238037 143 cervenym 0.629295 2014-06-10 10:42:01.262574 144 nedvedj 0.322785 2014-06-10 10:42:54.287133 145 RakHejdovaJuna 0.940778 2014-06-10 10:43:58.248363 146 RakHejdovaJuna2 0.000000 2014-06-10 10:43:58.333504 147 nedvedj2 0.000000 2014-06-10 10:43:58.510197 148 sample M. Jirik 0.300497 2014-06-10 10:53:00.830229 149 cervenym 0.617262 2014-06-10 10:54:55.937289 150 nedvedj 0.323995 2014-06-10 10:55:49.244489 151 RakHejdovaJuna 0.940804 2014-06-10 10:56:52.098387 152 sample M. Jirik 0.298373 2014-06-20 09:47:57.243949 153 cervenym 0.618445 2014-06-20 09:49:51.402369 154 nedvedj 0.000000 2014-06-20 09:49:51.403685 155 RakHejdovaJuna 0.939873 2014-06-20 09:50:55.445074 156 sample M. Jirik 0.250000 2014-06-23 09:26:35.657323 157 cervenym 0.673077 2014-06-23 09:26:42.847864 158 nedvedj 0.673077 2014-06-23 09:26:44.600640 159 RakHejdovaJuna 0.759615 2014-06-23 09:26:49.038464 160 sample M. Jirik 0.223301 2014-06-23 09:50:27.159108 161 cervenym 0.592233 2014-06-23 09:50:33.911572 162 nedvedj 0.699029 2014-06-23 09:50:35.571370 163 RakHejdovaJuna 0.718447 2014-06-23 09:50:39.678260 164 sample M. Jirik 0.223301 2014-06-23 09:55:08.823339 165 cervenym 0.592233 2014-06-23 09:55:15.655003 166 nedvedj 0.699029 2014-06-23 09:55:17.301895 167 RakHejdovaJuna 0.718447 2014-06-23 09:55:21.398045 168 sample M. Jirik 0.174757 2014-06-23 09:57:23.405620 169 cervenym 0.543689 2014-06-23 09:57:30.615811 170 nedvedj 0.689320 2014-06-23 09:57:32.268525 171 RakHejdovaJuna 0.854369 2014-06-23 09:57:36.362442 [40 rows x 4 columns]
V průběhu vyhodnocování je vytvářen logovací soubor. Nahládnout do něj můžete zde. Základem je modul logging. Ten pak používáte namísto printu.
Tyto řádky přidejte na začátek souboru k ostatním importům
import logging
logger = logging.getLogger(__name__)
Tento řádek přijde do funkce main
logging.basicConfig(level=logging.DEBUG)
A takto si vypisujete libovolné zprávy pomocí loggeru.
logger.debug('muj vypis cislo ' + str(1))
Matice záměn ukazuje, kolikrát byl label $i$ klasifikován jako $j$. V ideálním případě jsou tedy nenulová čísla pouze na diagonále. Tam jsou správné klasifikace. Jak to mělo dopadnout ukazují data pojmenovaná reference
Zdrojová data lze najít zde
%pylab inline --no-import-all
import sklearn
import sklearn.metrics
import matplotlib.pyplot as plt
df = pd.read_csv("ZDO2014classifs.csv")
cols = df.columns
print cols
# získáme seznam všech labelů značek, které jsou v testu
unlabels = np.unique(df['reference'].values)
# převedeme do čísel (indexů)
y_true = np.searchsorted(unlabels, df['reference'].values)
print unlabels
for col in cols:
y_pred = np.searchsorted(unlabels, df[col].values)
cmat = sklearn.metrics.confusion_matrix(y_true, y_pred)
plt.matshow(cmat)
plt.title(col)
Populating the interactive namespace from numpy and matplotlib Index([u'RakHejdovaJuna', u'cervenym', u'nedvedj', u'reference', u'sample M. Jirik'], dtype='object') ['A11' 'A22' 'A24' 'B13' 'B16' 'B2' 'B20a' 'B21a' 'B24a' 'B24b' 'B28' 'B29' 'B4' 'C4a' 'C4c' 'E13' 'E2b' 'E3a' 'E4' 'E7b' 'E9' 'IJ4a' 'IJ4b' 'IJ7' 'IP11a' 'IP15a' 'IP15b' 'IP18b' 'IP19' 'IP5' 'IP6' 'IS12a' 'IS12b' 'IS18a' 'IS18b' 'IS23' 'IS24b' 'IS2c' 'IS3a' 'IS3b' 'IS3c' 'IS3d' 'IS5' 'IS6a' 'IS6b' 'IS6e' 'IS6f' 'IS6g' 'IS7a' 'IS8b' 'IS9a' 'P1' 'P2' 'P4' 'X1' 'X2' 'X3' 'Z3' 'Z4a' 'Z4b' 'Z4c' 'Z4d']