{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use(\"seaborn-notebook\")\n", "#plt.style.use('ggplot')\n", "from ipywidgets import interact, interactive, fixed\n", "import ipywidgets as widgets\n", "from IPython.display import display\n", "import seaborn as sns\n", "cm = sns.light_palette(\"green\", as_cmap=True)\n", "\n", "from notes_tools.tools import extract_flat_marks, get_class_ws, digest_flat_df, term, evaluation\n", "from notes_tools.tools.bareme import tranform_scale\n", "from notes_tools.tools.marks_plottings import *" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
run previous cell, wait for 2 seconds
\n", "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ws = get_class_ws(\"312\")\n", "flat = extract_flat_marks(ws)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['DM1', 'DS1', 'DS2', 'DM2', 'DS3', 'DS5', 'DNB Blanc 1', 'DM3',\n", " 'Bbmars', 'ConnT1', 'ConnT2', 'ConnT3'], dtype=object)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flat[\"Nom\"].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Trimestre 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Trimestre 2" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 567, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 573, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 574, dtype: object\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "array(['DS3', 'DS5', 'DNB Blanc 1', 'ConnT2'], dtype=object)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flat_T2 = flat[flat[\"Trimestre\"] == 2]\n", "quest_T2, exo_T2, eval_T2 = digest_flat_df(flat_T2)\n", "flat_T2[\"Nom\"].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DS3" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "(array(['2016-12-03T00:00:00.000000000'], dtype='datetime64[ns]'),\n", " array([ 38.]))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds3_flat = flat_T2[flat_T2[\"Nom\"]==\"DS3\"]\n", "ds3_quest, ds3_exo, ds3_eval = digest_flat_df(ds3_flat)\n", "ds3_eval[\"Date\"].unique(), ds3_eval[\"Bareme\"].unique()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza18 / 38
1ABDALLAH Nourayina12 / 38
2ABDALLAH Roukia9,5 / 38
3AHAMADI Laila21,5 / 38
4AHAMADI Satti19,5 / 38
5AHMED Nachmie15,5 / 38
6ALI ABDALLAH Raphael15,5 / 38
7ATTOUMANE Nasrati21 / 38
8ATTOUMANE Nedjima22 / 38
9DARKAOUI Issouf10,5 / 38
10DHOIMIR Hidayat15 / 38
11DJAMAL Hounaissati9,5 / 38
12DJANFAR Houmadi4 / 38
13FAIZ Aoufi Youssouf10,5 / 38
14HAMZA El-Hadji20,5 / 38
15HOUFRANE Soirta19 / 38
16IBRAHIM Rouiyati17 / 38
17ISSOUF Toifia18 / 38
18MOADJO Hachimia11,5 / 38
19MOHAMED Abderemane20,5 / 38
20MOHAMED Nadhir-Eddine21 / 38
21SAID Fatima23,5 / 38
22YOUSSOUF Ouldine17 / 38
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 18 / 38\n", "1 ABDALLAH Nourayina 12 / 38\n", "2 ABDALLAH Roukia 9,5 / 38\n", "3 AHAMADI Laila 21,5 / 38\n", "4 AHAMADI Satti 19,5 / 38\n", "5 AHMED Nachmie 15,5 / 38\n", "6 ALI ABDALLAH Raphael 15,5 / 38\n", "7 ATTOUMANE Nasrati 21 / 38\n", "8 ATTOUMANE Nedjima 22 / 38\n", "9 DARKAOUI Issouf 10,5 / 38\n", "10 DHOIMIR Hidayat 15 / 38\n", "11 DJAMAL Hounaissati 9,5 / 38\n", "12 DJANFAR Houmadi 4 / 38\n", "13 FAIZ Aoufi Youssouf 10,5 / 38\n", "14 HAMZA El-Hadji 20,5 / 38\n", "15 HOUFRANE Soirta 19 / 38\n", "16 IBRAHIM Rouiyati 17 / 38\n", "17 ISSOUF Toifia 18 / 38\n", "18 MOADJO Hachimia 11,5 / 38\n", "19 MOHAMED Abderemane 20,5 / 38\n", "20 MOHAMED Nadhir-Eddine 21 / 38\n", "21 SAID Fatima 23,5 / 38\n", "22 YOUSSOUF Ouldine 17 / 38" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds3_eval[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DS5" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "(array(['2017-01-25T00:00:00.000000000'], dtype='datetime64[ns]'),\n", " array([ 20.]))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds5_flat = flat_T2[flat_T2[\"Nom\"]==\"DS5\"]\n", "ds5_quest, ds5_exo, ds5_eval = digest_flat_df(ds5_flat)\n", "ds5_eval[\"Date\"].unique(), ds5_eval[\"Bareme\"].unique()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 24.00\n", "mean 9.00\n", "std 2.23\n", "min 5.00\n", "25% 7.38\n", "50% 8.75\n", "75% 11.00\n", "max 13.00\n", "Name: Mark, dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds5_eval[\"Mark\"].describe()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza9 / 20
1ABDALLAH Nourayina6 / 20
2ABDALLAH Roukia8 / 20
3AHAMADI Laila11,5 / 20
4AHAMADI Satti8 / 20
5AHAMED El-Fahad7 / 20
6AHMED Nachmie8 / 20
7ALI ABDALLAH Raphael6,5 / 20
8ATTOUMANE Nasrati8,5 / 20
9ATTOUMANE Nedjima12,5 / 20
10DARKAOUI Issouf13 / 20
11DHOIMIR Hidayat9,5 / 20
12DJAMAL Hounaissati6,5 / 20
13DJANFAR Houmadi5 / 20
14FAIZ Aoufi Youssouf7,5 / 20
15HAMZA El-Hadji11,5 / 20
16HOUFRANE Soirta10 / 20
17IBRAHIM Rouiyati11 / 20
18ISSOUF Toifia8 / 20
19MOADJO Hachimia6,5 / 20
20MOHAMED Abderemane9 / 20
21MOHAMED Nadhir-Eddine11 / 20
22SAID Fatima11,5 / 20
23YOUSSOUF Ouldine11 / 20
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 9 / 20\n", "1 ABDALLAH Nourayina 6 / 20\n", "2 ABDALLAH Roukia 8 / 20\n", "3 AHAMADI Laila 11,5 / 20\n", "4 AHAMADI Satti 8 / 20\n", "5 AHAMED El-Fahad 7 / 20\n", "6 AHMED Nachmie 8 / 20\n", "7 ALI ABDALLAH Raphael 6,5 / 20\n", "8 ATTOUMANE Nasrati 8,5 / 20\n", "9 ATTOUMANE Nedjima 12,5 / 20\n", "10 DARKAOUI Issouf 13 / 20\n", "11 DHOIMIR Hidayat 9,5 / 20\n", "12 DJAMAL Hounaissati 6,5 / 20\n", "13 DJANFAR Houmadi 5 / 20\n", "14 FAIZ Aoufi Youssouf 7,5 / 20\n", "15 HAMZA El-Hadji 11,5 / 20\n", "16 HOUFRANE Soirta 10 / 20\n", "17 IBRAHIM Rouiyati 11 / 20\n", "18 ISSOUF Toifia 8 / 20\n", "19 MOADJO Hachimia 6,5 / 20\n", "20 MOHAMED Abderemane 9 / 20\n", "21 MOHAMED Nadhir-Eddine 11 / 20\n", "22 SAID Fatima 11,5 / 20\n", "23 YOUSSOUF Ouldine 11 / 20" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds5_eval[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ConnT2" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 567, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 573, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 574, dtype: object\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "(array(['Trimestre'], dtype=object),\n", " array([ 25., 29., 16., 21., 8., 24.]))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "connT2_flat = flat_T2[flat_T2[\"Nom\"]=='ConnT2']\n", "connT2_quest, connT2_exo, connT2_eval = digest_flat_df(connT2_flat)\n", "connT2_eval[\"Date\"].unique(), connT2_eval[\"Bareme\"].unique()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "connT2_eval = tranform_scale(connT2_eval, 20, \"prop\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 24.00\n", "mean 11.88\n", "std 3.95\n", "min 2.50\n", "25% 9.75\n", "50% 12.25\n", "75% 14.00\n", "max 18.50\n", "Name: Mark, dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "connT2_eval[\"Mark\"].describe()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza16 / 20
1ABDALLAH Nourayina11 / 20
2ABDALLAH Roukia10 / 20
3AHAMADI Laila16,5 / 20
4AHAMADI Satti11 / 20
5AHAMED El-Fahad9 / 20
6AHMED Nachmie10 / 20
7ALI ABDALLAH Raphael10,5 / 20
8ATTOUMANE Nasrati18 / 20
9ATTOUMANE Nedjima15,5 / 20
10DARKAOUI Issouf13 / 20
11DHOIMIR Hidayat8 / 20
12DJAMAL Hounaissati6 / 20
13DJANFAR Houmadi2,5 / 20
14FAIZ Aoufi Youssouf6,5 / 20
15HAMZA El-Hadji13 / 20
16HOUFRANE Soirta13,5 / 20
17IBRAHIM Rouiyati13 / 20
18ISSOUF Toifia9 / 20
19MOADJO Hachimia11,5 / 20
20MOHAMED Abderemane13,5 / 20
21MOHAMED Nadhir-Eddine18,5 / 20
22SAID Fatima16,5 / 20
23YOUSSOUF Ouldine13 / 20
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 16 / 20\n", "1 ABDALLAH Nourayina 11 / 20\n", "2 ABDALLAH Roukia 10 / 20\n", "3 AHAMADI Laila 16,5 / 20\n", "4 AHAMADI Satti 11 / 20\n", "5 AHAMED El-Fahad 9 / 20\n", "6 AHMED Nachmie 10 / 20\n", "7 ALI ABDALLAH Raphael 10,5 / 20\n", "8 ATTOUMANE Nasrati 18 / 20\n", "9 ATTOUMANE Nedjima 15,5 / 20\n", "10 DARKAOUI Issouf 13 / 20\n", "11 DHOIMIR Hidayat 8 / 20\n", "12 DJAMAL Hounaissati 6 / 20\n", "13 DJANFAR Houmadi 2,5 / 20\n", "14 FAIZ Aoufi Youssouf 6,5 / 20\n", "15 HAMZA El-Hadji 13 / 20\n", "16 HOUFRANE Soirta 13,5 / 20\n", "17 IBRAHIM Rouiyati 13 / 20\n", "18 ISSOUF Toifia 9 / 20\n", "19 MOADJO Hachimia 11,5 / 20\n", "20 MOHAMED Abderemane 13,5 / 20\n", "21 MOHAMED Nadhir-Eddine 18,5 / 20\n", "22 SAID Fatima 16,5 / 20\n", "23 YOUSSOUF Ouldine 13 / 20" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "connT2_eval[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DNB blanc 1" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "(array(['2017-02-08T00:00:00.000000000'], dtype='datetime64[ns]'),\n", " array([ 50.]))" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dnb1_flat = flat_T2[flat_T2[\"Nom\"]=='DNB Blanc 1']\n", "dnb1_quest, dnb1_exo, dnb1_eval = digest_flat_df(dnb1_flat)\n", "dnb1_eval[\"Date\"].unique(), dnb1_eval[\"Bareme\"].unique()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 24.00\n", "mean 19.46\n", "std 5.21\n", "min 10.00\n", "25% 15.75\n", "50% 18.75\n", "75% 22.25\n", "max 29.00\n", "Name: Mark, dtype: float64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dnb1_eval[\"Mark\"].describe()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza23 / 50
1ABDALLAH Nourayina10 / 50
2ABDALLAH Roukia13 / 50
3AHAMADI Laila17 / 50
4AHAMADI Satti18,5 / 50
5AHAMED El-Fahad16 / 50
6AHMED Nachmie19 / 50
7ALI ABDALLAH Raphael18 / 50
8ATTOUMANE Nasrati22 / 50
9ATTOUMANE Nedjima21 / 50
10DARKAOUI Issouf26,5 / 50
11DHOIMIR Hidayat14 / 50
12DJAMAL Hounaissati14 / 50
13DJANFAR Houmadi13 / 50
14FAIZ Aoufi Youssouf15 / 50
15HAMZA El-Hadji29 / 50
16HOUFRANE Soirta26 / 50
17IBRAHIM Rouiyati18 / 50
18ISSOUF Toifia19 / 50
19MOADJO Hachimia18 / 50
20MOHAMED Abderemane29 / 50
21MOHAMED Nadhir-Eddine22 / 50
22SAID Fatima20 / 50
23YOUSSOUF Ouldine26 / 50
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 23 / 50\n", "1 ABDALLAH Nourayina 10 / 50\n", "2 ABDALLAH Roukia 13 / 50\n", "3 AHAMADI Laila 17 / 50\n", "4 AHAMADI Satti 18,5 / 50\n", "5 AHAMED El-Fahad 16 / 50\n", "6 AHMED Nachmie 19 / 50\n", "7 ALI ABDALLAH Raphael 18 / 50\n", "8 ATTOUMANE Nasrati 22 / 50\n", "9 ATTOUMANE Nedjima 21 / 50\n", "10 DARKAOUI Issouf 26,5 / 50\n", "11 DHOIMIR Hidayat 14 / 50\n", "12 DJAMAL Hounaissati 14 / 50\n", "13 DJANFAR Houmadi 13 / 50\n", "14 FAIZ Aoufi Youssouf 15 / 50\n", "15 HAMZA El-Hadji 29 / 50\n", "16 HOUFRANE Soirta 26 / 50\n", "17 IBRAHIM Rouiyati 18 / 50\n", "18 ISSOUF Toifia 19 / 50\n", "19 MOADJO Hachimia 18 / 50\n", "20 MOHAMED Abderemane 29 / 50\n", "21 MOHAMED Nadhir-Eddine 22 / 50\n", "22 SAID Fatima 20 / 50\n", "23 YOUSSOUF Ouldine 26 / 50" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dnb1_eval[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Bilan T2" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['ABDALLAH Elza', 'ABDALLAH Nourayina', 'ABDALLAH Roukia',\n", " 'ABOUDOU Faise', 'AHAMADI Laila', 'AHAMADI Satti',\n", " 'AHAMED El-Fahad', 'AHMED Nachmie', 'ALI ABDALLAH Raphael',\n", " 'ATTOUMANE Nasrati', 'ATTOUMANE Nedjima', 'DARKAOUI Issouf',\n", " 'DHOIMIR Hidayat', 'DJAMAL Hounaissati', 'DJANFAR Houmadi',\n", " 'FAIZ Aoufi Youssouf', 'HAMZA El-Hadji', 'HOUFRANE Soirta',\n", " 'IBRAHIM Hindou', 'IBRAHIM Rouiyati', 'ISSOUF Toifia',\n", " 'MOADJO Hachimia', 'MOHAMED Abderemane', 'MOHAMED Nadhir-Eddine',\n", " 'MOUSSA Faize', 'SAID Fatima', 'SAID Ramiati', 'SAÏD Latif',\n", " 'YOUSSOUF Ouldine'], dtype=object)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flat_T2[\"Eleve\"].unique()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "flat_AE = flat_T2[flat_T2[\"Eleve\"]=='ABDALLAH Elza']\n", "quest_AE = quest_T2[quest_T2[\"Eleve\"]=='ABDALLAH Elza']" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 567, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 573, dtype: object\n", "The note (2.5) is greated than the rating scale (2.0) at Note 2.5\n", "Niveau 0\n", "Bareme 2\n", "Name: 574, dtype: object\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] } ], "source": [ "es = term.students_pov(*digest_flat_df(flat_T2))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ABDALLAH Elza\n" ] }, { "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", "
NomMark_barem
0ConnT219,5 / 25
24DNB Blanc 123 / 50
48DS318 / 38
71DS59 / 20
\n", "
" ], "text/plain": [ " Nom Mark_barem\n", "0 ConnT2 19,5 / 25\n", "24 DNB Blanc 1 23 / 50\n", "48 DS3 18 / 38\n", "71 DS5 9 / 20" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAF+CAYAAADdiSCgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcVOW+P/DPcA8BcQbEC5AB4iVSRPKGFmpXu2yOaf52\nrxSzjmX77OMlEW+cNDU1UfdOzOOFvOSpyAztZu5EK4E0+Sm52YoieE2QmwMichlm/f7w55xGYJiZ\nXLfh894vXi9nrZl5Pq795JdnrWc9SyMIggAiIiKymZPcAYiIiNSKRZSIiMhOLKJERER2YhElIiKy\nE4soERGRnVhEiYiI7OQidwAiIiIpfPDBBzh+/Dg6duyI1atXN9svCAK2bt2KEydOwN3dHW+++SZC\nQkIsfidHokRE1C7ExsZi/vz5re4/ceIESkpK8P7772Pq1KnYsmVLm9/JIkpERO1C37594eXl1er+\nnJwcPPLII9BoNAgPD8fNmzdx/fp1i9/JIkpERASgsrISfn5+ptc6nQ6VlZUWP6OKa6L97n9U7gg2\nGdC1j9wRbPbnEf3kjmCzTw6flDuCTQK8feSOYLN6g0HuCDbrodPKHcEmxVXVckew2Xvfvyfad/+R\nf+9PXvzxHiaxjiqKKBERtQ8ajUa2trVaLcrLy02vKyoqoNVa/qWMp3OJiIgAREdH46effoIgCDh7\n9iw8PT3RqVMni5/hSJSIiBRDoxFvbPe3v/0Np06dwo0bN/DGG2/gxRdfhOH/X7J44oknMGDAABw/\nfhz/+Z//CTc3N7z55pttfieLKBERtQszZsywuF+j0eC1116z6TtZRImISDGcIN81UXuwiBIRkWLI\nObHIHiyiRESkGE4iXhMVA4soEREphtpGouoq+URERArCIkpERGQnns4lIiLF0HB2LhERkX04sYiI\niMhOaptYxCJKRESK4aSyIqqucTMREZGCsIgSERHZiadziYhIMTQqG9uxiBIRkWJwYhEREZGd1Dax\nSPQiOmnSpBZ/sxAEARqNBtu3bxc7AhERqQQXW7jLjh07xG6CiIhIFpKfzq2qqkJjY6PptZ+fn9QR\niIhIobhiUStycnKwY8cOXL9+HT4+PigvL0f37t2xZs0aqSIQERHdU5KV/LS0NCxbtgxdu3bF+vXr\nkZSUhJ49e0rVPBERqYBGo7H7Rw6SFVFnZ2d4e3tDEAQYjUZERESgqKhIquaJiEgFnDQau3/kINnp\n3A4dOqCurg59+vTB+++/j44dO8Ld3V2q5omISAU4O/cuJSUl0Ov1SEhIgJubG+Lj43H48GGUl5dj\nypQpYjdPREQkGtFP527btg2enp7w8PCAk5MTnJ2dERsbi0GDBuGzzz4Tu3kiIlIRJ42T3T9yEH0k\nWlVVheDg4Gbbg4ODUVZWJnbzRESkImpb9k/00n3z5s1W9zU0NIjdPBERkWhEL6IhISE4cOBAs+0Z\nGRkICQkRu3kiIlIRzs69y+TJk5GcnIzMzExT0SwsLITBYEBCQoLYzRMRkYpwdu5dfH19sXTpUuTl\n5eHy5csAgKioKERERIjdNBERkagku080IiKChZOIiCxS28QiPk+UiIgUg88TJSIispParomq65kz\nRERECsKRKBERKYbanieqrrREREQKwpEoEREpBmfnEhER2Ymzc4mIiOykttm5qiii3/38idwRHJ7+\n28NyR7BZYq+R8B0zQu4YDu2poX+WO4LtivhvhpqpbSTKiUVERER2YhElIiKykypO5xIRUfvA2blE\nRER2Uts1URZRIiJSDM7OJSIispPaRqKcWERERGQnFlEiIiI78XQuEREpBmfnEhER2Ult10RZRImI\nSDE4O5eIiMhOHIkSEREpUG5uLrZu3Qqj0YjRo0cjLi7ObH95eTnWr1+Pmzdvwmg04qWXXkJUVJTF\n72QRJSIixRBrYpHRaERqaioWLlwInU6HefPmITo6GoGBgab37N69G0OHDsUTTzyBK1euYPny5W0W\nUd7iQkREDu/cuXPo0qULAgIC4OLigmHDhuHYsWNm79FoNKitrQUA1NbWolOnTm1+L0eiRESkGGJd\nE62srIROpzO91ul0KCgoMHvP+PHjsXTpUnz33Xeor69HUlJSm9/LIkpERIoh532iWVlZiI2NxXPP\nPYezZ89i3bp1WL16NZycWj9py9O5RESkGJo/8D9LtFotKioqTK8rKiqg1WrN3nPw4EEMHToUABAe\nHo7GxkbcuHHD4veyiBIRkcMLDQ1FcXExSktLYTAYkJ2djejoaLP3+Pn5IS8vDwBw5coVNDY2wsfH\nx+L3SnY6V6/X45NPPsH169cxf/58XLlyBWfPnsWoUaOkikBERArnJNLZXGdnZ0yZMgXLli2D0WjE\nyJEjERQUhLS0NISGhiI6OhqTJk3Cxo0b8c033wAA3nzzzTZPL0tWRD/44APExsYiPT0dANC1a1es\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAF+CAYAAADdiSCgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcVOW+P/DPcA8BcQbEC5AB4iVSRPKGFmpXu2yOaf52\nrxSzjmX77OMlEW+cNDU1UfdOzOOFvOSpyAztZu5EK4E0+Sm52YoieE2QmwMichlm/f7w55xGYJiZ\nXLfh894vXi9nrZl5Pq795JdnrWc9SyMIggAiIiKymZPcAYiIiNSKRZSIiMhOLKJERER2YhElIiKy\nE4soERGRnVhEiYiI7OQidwAiIiIpfPDBBzh+/Dg6duyI1atXN9svCAK2bt2KEydOwN3dHW+++SZC\nQkIsfidHokRE1C7ExsZi/vz5re4/ceIESkpK8P7772Pq1KnYsmVLm9/JIkpERO1C37594eXl1er+\nnJwcPPLII9BoNAgPD8fNmzdx/fp1i9/JIkpERASgsrISfn5+ptc6nQ6VlZUWP6OKa6L97n9U7gg2\nGdC1j9wRbPbnEf3kjmCzTw6flDuCTQK8feSOYLN6g0HuCDbrodPKHcEmxVXVckew2Xvfvyfad/+R\nf+9PXvzxHiaxjiqKKBERtQ8ajUa2trVaLcrLy02vKyoqoNVa/qWMp3OJiIgAREdH46effoIgCDh7\n9iw8PT3RqVMni5/hSJSIiBRDoxFvbPe3v/0Np06dwo0bN/DGG2/gxRdfhOH/X7J44oknMGDAABw/\nfhz/+Z//CTc3N7z55pttfieLKBERtQszZsywuF+j0eC1116z6TtZRImISDGcIN81UXuwiBIRkWLI\nObHIHiyiRESkGE4iXhMVA4soEREphtpGouoq+URERArCIkpERGQnns4lIiLF0HB2LhERkX04sYiI\niMhOaptYxCJKRESK4aSyIqqucTMREZGCsIgSERHZiadziYhIMTQqG9uxiBIRkWJwYhEREZGd1Dax\nSPQiOmnSpBZ/sxAEARqNBtu3bxc7AhERqQQXW7jLjh07xG6CiIhIFpKfzq2qqkJjY6PptZ+fn9QR\niIhIobhiUStycnKwY8cOXL9+HT4+PigvL0f37t2xZs0aqSIQERHdU5KV/LS0NCxbtgxdu3bF+vXr\nkZSUhJ49e0rVPBERqYBGo7H7Rw6SFVFnZ2d4e3tDEAQYjUZERESgqKhIquaJiEgFnDQau3/kINnp\n3A4dOqCurg59+vTB+++/j44dO8Ld3V2q5omISAU4O/cuJSUl0Ov1SEhIgJubG+Lj43H48GGUl5dj\nypQpYjdPREQkGtFP527btg2enp7w8PCAk5MTnJ2dERsbi0GDBuGzzz4Tu3kiIlIRJ42T3T9yEH0k\nWlVVheDg4Gbbg4ODUVZWJnbzRESkImpb9k/00n3z5s1W9zU0NIjdPBERkWhEL6IhISE4cOBAs+0Z\nGRkICQkRu3kiIlIRzs69y+TJk5GcnIzMzExT0SwsLITBYEBCQoLYzRMRkYpwdu5dfH19sXTpUuTl\n5eHy5csAgKioKERERIjdNBERkagku080IiKChZOIiCxS28QiPk+UiIgUg88TJSIispParomq65kz\nRERECsKRKBERKYbanieqrrREREQKwpEoEREpBmfnEhER2Ymzc4mIiOykttm5qiii3/38idwRHJ7+\n28NyR7BZYq+R8B0zQu4YDu2poX+WO4LtivhvhpqpbSTKiUVERER2YhElIiKykypO5xIRUfvA2blE\nRER2Uts1URZRIiJSDM7OJSIispPaRqKcWERERGQnFlEiIiI78XQuEREpBmfnEhER2Ult10RZRImI\nSDE4O5eIiMhOHIkSEREpUG5uLrZu3Qqj0YjRo0cjLi7ObH95eTnWr1+Pmzdvwmg04qWXXkJUVJTF\n72QRJSIixRBrYpHRaERqaioWLlwInU6HefPmITo6GoGBgab37N69G0OHDsUTTzyBK1euYPny5W0W\nUd7iQkREDu/cuXPo0qULAgIC4OLigmHDhuHYsWNm79FoNKitrQUA1NbWolOnTm1+L0eiRESkGGJd\nE62srIROpzO91ul0KCgoMHvP+PHjsXTpUnz33Xeor69HUlJSm9/LIkpERIoh532iWVlZiI2NxXPP\nPYezZ89i3bp1WL16NZycWj9py9O5RESkGJo/8D9LtFotKioqTK8rKiqg1WrN3nPw4EEMHToUABAe\nHo7GxkbcuHHD4veyiBIRkcMLDQ1FcXExSktLYTAYkJ2djejoaLP3+Pn5IS8vDwBw5coVNDY2wsfH\nx+L3SnY6V6/X45NPPsH169cxf/58XLlyBWfPnsWoUaOkikBERArnJNLZXGdnZ0yZMgXLli2D0WjE\nyJEjERQUhLS0NISGhiI6OhqTJk3Cxo0b8c033wAA3nzzzTZPL0tWRD/44APExsYiPT0dANC1a1es\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def e_term(e):\n", " print(e.name)\n", " display(e.eval_df[[\"Nom\", \"Mark_barem\"]])\n", " display(e.heatmap_on_domain.figure)\n", "#interact(e_term, e = widgets.Dropdown(options = {e.name:e for e in es}))\n", "interact(e_term, e = widgets.Select(options = {e.name:e for e in es}))\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Trimestre 3" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] }, { "data": { "text/plain": [ "array(['DM3', 'Bbmars', 'ConnT3'], dtype=object)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flat_T3 = flat[flat[\"Trimestre\"] == 3]\n", "quest_T3, exo_T3, eval_T3 = digest_flat_df(flat_T3)\n", "flat_T3[\"Nom\"].unique()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## DM mars" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] } ], "source": [ "flat_DMmars = flat_T3[flat_T3[\"Nom\"]==\"DM3\"]\n", "quest_DMmars, exo_DMmars, eval_DMmars = digest_flat_df(flat_DMmars)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza7,5 / 11
1ABDALLAH Nourayina11 / 11
2ABDALLAH Roukia3,5 / 11
3ABOUDOU Faise1 / 11
4AHAMADI Laila9 / 11
5AHAMADI Satti9 / 11
6AHMED Nachmie4,5 / 11
7ALI ABDALLAH Raphael7 / 11
8ATTOUMANE Nasrati5,5 / 11
9ATTOUMANE Nedjima6,5 / 11
10DARKAOUI Issouf2,5 / 11
11DHOIMIR Hidayat3 / 11
12DJAMAL Hounaissati1 / 11
13DJANFAR Houmadi0 / 11
14FAIZ Aoufi Youssouf6 / 11
15HAMZA El-Hadji9 / 11
16HOUFRANE Soirta9 / 11
17IBRAHIM Rouiyati8 / 11
18ISSOUF Toifia6 / 11
19MOADJO Hachimia2 / 11
20MOHAMED Abderemane9 / 11
21MOHAMED Nadhir-Eddine10 / 11
22SAID Fatima7 / 11
23YOUSSOUF Ouldine7 / 11
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 7,5 / 11\n", "1 ABDALLAH Nourayina 11 / 11\n", "2 ABDALLAH Roukia 3,5 / 11\n", "3 ABOUDOU Faise 1 / 11\n", "4 AHAMADI Laila 9 / 11\n", "5 AHAMADI Satti 9 / 11\n", "6 AHMED Nachmie 4,5 / 11\n", "7 ALI ABDALLAH Raphael 7 / 11\n", "8 ATTOUMANE Nasrati 5,5 / 11\n", "9 ATTOUMANE Nedjima 6,5 / 11\n", "10 DARKAOUI Issouf 2,5 / 11\n", "11 DHOIMIR Hidayat 3 / 11\n", "12 DJAMAL Hounaissati 1 / 11\n", "13 DJANFAR Houmadi 0 / 11\n", "14 FAIZ Aoufi Youssouf 6 / 11\n", "15 HAMZA El-Hadji 9 / 11\n", "16 HOUFRANE Soirta 9 / 11\n", "17 IBRAHIM Rouiyati 8 / 11\n", "18 ISSOUF Toifia 6 / 11\n", "19 MOADJO Hachimia 2 / 11\n", "20 MOHAMED Abderemane 9 / 11\n", "21 MOHAMED Nadhir-Eddine 10 / 11\n", "22 SAID Fatima 7 / 11\n", "23 YOUSSOUF Ouldine 7 / 11" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eval_DMmars[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Travaux non rendus" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "print(\"\\n\".join(list(eval_DMmars[pd.isnull(eval_DMmars[\"Mark\"])][\"Eleve\"])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les élèves à revoir pour la géométrie" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "exo_geo = exo_DMmars[exo_DMmars[\"Exercice\"]==2]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1 ABDALLAH Elza\n", "5 ABDALLAH Roukia\n", "8 ABOUDOU Faise\n", "15 AHMED Nachmie\n", "19 ATTOUMANE Nasrati\n", "23 DARKAOUI Issouf\n", "26 DHOIMIR Hidayat\n", "29 DJAMAL Hounaissati\n", "32 DJANFAR Houmadi\n", "42 ISSOUF Toifia\n", "44 MOADJO Hachimia\n", "52 SAID Fatima\n", "Name: Eleve, dtype: object" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exo_geo[exo_geo[\"Normalized\"] <= 0.5][\"Eleve\"]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdoAAAFKCAYAAAC6gp7sAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADxRJREFUeJzt3V+IlHXbwPFrciu1cHO3LGbTHjaN0CwpxYoiUyswe4gO\nhERBD17wD4gdVOJBnhRItSjCynYQ1WlHgmV0EhTkibaJZmUKFsYWpqumpsnuzHsQRW9vOmPNNTM7\nfj5H/hl/XvdvZ/e79z3ObaFcLpcDAEhxVaMHAIBWJrQAkEhoASCR0AJAIqEFgERCCwCJhBYAErVl\nLTwwMFCztYrFYk3Xa1X2qTJ7VB37VB37VJ0rYZ+KxeJFf88ZLQAkEloASCS0AJBIaAEgkdACQCKh\nBYBEQgsAiYQWABJVdcOK1atXx+jRo+Oqq66KUaNGxcaNG7PnAoCWUPWdoTZs2BDjxo3LnAUAWo5L\nxwCQqOoz2ldeeSUiIh577LGYP39+2kAA0EoK5XK5XOlBg4OD0dHREadOnYqXX345li9fHlOnTq3H\nfABcwpEnZ9Z0vYnv767pelR5RtvR0REREe3t7TFr1qw4dOhQxdD633vqzz5VZo+qY5+q04r7lHE8\nrbhPf/Wv/vee8+fPx7lz5/748d69e2PSpEm1mw4AWljFM9pTp07F66+/HhERw8PD8dBDD8WMGTPS\nBwOAVlAxtDfffHO89tpr9ZgFAFqOt/cAQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdAC\nQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0\nAJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJ\nLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgUdWhLZVK8cIL\nL8TGjRsz5wGAllJ1aHfs2BFdXV2ZswBAy6kqtMePH4/+/v6YN29e9jwA0FKqCu3bb78dS5YsiUKh\nkD0PALSUtkoP+Oyzz6K9vT26u7tj//79VS9cLBb/1WDZ67Uq+1SZPaqOfapOo/fpSI3XyzqeRu9T\nI1UM7YEDB2L37t3x+eefx4ULF+LcuXOxZcuWWLNmzSX/3MDAQM2GLBaLNV2vVdmnyuxRdexTdVpx\nnzKOpxX36a8u9Y1ExdAuXrw4Fi9eHBER+/fvj+3bt1eMLADwG++jBYBEFc9o/2zatGkxbdq0rFkA\noOU4owWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgk\ntACQSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgAS\nCS0AJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAioQWA\nREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkCitkoPuHDhQmzYsCGGhoZieHg47r///li0aFE9\nZgOAEa9iaK+++urYsGFDjB49OoaGhuKll16KGTNmxB133FGP+QBgRKt46bhQKMTo0aMjImJ4eDiG\nh4ejUCikDwYAraDiGW1ERKlUihdffDF+/PHHeOKJJ2LKlCnZcwFASyiUy+VytQ8+e/ZsvP7667F8\n+fKYNGlS5lzAFejIkzNrttbE93fXbK1mVss9i7hy9q2eqjqj/d11110X06ZNiz179lQM7cDAwL8a\n7M+KxWJN12tV9qkye1SdVtineszfCvv0VxnH04r79FfFYvGiv1fxNdqff/45zp49GxG//QvkvXv3\nRldXV+2mA4AWVvGM9sSJE9Hb2xulUinK5XI88MADcd9999VjNgAY8SqG9rbbbotXX321HrMAQMtx\nZygASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsA\niYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdAC\nQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0\nAJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkaqv0gGPHjkVvb2+cPHkyCoVCzJ8/PxYsWFCP2QBg\nxKsY2lGjRsXSpUuju7s7zp07F+vWrYu77747br311nrMBwAjWsVLx+PHj4/u7u6IiBgzZkx0dXXF\n4OBg+mAA0Aou6zXao0ePxuHDh2Py5MlZ8wBAS6l46fh358+fj56enli2bFmMHTu24uOLxeK/Gixr\nvSNPzqzJOr+b+P7umq73b9V631vRlb5H1XwOHLmM9Wr5OXA5f28l9fo4N/r5VMs9i8g7nkbvUyNV\nFdqhoaHo6emJhx9+OGbPnl3VwgMDA/9qsD8rFos1Xa+WmmmuZt6nZmGPaq9Z97Mec7Xi8ynjeFpx\nn/7qUt9IVLx0XC6Xo6+vL7q6umLhwoU1HQwAWl3FM9oDBw7EJ598EpMmTYrnn38+IiKeffbZuPfe\ne9OHA4CRrmJo77zzznj33XfrMQsAtBx3hgKAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAi\noQWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgktACQ\nSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgASCS0A\nJBJaAEgktACQSGgBIJHQAkAioQWAREILAImEFgASCS0AJBJaAEgktACQSGgBIJHQAkCitkoP2Lp1\na/T390d7e3v09PTUYyYAaBkVz2jnzJkT69evr8csANByKoZ26tSpcf3119djFgBoOV6jBYBEFV+j\n/aeKxWLN1jry5MyarVVrzXScR2o0x0gy8f3dl/1nLvYxq/Xz7J/MdjHN/Dkw/D//bfQIf6sec/3T\nz7maPjdqttJvMr6mNePXplp+DCpJC+3AwEDW0k3lSjnOZnW5+18sFuv2MfPc4GKa+bnRzLPVUq2P\n81LfoLh0DACJKp7Rbt68Ob788ss4ffp0rFixIhYtWhRz586tx2wAMOJVDO3atWvrMQcAtCSXjgEg\nkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloA\nSCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQW\nABIJLQAkEloASCS0AJBIaAEgkdACQCKhBYBEQgsAiYQWABIJLQAkEloASCS0AJBIaAEgkdACQCKh\nBYBEQgsAiYQWABIJLQAkEloASCS0AJCorZoH7dmzJ956660olUoxb968ePrpp7PnAoCWUPGMtlQq\nxZtvvhnr16+PTZs2xaeffhrff/99PWYDgBGvYmgPHToUt9xyS9x8883R1tYWDz74YOzataseswHA\niFcxtIODg9HZ2fnHzzs7O2NwcDB1KABoFVW9RvtPFIvF2i32/u7ardXMrpTjbLCLPjebef+beTYa\nq5mfG808Wx1VPKPt6OiI48eP//Hz48ePR0dHR+pQANAqKob29ttvjx9++CGOHj0aQ0NDsXPnzpg5\nc2Y9ZgOAEa9QLpfLlR7U398f77zzTpRKpXj00UfjmWeeqcdsADDiVRVaAOCfcWcoAEgktACQKO3t\nPbXg1o+VHTt2LHp7e+PkyZNRKBRi/vz5sWDBgkaP1bRKpVKsW7cuOjo6Yt26dY0epymdPXs2+vr6\n4siRI1EoFGLlypVxxx13NHqspvPee+/FRx99FIVCISZOnBirVq2Ka665ptFjNdzWrVujv78/2tvb\no6enJyIizpw5E5s2bYqffvopbrrppnjuuefi+uuvb/Ck9dO0Z7Ru/VidUaNGxdKlS2PTpk3xyiuv\nxIcffmifLmHHjh3R1dXV6DGa2ltvvRUzZsyIzZs3x2uvvWa//sbg4GB88MEHsXHjxujp6YlSqRQ7\nd+5s9FhNYc6cObF+/fr/82vbtm2L6dOnx5YtW2L69Omxbdu2Bk3XGE0bWrd+rM748eOju7s7IiLG\njBkTXV1d7tx1EcePH4/+/v6YN29eo0dpWr/88kt89dVXMXfu3IiIaGtri+uuu67BUzWnUqkUFy5c\niOHh4bhw4UKMHz++0SM1halTp/6/s9Vdu3bFI488EhERjzzyyBX3tbxpLx3/3a0fDx482MCJmt/R\no0fj8OHDMXny5EaP0pTefvvtWLJkSZw7d67RozSto0ePxrhx42Lr1q3x3XffRXd3dyxbtixGjx7d\n6NGaSkdHRzz11FOxcuXKuOaaa+Kee+6Je+65p9FjNa1Tp0798Y3IDTfcEKdOnWrwRPXVtGe0XJ7z\n589HT09PLFu2LMaOHdvocZrOZ599Fu3t7X+c/fP3hoeH4/Dhw/H444/Hq6++Gtdee+0Vd5mvGmfO\nnIldu3ZFb29vvPHGG3H+/Pn45JNPGj3WiFAoFKJQKDR6jLpq2tC69WP1hoaGoqenJx5++OGYPXt2\no8dpSgcOHIjdu3fH6tWrY/PmzfHFF1/Eli1bGj1W0+ns7IzOzs6YMmVKRETcf//9cfjw4QZP1Xz2\n7dsXEyZMiHHjxkVbW1vMnj07vvnmm0aP1bTa29vjxIkTERFx4sSJGDduXIMnqq+mDa1bP1anXC5H\nX19fdHV1xcKFCxs9TtNavHhx9PX1RW9vb6xduzbuuuuuWLNmTaPHajo33HBDdHZ2xsDAQET8FpRb\nb721wVM1nxtvvDEOHjwYv/76a5TL5di3b59/NHYJM2fOjI8//jgiIj7++OOYNWtWgyeqr6a+M5Rb\nP1b29ddfx0svvRSTJk3643LMs88+G/fee2+DJ2te+/fvj+3bt3t7z0V8++230dfXF0NDQzFhwoRY\ntWrVFfVWjGq9++67sXPnzhg1alT85z//iRUrVsTVV1/d6LEabvPmzfHll1/G6dOno729PRYtWhSz\nZs2KTZs2xbFjx67It/c0dWgBYKRr2kvHANAKhBYAEgktACQSWgBIJLQAkEhoASCR0AJAIqEFgET/\nC8NFcfy4dKJeAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "eval_DMmars[\"Mark\"].hist(bins=np.linspace(0.,11.,22))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## BB mars" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/pandas/core/generic.py:3295: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._update_inplace(new_data)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:484: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Mark\"] = compute_marks(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:485: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Level\"] = compute_level(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:486: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Latex_rep\"] = compute_latex_rep(df)\n", "/home/lafrite/scripts/notes_analysis/notes_tools/tools/df_marks_manip.py:487: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " df[\"Normalized\"] = compute_normalized(df)\n" ] } ], "source": [ "flat_BBmars = flat_T3[flat_T3[\"Nom\"]==\"Bbmars\"]\n", "quest_BBmars, exo_BBmars, eval_BBmars = digest_flat_df(flat_BBmars)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 23.00\n", "mean 18.50\n", "std 5.39\n", "min 4.50\n", "25% 15.75\n", "50% 18.00\n", "75% 20.75\n", "max 27.50\n", "Name: Mark, dtype: float64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eval_BBmars[\"Mark\"].describe()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EleveMark_barem
0ABDALLAH Elza18 / 39
1ABDALLAH Nourayina17 / 39
2ABDALLAH Roukia15 / 39
3ABOUDOU Faise26,5 / 39
4AHAMADI Laila27,5 / 39
5AHAMADI Satti13 / 39
6AHMED Nachmie19 / 39
7ALI ABDALLAH Raphael20 / 39
8ATTOUMANE Nasrati21 / 39
9ATTOUMANE Nedjima20 / 39
10DARKAOUI Issouf15,5 / 39
11DHOIMIR Hidayat16 / 39
12DJAMAL Hounaissati15 / 39
13DJANFAR Houmadi4,5 / 39
14FAIZ Aoufi Youssouf10 / 39
15HAMZA El-Hadji20 / 39
16HOUFRANE Soirta16,5 / 39
17IBRAHIM Rouiyati26 / 39
18ISSOUF Toifia18 / 39
19MOADJO Hachimia17,5 / 39
20MOHAMED Abderemane25,5 / 39
21MOHAMED Nadhir-Eddine20,5 / 39
22YOUSSOUF Ouldine23,5 / 39
\n", "
" ], "text/plain": [ " Eleve Mark_barem\n", "0 ABDALLAH Elza 18 / 39\n", "1 ABDALLAH Nourayina 17 / 39\n", "2 ABDALLAH Roukia 15 / 39\n", "3 ABOUDOU Faise 26,5 / 39\n", "4 AHAMADI Laila 27,5 / 39\n", "5 AHAMADI Satti 13 / 39\n", "6 AHMED Nachmie 19 / 39\n", "7 ALI ABDALLAH Raphael 20 / 39\n", "8 ATTOUMANE Nasrati 21 / 39\n", "9 ATTOUMANE Nedjima 20 / 39\n", "10 DARKAOUI Issouf 15,5 / 39\n", "11 DHOIMIR Hidayat 16 / 39\n", "12 DJAMAL Hounaissati 15 / 39\n", "13 DJANFAR Houmadi 4,5 / 39\n", "14 FAIZ Aoufi Youssouf 10 / 39\n", "15 HAMZA El-Hadji 20 / 39\n", "16 HOUFRANE Soirta 16,5 / 39\n", "17 IBRAHIM Rouiyati 26 / 39\n", "18 ISSOUF Toifia 18 / 39\n", "19 MOADJO Hachimia 17,5 / 39\n", "20 MOHAMED Abderemane 25,5 / 39\n", "21 MOHAMED Nadhir-Eddine 20,5 / 39\n", "22 YOUSSOUF Ouldine 23,5 / 39" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eval_BBmars[[\"Eleve\", \"Mark_barem\"]]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/lafrite/.virtualenvs/enseignement/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\nMbzM49NPP3X6+/sdx3GcDz/80Fm7dq1F1ITxMpO+vr6hywcPHnR+9rOfJTpmQnmZieM4zqVLl5yV\nK1c6K1ascFpbWw2SJo6XmfzpT39yNm3aZJQw8bzMpKOjw1m6dKnT29vrOI7jXLhwwSJqQnh93Xzu\n/fffdxoaGuKea0QcpvZyys2CggJNnTo1Jf5kyss87rvvPo0dO1aSNG3atGFnRUs2XmaSlZU1dLm/\nvz/ptxUvM5GkxsZGff3rX1d6erpBysTyOpNU4mUmH3/8sebNm6fs7GxJ0oQJEyyiJsTNbiP79u3T\n1772tbjnGhGHqa91ys3Tp08bJrJ1s/PYs2eP7r///kREM+N1Jh988IF27typgYEBrVy5MpERE87L\nTNra2tTZ2amZM2fqD3/4Q6IjJpzX7eTAgQM6ceKEJk2apMWLFys/Pz+RMRPKy0w6OjokST/5yU8U\niUT0jW98I2l/p9zM79f//Oc/On/+vO6777645xoRe8a4dXv37lVbW5ueeuop6ygjQmVlpdavX6/n\nn39ev/vd76zjmIpEIvrNb36jb37zm9ZRRpSysjI1NDRo9erVmjFjhhoaGqwjmYtEIjp79qzq6ur0\n+uuv61e/+pX6+vqsY5nbt2+fysvLNWZM/KtyRJSxl1NuphKv8zhy5Ih+//vfa9myZUl/CPJmt5FU\nODzpNpP+/n61t7frpz/9qV599VWdPn1a9fX1+utf/2oRNyG8bCc5OTlDr5eKigq1tbUlNGOieT2l\ncSgUUlpamgoKCjRp0iSdPXs20VET4mZ+l+zfv18PPfRQQnKNiDL2csrNVOJlHmfOnNGvf/1rLVu2\nLKnf3/mcl5l88ZdHS0uLJk2alOiYCeU2k6ysLG3evFkNDQ1qaGjQtGnTtGzZsqT+NLWX7aSnp2fo\ncjgcTvpP3HuZyVe/+tWhTw9fvHhRZ8+eTdqzKHrtm3/961/q6+vT9OnTE5JrRLxn7Pf79eKLL+rN\nN98cOuVmUVFR1Ck3W1tbtXr1avX19emTTz7Rjh07tHbtWuvoceFlHu+++676+/uHZpCfn6/ly5cb\nJ48fLzP54IMP9Omnn8rv9ys7O1uvvvqqdey48jKTVONlJrt27VI4HB7aTqqrq61jx5WXmXzlK1/R\nX/7yF/3gBz/QmDFj9MILLyTtf/bj9XWzb98+zZ49O2EfBOV0mAAAGBsRh6kBAEhllDEAAMYoYwAA\njFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAICx/wfR4J+tYLxouwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "eval_BBmars[\"Normalized\"].hist(bins = 20)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "extensions": { "jupyter_dashboards": { "activeView": "report_default", "version": 1, "views": { "grid_default": { "cellMargin": 10, "defaultCellHeight": 20, "maxColumns": 12, "name": "grid", "type": "grid" }, "report_default": { "name": "report", "type": "report" } } } }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.0" }, "widgets": { "state": { "d97f7e8e574e4afbb01a828a05feb445": { "views": [ { "cell_index": 27 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 1 }