diff --git a/templates/tpl_evaluation.ipynb b/templates/tpl_evaluation.ipynb index c544be2..e346678 100644 --- a/templates/tpl_evaluation.ipynb +++ b/templates/tpl_evaluation.ipynb @@ -19,8 +19,10 @@ "outputs": [], "source": [ "from IPython.display import Markdown as md\n", - "from IPython.display import display\n", + "from IPython.display import display, HTML\n", "import pandas as pd\n", + "import ipywidgets as widgets\n", + "import seaborn as sns\n", "from pathlib import Path\n", "from datetime import datetime\n", "from recopytex import flat_df_students, pp_q_scores\n", @@ -31,6 +33,15 @@ { "cell_type": "code", "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "cm = sns.light_palette(\"green\", as_cmap=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "metadata": { "extensions": { "jupyter_dashboards": { @@ -57,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "extensions": { "jupyter_dashboards": { @@ -94,7 +105,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, "metadata": { "extensions": { "jupyter_dashboards": { @@ -108,51 +119,6 @@ } } }, - "outputs": [], - "source": [ - "stack_scores = pd.read_csv(csv_file, encoding=\"latin_1\")\n", - "scores = flat_df_students(stack_scores).dropna(subset=[\"Score\"])\n", - "scores = pp_q_scores(scores)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "extensions": { - "jupyter_dashboards": { - "version": 1, - "views": { - "grid_default": {}, - "report_default": { - "hidden": true - } - } - } - } - }, - "outputs": [], - "source": [ - "exercises_scores = scores.groupby([\"Exercice\", \"Eleve\"]).agg({\"Note\": \"sum\", \"Bareme\": \"sum\"})\n", - "#exercises_scores.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "extensions": { - "jupyter_dashboards": { - "version": 1, - "views": { - "grid_default": {}, - "report_default": { - "hidden": false - } - } - } - } - }, "outputs": [ { "data": { @@ -175,10 +141,190 @@ " \n", " \n", " \n", + " Trimestre\n", + " Nom\n", + " Date\n", + " Exercice\n", + " Question\n", + " Competence\n", + " Domaine\n", + " Commentaire\n", + " Bareme\n", + " Est_nivele\n", + " Eleve\n", + " Score\n", + " Note\n", + " Niveau\n", + " Normalise\n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " 1\n", + " DM1\n", + " 15/09/16\n", + " 1\n", + " 1.1\n", + " Cal\n", + " Prio\n", + " \n", + " 1.0\n", + " 1\n", + " ABDOU Asmahane\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " \n", + " \n", + " 1\n", + " 1\n", + " DM1\n", + " 15/09/16\n", + " 1\n", + " 1.2\n", + " Cal\n", + " Prio\n", + " \n", + " 1.0\n", + " 1\n", + " ABDOU Asmahane\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " \n", + " \n", + " 2\n", + " 1\n", + " DM1\n", + " 15/09/16\n", + " 1\n", + " 1.3\n", + " Cal\n", + " Prio\n", + " \n", + " 1.0\n", + " 1\n", + " ABDOU Asmahane\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " \n", + " \n", + " 3\n", + " 1\n", + " DM1\n", + " 15/09/16\n", + " 1\n", + " 1.4\n", + " Cal\n", + " Prio\n", + " \n", + " 1.0\n", + " 1\n", + " ABDOU Asmahane\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " \n", + " \n", + " 4\n", + " 1\n", + " DM1\n", + " 15/09/16\n", + " 1\n", + " 1.5\n", + " Cal\n", + " Prio\n", + " \n", + " 1.0\n", + " 1\n", + " ABDOU Asmahane\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " \n", + " \n", + "\n", + "" + ], + "text/plain": [ + " Trimestre Nom Date Exercice Question Competence Domaine Commentaire \\\n", + "0 1 DM1 15/09/16 1 1.1 Cal Prio \n", + "1 1 DM1 15/09/16 1 1.2 Cal Prio \n", + "2 1 DM1 15/09/16 1 1.3 Cal Prio \n", + "3 1 DM1 15/09/16 1 1.4 Cal Prio \n", + "4 1 DM1 15/09/16 1 1.5 Cal Prio \n", + "\n", + " Bareme Est_nivele Eleve Score Note Niveau Normalise \n", + "0 1.0 1 ABDOU Asmahane 2.0 1.0 2.0 1.0 \n", + "1 1.0 1 ABDOU Asmahane 3.0 1.0 3.0 1.0 \n", + "2 1.0 1 ABDOU Asmahane 2.0 1.0 2.0 1.0 \n", + "3 1.0 1 ABDOU Asmahane 2.0 1.0 2.0 1.0 \n", + "4 1.0 1 ABDOU Asmahane 2.0 1.0 2.0 1.0 " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stack_scores = pd.read_csv(csv_file, encoding=\"latin_1\")\n", + "scores = flat_df_students(stack_scores).dropna(subset=[\"Score\"])\n", + "scores = pp_q_scores(scores)\n", + "scores.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "extensions": { + "jupyter_dashboards": { + "version": 1, + "views": { + "grid_default": {}, + "report_default": { + "hidden": true + } + } + } + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -186,165 +332,58 @@ " \n", " \n", " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
NoteBareme
ExerciceEleve
1ABDOU Asmahane5.00125.06.0
ABOU Roihim0.00120.06.0
AHMED BOINALI Kouraichia2.67122.06.0
AHMED Rahada6.33123.06.0
ALI SAID Anchourati0.0012
ASSANE Noussouraniya4.6712
BACAR Issiaka0.0012
BACAR Samina3.6712
CHAIHANE Said5.3312
COMBO Houzaimati5.0012
DAOUD Anzilati5.1712
DAOUD Talaenti5.6712
DARKAOUI Rachma5.6712
DHAKIOINE Nabaouya1.0012
DJANFAR Soioutinour5.3312
DRISSA Ibrahim0.0012
HACHIM SIDI Assani7.0012
HAFIDHUI Zalifa5.6712
HOUMADI Marie6.6712
HOUMADI Sania5.3312
MAANDHUI Halouoi7.0012
MASSONDI Nasma7.3312
SAIDALI Irichad5.00120.06.0
\n", "
" ], "text/plain": [ - " Note Bareme\n", - "Eleve \n", - "ABDOU Asmahane 5.00 12\n", - "ABOU Roihim 0.00 12\n", - "AHMED BOINALI Kouraichia 2.67 12\n", - "AHMED Rahada 6.33 12\n", - "ALI SAID Anchourati 0.00 12\n", - "ASSANE Noussouraniya 4.67 12\n", - "BACAR Issiaka 0.00 12\n", - "BACAR Samina 3.67 12\n", - "CHAIHANE Said 5.33 12\n", - "COMBO Houzaimati 5.00 12\n", - "DAOUD Anzilati 5.17 12\n", - "DAOUD Talaenti 5.67 12\n", - "DARKAOUI Rachma 5.67 12\n", - "DHAKIOINE Nabaouya 1.00 12\n", - "DJANFAR Soioutinour 5.33 12\n", - "DRISSA Ibrahim 0.00 12\n", - "HACHIM SIDI Assani 7.00 12\n", - "HAFIDHUI Zalifa 5.67 12\n", - "HOUMADI Marie 6.67 12\n", - "HOUMADI Sania 5.33 12\n", - "MAANDHUI Halouoi 7.00 12\n", - "MASSONDI Nasma 7.33 12\n", - "SAIDALI Irichad 5.00 12" + " Note Bareme\n", + "Exercice Eleve \n", + "1 ABDOU Asmahane 5.0 6.0\n", + " ABOU Roihim 0.0 6.0\n", + " AHMED BOINALI Kouraichia 2.0 6.0\n", + " AHMED Rahada 3.0 6.0\n", + " ALI SAID Anchourati 0.0 6.0" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "assessment_scores = scores.groupby([\"Eleve\"]).agg({\"Note\": \"sum\", \"Bareme\": \"sum\"})\n", - "assessment_scores" + "exercises_scores = scores.groupby([\"Exercice\", \"Eleve\"]).agg({\"Note\": \"sum\", \"Bareme\": \"sum\"})\n", + "exercises_scores.head()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "extensions": { "jupyter_dashboards": { @@ -361,16 +400,238 @@ "outputs": [ { "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Note Bareme
Eleve
ABDOU Asmahane6.512
ABOU Roihim012
AHMED BOINALI Kouraichia3.512
AHMED Rahada712
ALI SAID Anchourati012
ASSANE Noussouraniya5.512
BACAR Issiaka012
BACAR Samina412
CHAIHANE Said612
COMBO Houzaimati612
DAOUD Anzilati7.512
DAOUD Talaenti812
DARKAOUI Rachma812
DHAKIOINE Nabaouya112
DJANFAR Soioutinour7.512
DRISSA Ibrahim012
HACHIM SIDI Assani8.512
HAFIDHUI Zalifa812
HOUMADI Marie7.512
HOUMADI Sania5.512
MAANDHUI Halouoi8.512
MASSONDI Nasma812
SAIDALI Irichad712
" + ], "text/plain": [ - "count 23.00\n", - "mean 4.33\n", - "std 2.45\n", - "min 0.00\n", - "25% 3.17\n", - "50% 5.17\n", - "75% 5.67\n", - "max 7.33\n", - "Name: Note, dtype: float64" + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "assessment_scores = scores.groupby([\"Eleve\"]).agg({\"Note\": \"sum\", \"Bareme\": \"sum\"})\n", + "#assessment_scores.style.background_gradient(cmap=cm, subset=[\"Note\"])\n", + "assessment_scores.style.bar(subset=[\"Note\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12.0" ] }, "execution_count": 8, @@ -379,7 +640,7 @@ } ], "source": [ - "assessment_scores[\"Note\"].describe()" + "assessment_scores.Bareme.max()" ] }, { @@ -399,29 +660,47 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n", - " return f(*args, **kwds)\n", - "/usr/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n", - " return f(*args, **kwds)\n" - ] - }, { "data": { "text/plain": [ - "" + "count 23.00\n", + "mean 5.37\n", + "std 3.08\n", + "min 0.00\n", + "25% 3.75\n", + "50% 6.50\n", + "75% 7.75\n", + "max 8.50\n", + "Name: Note, dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" + } + ], + "source": [ + "assessment_scores[\"Note\"].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -433,13 +712,101 @@ } ], "source": [ - "assessment_scores[\"Note\"].plot.kde()\n", - "assessment_scores[\"Note\"].plot.hist(density=True)" + "dp = sns.distplot(assessment_scores.Note, bins=int(assessment_scores.Bareme[0])*2)\n", + "dp.set(xlim=(0, assessment_scores.Bareme[0]))\n", + "dp" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NoteBareme
ExerciceEleve
1ABDOU Asmahane5.06.0
ABOU Roihim0.06.0
AHMED BOINALI Kouraichia2.06.0
AHMED Rahada3.06.0
ALI SAID Anchourati0.06.0
\n", + "
" + ], + "text/plain": [ + " Note Bareme\n", + "Exercice Eleve \n", + "1 ABDOU Asmahane 5.0 6.0\n", + " ABOU Roihim 0.0 6.0\n", + " AHMED BOINALI Kouraichia 2.0 6.0\n", + " AHMED Rahada 3.0 6.0\n", + " ALI SAID Anchourati 0.0 6.0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exercises_scores.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, "metadata": { "extensions": { "jupyter_dashboards": { @@ -454,6 +821,67 @@ } }, "outputs": [], + "source": [ + "def st_results(student):\n", + " html = \"
\"\n", + " html += \"
\"\n", + " \n", + " ass = assessment_scores.loc[student]\n", + " exercices = exercises_scores.xs(student, level=\"Eleve\")\n", + " \n", + " html += f\"

{student} -- {assessment}

\"\n", + " html += f\"

{ass.Note} / {ass.Bareme}

\"\n", + " for (i, ex) in exercices.iterrows():\n", + " if not ex.Bareme == 0:\n", + " html += f\"

Exercice {i} ({ex.Note}/{ex.Bareme})

\"\n", + " html += scores.loc[(scores.Exercice==i) & (scores.Eleve==student)][[\"Question\", \"Commentaire\", \"Note\", \"Bareme\"]].to_html()\n", + " html += \"
\"\n", + " html += \"
\"\n", + " return HTML(html)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "788cdf676be445669085d7de593a8eeb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(Dropdown(description='student', options=('ABDOU Asmahane', 'ABOU Roihim', 'AHMED BOINALI…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact(st_results, student=list(assessment_scores.index))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [] } ],