{
"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": [
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 18 / 38 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 12 / 38 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 9,5 / 38 | \n",
"
\n",
" \n",
" 3 | \n",
" AHAMADI Laila | \n",
" 21,5 / 38 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Satti | \n",
" 19,5 / 38 | \n",
"
\n",
" \n",
" 5 | \n",
" AHMED Nachmie | \n",
" 15,5 / 38 | \n",
"
\n",
" \n",
" 6 | \n",
" ALI ABDALLAH Raphael | \n",
" 15,5 / 38 | \n",
"
\n",
" \n",
" 7 | \n",
" ATTOUMANE Nasrati | \n",
" 21 / 38 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nedjima | \n",
" 22 / 38 | \n",
"
\n",
" \n",
" 9 | \n",
" DARKAOUI Issouf | \n",
" 10,5 / 38 | \n",
"
\n",
" \n",
" 10 | \n",
" DHOIMIR Hidayat | \n",
" 15 / 38 | \n",
"
\n",
" \n",
" 11 | \n",
" DJAMAL Hounaissati | \n",
" 9,5 / 38 | \n",
"
\n",
" \n",
" 12 | \n",
" DJANFAR Houmadi | \n",
" 4 / 38 | \n",
"
\n",
" \n",
" 13 | \n",
" FAIZ Aoufi Youssouf | \n",
" 10,5 / 38 | \n",
"
\n",
" \n",
" 14 | \n",
" HAMZA El-Hadji | \n",
" 20,5 / 38 | \n",
"
\n",
" \n",
" 15 | \n",
" HOUFRANE Soirta | \n",
" 19 / 38 | \n",
"
\n",
" \n",
" 16 | \n",
" IBRAHIM Rouiyati | \n",
" 17 / 38 | \n",
"
\n",
" \n",
" 17 | \n",
" ISSOUF Toifia | \n",
" 18 / 38 | \n",
"
\n",
" \n",
" 18 | \n",
" MOADJO Hachimia | \n",
" 11,5 / 38 | \n",
"
\n",
" \n",
" 19 | \n",
" MOHAMED Abderemane | \n",
" 20,5 / 38 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 21 / 38 | \n",
"
\n",
" \n",
" 21 | \n",
" SAID Fatima | \n",
" 23,5 / 38 | \n",
"
\n",
" \n",
" 22 | \n",
" YOUSSOUF Ouldine | \n",
" 17 / 38 | \n",
"
\n",
" \n",
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 9 / 20 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 6 / 20 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 8 / 20 | \n",
"
\n",
" \n",
" 3 | \n",
" AHAMADI Laila | \n",
" 11,5 / 20 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Satti | \n",
" 8 / 20 | \n",
"
\n",
" \n",
" 5 | \n",
" AHAMED El-Fahad | \n",
" 7 / 20 | \n",
"
\n",
" \n",
" 6 | \n",
" AHMED Nachmie | \n",
" 8 / 20 | \n",
"
\n",
" \n",
" 7 | \n",
" ALI ABDALLAH Raphael | \n",
" 6,5 / 20 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nasrati | \n",
" 8,5 / 20 | \n",
"
\n",
" \n",
" 9 | \n",
" ATTOUMANE Nedjima | \n",
" 12,5 / 20 | \n",
"
\n",
" \n",
" 10 | \n",
" DARKAOUI Issouf | \n",
" 13 / 20 | \n",
"
\n",
" \n",
" 11 | \n",
" DHOIMIR Hidayat | \n",
" 9,5 / 20 | \n",
"
\n",
" \n",
" 12 | \n",
" DJAMAL Hounaissati | \n",
" 6,5 / 20 | \n",
"
\n",
" \n",
" 13 | \n",
" DJANFAR Houmadi | \n",
" 5 / 20 | \n",
"
\n",
" \n",
" 14 | \n",
" FAIZ Aoufi Youssouf | \n",
" 7,5 / 20 | \n",
"
\n",
" \n",
" 15 | \n",
" HAMZA El-Hadji | \n",
" 11,5 / 20 | \n",
"
\n",
" \n",
" 16 | \n",
" HOUFRANE Soirta | \n",
" 10 / 20 | \n",
"
\n",
" \n",
" 17 | \n",
" IBRAHIM Rouiyati | \n",
" 11 / 20 | \n",
"
\n",
" \n",
" 18 | \n",
" ISSOUF Toifia | \n",
" 8 / 20 | \n",
"
\n",
" \n",
" 19 | \n",
" MOADJO Hachimia | \n",
" 6,5 / 20 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Abderemane | \n",
" 9 / 20 | \n",
"
\n",
" \n",
" 21 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 11 / 20 | \n",
"
\n",
" \n",
" 22 | \n",
" SAID Fatima | \n",
" 11,5 / 20 | \n",
"
\n",
" \n",
" 23 | \n",
" YOUSSOUF Ouldine | \n",
" 11 / 20 | \n",
"
\n",
" \n",
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 16 / 20 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 11 / 20 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 10 / 20 | \n",
"
\n",
" \n",
" 3 | \n",
" AHAMADI Laila | \n",
" 16,5 / 20 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Satti | \n",
" 11 / 20 | \n",
"
\n",
" \n",
" 5 | \n",
" AHAMED El-Fahad | \n",
" 9 / 20 | \n",
"
\n",
" \n",
" 6 | \n",
" AHMED Nachmie | \n",
" 10 / 20 | \n",
"
\n",
" \n",
" 7 | \n",
" ALI ABDALLAH Raphael | \n",
" 10,5 / 20 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nasrati | \n",
" 18 / 20 | \n",
"
\n",
" \n",
" 9 | \n",
" ATTOUMANE Nedjima | \n",
" 15,5 / 20 | \n",
"
\n",
" \n",
" 10 | \n",
" DARKAOUI Issouf | \n",
" 13 / 20 | \n",
"
\n",
" \n",
" 11 | \n",
" DHOIMIR Hidayat | \n",
" 8 / 20 | \n",
"
\n",
" \n",
" 12 | \n",
" DJAMAL Hounaissati | \n",
" 6 / 20 | \n",
"
\n",
" \n",
" 13 | \n",
" DJANFAR Houmadi | \n",
" 2,5 / 20 | \n",
"
\n",
" \n",
" 14 | \n",
" FAIZ Aoufi Youssouf | \n",
" 6,5 / 20 | \n",
"
\n",
" \n",
" 15 | \n",
" HAMZA El-Hadji | \n",
" 13 / 20 | \n",
"
\n",
" \n",
" 16 | \n",
" HOUFRANE Soirta | \n",
" 13,5 / 20 | \n",
"
\n",
" \n",
" 17 | \n",
" IBRAHIM Rouiyati | \n",
" 13 / 20 | \n",
"
\n",
" \n",
" 18 | \n",
" ISSOUF Toifia | \n",
" 9 / 20 | \n",
"
\n",
" \n",
" 19 | \n",
" MOADJO Hachimia | \n",
" 11,5 / 20 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Abderemane | \n",
" 13,5 / 20 | \n",
"
\n",
" \n",
" 21 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 18,5 / 20 | \n",
"
\n",
" \n",
" 22 | \n",
" SAID Fatima | \n",
" 16,5 / 20 | \n",
"
\n",
" \n",
" 23 | \n",
" YOUSSOUF Ouldine | \n",
" 13 / 20 | \n",
"
\n",
" \n",
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 23 / 50 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 10 / 50 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 13 / 50 | \n",
"
\n",
" \n",
" 3 | \n",
" AHAMADI Laila | \n",
" 17 / 50 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Satti | \n",
" 18,5 / 50 | \n",
"
\n",
" \n",
" 5 | \n",
" AHAMED El-Fahad | \n",
" 16 / 50 | \n",
"
\n",
" \n",
" 6 | \n",
" AHMED Nachmie | \n",
" 19 / 50 | \n",
"
\n",
" \n",
" 7 | \n",
" ALI ABDALLAH Raphael | \n",
" 18 / 50 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nasrati | \n",
" 22 / 50 | \n",
"
\n",
" \n",
" 9 | \n",
" ATTOUMANE Nedjima | \n",
" 21 / 50 | \n",
"
\n",
" \n",
" 10 | \n",
" DARKAOUI Issouf | \n",
" 26,5 / 50 | \n",
"
\n",
" \n",
" 11 | \n",
" DHOIMIR Hidayat | \n",
" 14 / 50 | \n",
"
\n",
" \n",
" 12 | \n",
" DJAMAL Hounaissati | \n",
" 14 / 50 | \n",
"
\n",
" \n",
" 13 | \n",
" DJANFAR Houmadi | \n",
" 13 / 50 | \n",
"
\n",
" \n",
" 14 | \n",
" FAIZ Aoufi Youssouf | \n",
" 15 / 50 | \n",
"
\n",
" \n",
" 15 | \n",
" HAMZA El-Hadji | \n",
" 29 / 50 | \n",
"
\n",
" \n",
" 16 | \n",
" HOUFRANE Soirta | \n",
" 26 / 50 | \n",
"
\n",
" \n",
" 17 | \n",
" IBRAHIM Rouiyati | \n",
" 18 / 50 | \n",
"
\n",
" \n",
" 18 | \n",
" ISSOUF Toifia | \n",
" 19 / 50 | \n",
"
\n",
" \n",
" 19 | \n",
" MOADJO Hachimia | \n",
" 18 / 50 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Abderemane | \n",
" 29 / 50 | \n",
"
\n",
" \n",
" 21 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 22 / 50 | \n",
"
\n",
" \n",
" 22 | \n",
" SAID Fatima | \n",
" 20 / 50 | \n",
"
\n",
" \n",
" 23 | \n",
" YOUSSOUF Ouldine | \n",
" 26 / 50 | \n",
"
\n",
" \n",
"
\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",
" Nom | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ConnT2 | \n",
" 19,5 / 25 | \n",
"
\n",
" \n",
" 24 | \n",
" DNB Blanc 1 | \n",
" 23 / 50 | \n",
"
\n",
" \n",
" 48 | \n",
" DS3 | \n",
" 18 / 38 | \n",
"
\n",
" \n",
" 71 | \n",
" DS5 | \n",
" 9 / 20 | \n",
"
\n",
" \n",
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 7,5 / 11 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 11 / 11 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 3,5 / 11 | \n",
"
\n",
" \n",
" 3 | \n",
" ABOUDOU Faise | \n",
" 1 / 11 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Laila | \n",
" 9 / 11 | \n",
"
\n",
" \n",
" 5 | \n",
" AHAMADI Satti | \n",
" 9 / 11 | \n",
"
\n",
" \n",
" 6 | \n",
" AHMED Nachmie | \n",
" 4,5 / 11 | \n",
"
\n",
" \n",
" 7 | \n",
" ALI ABDALLAH Raphael | \n",
" 7 / 11 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nasrati | \n",
" 5,5 / 11 | \n",
"
\n",
" \n",
" 9 | \n",
" ATTOUMANE Nedjima | \n",
" 6,5 / 11 | \n",
"
\n",
" \n",
" 10 | \n",
" DARKAOUI Issouf | \n",
" 2,5 / 11 | \n",
"
\n",
" \n",
" 11 | \n",
" DHOIMIR Hidayat | \n",
" 3 / 11 | \n",
"
\n",
" \n",
" 12 | \n",
" DJAMAL Hounaissati | \n",
" 1 / 11 | \n",
"
\n",
" \n",
" 13 | \n",
" DJANFAR Houmadi | \n",
" 0 / 11 | \n",
"
\n",
" \n",
" 14 | \n",
" FAIZ Aoufi Youssouf | \n",
" 6 / 11 | \n",
"
\n",
" \n",
" 15 | \n",
" HAMZA El-Hadji | \n",
" 9 / 11 | \n",
"
\n",
" \n",
" 16 | \n",
" HOUFRANE Soirta | \n",
" 9 / 11 | \n",
"
\n",
" \n",
" 17 | \n",
" IBRAHIM Rouiyati | \n",
" 8 / 11 | \n",
"
\n",
" \n",
" 18 | \n",
" ISSOUF Toifia | \n",
" 6 / 11 | \n",
"
\n",
" \n",
" 19 | \n",
" MOADJO Hachimia | \n",
" 2 / 11 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Abderemane | \n",
" 9 / 11 | \n",
"
\n",
" \n",
" 21 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 10 / 11 | \n",
"
\n",
" \n",
" 22 | \n",
" SAID Fatima | \n",
" 7 / 11 | \n",
"
\n",
" \n",
" 23 | \n",
" YOUSSOUF Ouldine | \n",
" 7 / 11 | \n",
"
\n",
" \n",
"
\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",
" Eleve | \n",
" Mark_barem | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" ABDALLAH Elza | \n",
" 18 / 39 | \n",
"
\n",
" \n",
" 1 | \n",
" ABDALLAH Nourayina | \n",
" 17 / 39 | \n",
"
\n",
" \n",
" 2 | \n",
" ABDALLAH Roukia | \n",
" 15 / 39 | \n",
"
\n",
" \n",
" 3 | \n",
" ABOUDOU Faise | \n",
" 26,5 / 39 | \n",
"
\n",
" \n",
" 4 | \n",
" AHAMADI Laila | \n",
" 27,5 / 39 | \n",
"
\n",
" \n",
" 5 | \n",
" AHAMADI Satti | \n",
" 13 / 39 | \n",
"
\n",
" \n",
" 6 | \n",
" AHMED Nachmie | \n",
" 19 / 39 | \n",
"
\n",
" \n",
" 7 | \n",
" ALI ABDALLAH Raphael | \n",
" 20 / 39 | \n",
"
\n",
" \n",
" 8 | \n",
" ATTOUMANE Nasrati | \n",
" 21 / 39 | \n",
"
\n",
" \n",
" 9 | \n",
" ATTOUMANE Nedjima | \n",
" 20 / 39 | \n",
"
\n",
" \n",
" 10 | \n",
" DARKAOUI Issouf | \n",
" 15,5 / 39 | \n",
"
\n",
" \n",
" 11 | \n",
" DHOIMIR Hidayat | \n",
" 16 / 39 | \n",
"
\n",
" \n",
" 12 | \n",
" DJAMAL Hounaissati | \n",
" 15 / 39 | \n",
"
\n",
" \n",
" 13 | \n",
" DJANFAR Houmadi | \n",
" 4,5 / 39 | \n",
"
\n",
" \n",
" 14 | \n",
" FAIZ Aoufi Youssouf | \n",
" 10 / 39 | \n",
"
\n",
" \n",
" 15 | \n",
" HAMZA El-Hadji | \n",
" 20 / 39 | \n",
"
\n",
" \n",
" 16 | \n",
" HOUFRANE Soirta | \n",
" 16,5 / 39 | \n",
"
\n",
" \n",
" 17 | \n",
" IBRAHIM Rouiyati | \n",
" 26 / 39 | \n",
"
\n",
" \n",
" 18 | \n",
" ISSOUF Toifia | \n",
" 18 / 39 | \n",
"
\n",
" \n",
" 19 | \n",
" MOADJO Hachimia | \n",
" 17,5 / 39 | \n",
"
\n",
" \n",
" 20 | \n",
" MOHAMED Abderemane | \n",
" 25,5 / 39 | \n",
"
\n",
" \n",
" 21 | \n",
" MOHAMED Nadhir-Eddine | \n",
" 20,5 / 39 | \n",
"
\n",
" \n",
" 22 | \n",
" YOUSSOUF Ouldine | \n",
" 23,5 / 39 | \n",
"
\n",
" \n",
"
\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": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAFKCAYAAAAuZDceAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGMNJREFUeJzt3W9Mlff9//HX8QBSBA0HhvUgmkE1bWlcKyeT2rWxpVFS\nm65pOk1pnVvb79bR1bJmKjObZMm6JfhnjYrpMo121hu4LEu2WlubOmKiw3iKzvonKsNtbOgcf5wM\nJQrn+t1oyq8nqNelnnPecM7zcetwzodzXufNdXh5Xedw6XMcxxEAADAzxjoAAACpjjIGAMAYZQwA\ngDHKGAAAY5QxAADGKGMAAIxRxgAAGEuzfPCOjg7XNcFg0NO6VMJMhmMm0ZjHcMxkOGYyXLxnEgwG\nr3k9e8YAABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIx5PulHJBJRbW2tAoGA\namtro267evWqNmzYoLa2NuXk5KimpkYFBQUxDwsAQDLyvGf8/vvvq7Cw8Jq37dmzR+PGjdP69es1\nf/58bd++PWYBAQBIdp7KuKurSy0tLaqoqLjm7eFwWHPmzJEklZeX6+jRo3IcJ2YhAQBIZp7KeOvW\nrXrhhRfk8/mueXt3d7fy8vIkSX6/X1lZWert7Y1dSgAAkpjre8affPKJJkyYoOLiYh07diymD369\nE2bf6rpUwkyGYybRmMf/1z4/pPYY32fRznCM79EG28lwFjNxLeOTJ08qHA7r0KFDunLlii5fvqx1\n69ZpyZIlQ2sCgYC6urqUl5enwcFBXbp0STk5Oa4Pzv/adGuYyXDMJBrziL9kmC/byXBW/2uTaxlX\nVVWpqqpKknTs2DH98Y9/jCpiSSorK1NTU5OmT5+u5uZmlZaWXveQNgAAiHbLf2fc2NiocPizwzSP\nPfaY/ve//+m1117Te++9p+effz5mAQEASHae/85YkkpLS1VaWipJWrhw4dD1GRkZeuONN2KbDACA\nFMEZuAAAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYA\nwBhlDACAMcoYAABjlDEAAMYoYwAAjFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAA\nxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMBYmtuCK1euqK6uTgMDAxocHFR5ebkWLFgQtaapqUnb\ntm1TIBCQJFVWVqqioiI+iQEASDKuZZyenq66ujplZmZqYGBAK1eu1P3336/p06dHrZs9e7Zeeuml\nuAUFACBZuR6m9vl8yszMlCQNDg5qcHBQPp8v7sEAAEgVrnvGkhSJRLR8+XKdO3dO8+bN07Rp04at\nOXDggE6cOKFJkyZp8eLFys/Pj3lYAACSkc9xHMfr4r6+Pq1evVrf/va3NWXKlKHre3t7lZmZqfT0\ndH300Ufav3+/6urq4hIYAG5W+/xQzO+zaGc45veJ1OVpz/hz48aNU2lpqQ4fPhxVxjk5OUOXKyoq\n9O6773q6v46ODtc1wWDQ07pUwkyGYybRmEf8JcN82U6Gi/dMgsHgNa93fc/44sWL6uvrk/TZJ6uP\nHDmiwsLCqDU9PT1Dl8PhsCZPnnw7WQEASCmue8Y9PT1qaGhQJBKR4zh68MEHVVZWpsbGRpWUlCgU\nCmnXrl0Kh8Py+/3Kzs5WdXV1IrIDAJAUXMt46tSpqq+vH3b9woULhy5XVVWpqqoqtskAAEgRnIEL\nAABjlDEAAMYoYwAAjFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAAxihjAACMUcYA\nABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYA\nwBhlDACAMcoYAABjlDEAAMYoYwAAjKW5Lbhy5Yrq6uo0MDCgwcFBlZeXa8GCBVFrrl69qg0bNqit\nrU05OTmqqalRQUFB3EIDAJBMXPeM09PTVVdXp1WrVqm+vl6HDx/WqVOnotbs2bNH48aN0/r16zV/\n/nxt3749boEBAEg2rmXs8/mUmZkpSRocHNTg4KB8Pl/UmnA4rDlz5kiSysvLdfToUTmOE/u0AAAk\nIdfD1JIUiUS0fPlynTt3TvPmzdO0adOibu/u7lZeXp4kye/3KysrS729vRo/fvwN7zcYDHoK6XVd\nKmEmwyXrTNrnh27+e+KQI5GKdoZjen/xmEeybG/J8jxiyWImnsp4zJgxWrVqlfr6+rR69Wr94x//\n0JQpU277wTs6OlzXBINBT+tSCTMZjpkkl9HwsxwNGd3wuhku3jO5XtHf1Kepx40bp9LSUh0+fDjq\n+kAgoK6uLkmfHcq+dOmScnJybjEqAACpxbWML168qL6+PkmffbL6yJEjKiwsjFpTVlampqYmSVJz\nc7NKS0uHva8MAACuzfUwdU9PjxoaGhSJROQ4jh588EGVlZWpsbFRJSUlCoVCeuyxx7Rhwwa99tpr\nys7OVk1NTSKyAwCQFFzLeOrUqaqvrx92/cKFC4cuZ2Rk6I033ohtMgAAUgRn4AIAwBhlDACAMcoY\nAABjlDEAAMYoYwAAjFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAAxihjAACMUcYA\nABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYA\nwBhlDACAsTS3BZ2dnWpoaNCFCxfk8/n0+OOP64knnohac+zYMdXX16ugoECSNGvWLD377LPxSQwA\nQJJxLWO/369FixapuLhYly9fVm1trWbMmKHJkydHrbvnnntUW1sbt6AAACQr18PUubm5Ki4uliTd\ncccdKiwsVHd3d9yDAQCQKlz3jL/o/PnzOnPmjO66665ht506dUpLly5Vbm6uFi1apKKiopiFBAAg\nmfkcx3G8LOzv71ddXZ2eeeYZzZo1K+q2S5cuacyYMcrMzFRLS4u2bt2qdevWxSUwkGra54esIyRc\n0c5wTO8vHjOMdUakNk97xgMDA1qzZo0efvjhYUUsSVlZWUOXZ86cqc2bN+vixYsaP378De+3o6PD\n9bGDwaCndamEmQzHTJLLaPhZjoaMbnjdDBfvmQSDwWte7/qeseM4evvtt1VYWKgnn3zymmsuXLig\nz3ewW1tbFYlElJOTcxtxAQBIHa57xidPntTevXs1ZcoULV26VJL03HPPqbOzU5I0d+5cNTc3a/fu\n3fL7/crIyFBNTY18Pl98kwMAkCRcy/juu+/Wjh07brimsrJSlZWVMQsFAEAq4QxcAAAYo4wBADBG\nGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAAxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMAYZQwAgDHK\nGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYAwBhlDACAMcoYAABjlDEAAMYoYwAAjFHG\nAAAYo4wBADBGGQMAYCzNbUFnZ6caGhp04cIF+Xw+Pf7443riiSei1jiOoy1btujQoUMaO3asqqur\nVVxcHLfQAAAkE9cy9vv9WrRokYqLi3X58mXV1tZqxowZmjx58tCaQ4cO6dy5c1q3bp1Onz6tTZs2\n6ec//3lcgwMAkCxcD1Pn5uYO7eXecccdKiwsVHd3d9SacDisRx55RD6fT9OnT1dfX596enrikxgA\ngCTjumf8RefPn9eZM2d01113RV3f3d2t/Pz8oa/z8vLU3d2t3NzcG95fMBj09Lhe16USZjJcss6k\n3TqAgVj/LOMxw2TZ3iyfR/v8kNljX88Xt5WineGEPa7nMu7v79eaNWv0rW99S1lZWTF58I6ODtc1\nwWDQ07pUwkyGYybJZTT8LEdDRje8bm4sHrO53j9+PH2aemBgQGvWrNHDDz+sWbNmDbs9EAios7Nz\n6Ouuri4FAoFbjAoAQGpxLWPHcfT222+rsLBQTz755DXXhEIh7d27V47j6NSpU8rKynI9RA0AAD7j\nepj65MmT2rt3r6ZMmaKlS5dKkp577rmhPeG5c+fqgQceUEtLi5YsWaKMjAxVV1fHNzUAAEnEtYzv\nvvtu7dix44ZrfD6fXn755ZiFAgAglXAGLgAAjFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAIAxyhgA\nAGOUMQAAxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIxRxgAA\nGKOMAQAwRhkDAGCMMgYAwBhlDACAMcoYAABjlDEAAMYoYwAAjFHGAAAYS3NbsHHjRrW0tGjChAla\ns2bNsNuPHTum+vp6FRQUSJJmzZqlZ599NvZJAQBIUq5lPGfOHFVWVqqhoeG6a+655x7V1tbGNBgA\nAKnC9TD1vffeq+zs7ERkAQAgJbnuGXtx6tQpLV26VLm5uVq0aJGKiopicbcAAKSE2y7jL3/5y9q4\ncaMyMzPV0tKiVatWad26dZ6+NxgMxnRdKmEmwyXrTNqtAxiI9c8yHjNMlu3N8nmM9G07kbO57TLO\nysoaujxz5kxt3rxZFy9e1Pjx412/t6Ojw3VNMBj0tC6VMJPhmElyGQ0/y9GQ0Q2vmxuLx2yuV/C3\n/adNFy5ckOM4kqTW1lZFIhHl5OTc7t0CAJAyXPeM33rrLR0/fly9vb165ZVXtGDBAg0MDEiS5s6d\nq+bmZu3evVt+v18ZGRmqqamRz+eLe3AAAJKFaxnX1NTc8PbKykpVVlbGLBAAAKmGM3ABAGCMMgYA\nwBhlDACAMcoYAABjlDEAAMYoYwAAjFHGAAAYo4wBADBGGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAA\nxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAw\nRhkDAGCMMgYAwBhlDACAsTS3BRs3blRLS4smTJigNWvWDLvdcRxt2bJFhw4d0tixY1VdXa3i4uK4\nhAUAIBm57hnPmTNHK1asuO7thw4d0rlz57Ru3Tp95zvf0aZNm2IaEACAZOdaxvfee6+ys7Ove3s4\nHNYjjzwin8+n6dOnq6+vTz09PTENCQBAMrvt94y7u7uVn58/9HVeXp66u7tv924BAEgZru8Zx1Mw\nGIzZuvb5oduNM0zRznDM7zNWvM7uZsV6jomc4a3OZKQ/5/aY3tvoMPh/T1lHcBXrjDHfbjxs1zez\nbcXjtTzSt+14/Z69ltsu40AgoM7OzqGvu7q6FAgEPH1vR0eH65pgMOhpXTxYPa4by5ncrETlHEkz\nGSk5MLqM9O1mpOeLh3g85+sV/G0fpg6FQtq7d68cx9GpU6eUlZWl3Nzc271bAABShuue8VtvvaXj\nx4+rt7dXr7zyihYsWKCBgQFJ0ty5c/XAAw+opaVFS5YsUUZGhqqrq+MeGgCAZOJaxjU1NTe83efz\n6eWXX45ZIAAAUg1n4AIAwBhlDACAMcoYAABjlDEAAMYoYwAAjFHGAAAYo4wBADBGGQMAYIwyBgDA\nGGUMAIAxyhgAAGOUMQAAxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMAYZQwAgDHKGAAAY5QxAADG\nKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYAwBhlDACAMcoYAABjaV4WHT58WFu2bFEkElFFRYWefvrp\nqNubmpq0bds2BQIBSVJlZaUqKipinxYAgCTkWsaRSESbN2/Wj3/8Y+Xl5elHP/qRQqGQJk+eHLVu\n9uzZeumll+IWFACAZOV6mLq1tVV33nmnJk6cqLS0NM2ePVsHDx5MRDYAAFKC655xd3e38vLyhr7O\ny8vT6dOnh607cOCATpw4oUmTJmnx4sXKz893ffBgMOgppJd17Z7u6eZ4zWchXtliPcdEzvBWH2uk\nP+d4bNsYeUb6dhOP1/JI37YT+fvL03vGbsrKyvTQQw8pPT1dH330kRoaGlRXV+f6fR0dHa5rgsGg\np3XxYPW4bixncrMSlXMkzWSk5MDoMtK3m5GeLx7i8ZyvV/Cuh6kDgYC6urqGvu7q6hr6oNbncnJy\nlJ6eLkmqqKhQW1vb7WQFACCluJZxSUmJzp49q/Pnz2tgYED79+9XKBSKWtPT0zN0ORwOD/twFwAA\nuD7Xw9R+v18vvvii3nzzTUUiET366KMqKipSY2OjSkpKFAqFtGvXLoXDYfn9fmVnZ6u6ujoR2QEA\nSAqe3jOeOXOmZs6cGXXdwoULhy5XVVWpqqoqtskAAEgRnIELAABjlDEAAMYoYwAAjFHGAAAYo4wB\nADBGGQMAYIwyBgDAGGUMAIAxyhgAAGOUMQAAxihjAACMUcYAABijjAEAMEYZAwBgjDIGAMAYZQwA\ngDHKGAAAY5QxAADGKGMAAIxRxgAAGKOMAQAwRhkDAGCMMgYAwBhlDACAMcoYAABjlDEAAMbSvCw6\nfPiwtmzZokgkooqKCj399NNRt1+9elUbNmxQW1ubcnJyVFNTo4KCgrgEBgAg2bjuGUciEW3evFkr\nVqzQL3/5S+3bt0///Oc/o9bs2bNH48aN0/r16zV//nxt3749boEBAEg2rmXc2tqqO++8UxMnTlRa\nWppmz56tgwcPRq0Jh8OaM2eOJKm8vFxHjx6V4zhxCQwAQLJxLePu7m7l5eUNfZ2Xl6fu7u7rrvH7\n/crKylJvb2+MowIAkJw8vWccL8FgMHbrdoZvM83o4nV2N20Uz/GWZzLSn/NIz4eRaTRsN6MhY4K4\n7hkHAgF1dXUNfd3V1aVAIHDdNYODg7p06ZJycnJiHBUAgOTkWsYlJSU6e/aszp8/r4GBAe3fv1+h\nUChqTVlZmZqamiRJzc3NKi0tlc/ni0tgAACSjc/x8EmrlpYWvfPOO4pEInr00Uf1zDPPqLGxUSUl\nJQqFQrpy5Yo2bNigM2fOKDs7WzU1NZo4cWIi8gMAMOp5KmMAABA/nIELAABjlDEAAMZM/7Tpi9xO\nuXn8+HG98847+vvf/66amhqVl5cbJU0Mt3m89957+vjjj+X3+zV+/Hh973vf05e+9CWjtInhNpPd\nu3frww8/1JgxY5SZmanvfve7mjx5slHaxHCbyeeam5u1du1a/eIXv1BJSUmCUyaW20yampq0bdu2\nob8KqaysVEVFhUXUhPGynezfv1+//e1v5fP5NHXqVL3++usGSRPDbR5bt27VsWPHJElXrlzRf//7\nX23dujW+oZwRYHBw0Pn+97/vnDt3zrl69arzwx/+0Glvb49a8+9//9v529/+5qxfv97585//bJQ0\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
}