{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import xlsxwriter" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from repytex.worksheets.worksheet import pull_datas\n", "from repytex.reports.eval import pull_datas as pull_sqlite\n", "import pandas as pd\n", "import numpy as np\n", "import sqlite3" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "conn = sqlite3.connect('./recopytex.db')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# to xlxs" ] }, { "cell_type": "code", "execution_count": 180, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'evaluation': id name term t_id\n", " 0 1 DS1 mise en jambe 1 1,\n", " 'exercises': id name eval_id date comment\n", " 0 1 1 - Prendre la température 1 2017-09-05 00:00:00.000000 \n", " 1 2 2 - Maladroite! 1 2017-09-05 00:00:00.000000 ,\n", " 'question_scores': id question_id student_id value\n", " 0 1 1 1 1\n", " 1 2 2 1 2\n", " 2 3 3 1 .\n", " 3 4 1 2 2\n", " 4 5 2 2 2\n", " 5 6 3 2 1\n", " 6 7 1 3 3\n", " 7 8 2 3 0\n", " 8 9 3 3 0\n", " 9 10 1 4 3\n", " 10 11 2 4 3\n", " 11 12 3 4 0\n", " 12 13 1 5 1\n", " 13 14 2 5 2\n", " 14 15 3 5 .\n", " 15 16 1 6 3\n", " 16 17 2 6 2\n", " 17 18 3 6 0\n", " 18 19 1 7 2\n", " 19 20 2 7 2\n", " 20 21 3 7 2\n", " 21 22 1 9 2\n", " 22 23 2 9 1\n", " 23 24 3 9 2\n", " 24 25 1 8 3\n", " 25 26 2 8 1\n", " 26 27 3 8 .\n", " 27 28 1 10 1\n", " 28 29 2 10 2\n", " 29 30 3 10 0\n", " .. ... ... ... ...\n", " 178 803 4 21 .\n", " 179 804 5 21 .\n", " 180 805 6 21 .\n", " 181 806 7 21 .\n", " 182 807 8 21 .\n", " 183 808 4 22 0\n", " 184 809 5 22 .\n", " 185 810 6 22 .\n", " 186 811 7 22 .\n", " 187 812 8 22 .\n", " 188 813 4 23 3\n", " 189 814 5 23 1\n", " 190 815 6 23 1\n", " 191 816 7 23 1\n", " 192 817 8 23 1\n", " 193 818 4 25 .\n", " 194 819 5 25 .\n", " 195 820 6 25 .\n", " 196 821 7 25 .\n", " 197 822 8 25 1\n", " 198 823 4 24 3\n", " 199 824 5 24 3\n", " 200 825 6 24 3\n", " 201 826 7 24 2\n", " 202 827 8 24 2\n", " 203 828 4 26 3\n", " 204 829 5 26 3\n", " 205 830 6 26 3\n", " 206 831 7 26 3\n", " 207 832 8 26 3\n", " \n", " [200 rows x 4 columns],\n", " 'questions': id name score_rate is_leveled exercise_id competence domain \\\n", " 0 1 1 0 1 1 Cher Grandeurs \n", " 1 2 2 0 1 1 Cal Grandeurs \n", " 2 3 2.c 0 1 1 Cal Grandeurs \n", " 0 4 0 1 2 Cher 4opérations \n", " 1 5 0 1 2 Cher 4opérations \n", " 2 6 0 1 2 Rai 4opérations \n", " 3 7 0 1 2 Cal 4opérations \n", " 4 8 0 1 2 Com 4opérations \n", " \n", " comment \n", " 0 Lecture du thermomètre \n", " 1 Suivre programme de calculs \n", " 2 Renverser un programme de calculs \n", " 0 Lire le tableau et le graphique \n", " 1 Décomposer le problème \n", " 2 Manipuler les grandeurs \n", " 3 Mener à bien les calculs \n", " 4 Rédaction ,\n", " 'students': id name surname mail commment tribe_id\n", " 0 1 ABDALLAH ALLAOUI Taiassima None 1\n", " 1 2 ADANI Ismou None 1\n", " 2 3 AHAMADA Dhoulkamal None 1\n", " 3 4 AHAMADI Asbahati None 1\n", " 4 5 AHAMADI OUSSENI Ansufiddine None 1\n", " 5 6 AHAMED Fayadhi None 1\n", " 6 7 AHMED SAID Hadaïta None 1\n", " 7 8 ALI MADI Anissa None 1\n", " 8 9 ALI Raydel None 1\n", " 9 10 ATTOUMANE ALI Fatima None 1\n", " 10 11 BACHIROU Elzame None 1\n", " 11 12 BINALI Zalida None 1\n", " 12 13 BOINA Abdillah Mze Limassi None 1\n", " 13 14 BOUDRA Zaankidine None 1\n", " 14 15 BOURA Kayssoiria None 1\n", " 15 16 HALADI Asna None 1\n", " 16 17 HALIDI Soibrata None 1\n", " 17 18 HAMEDALY Doulkifly None 1\n", " 18 19 IBRAHIM Nassur None 1\n", " 19 20 INOUSSA Anchoura None 1\n", " 20 21 MOHAMED Nadia None 1\n", " 21 22 MOUHOUDHOIRE Izak None 1\n", " 22 23 MOUSSRI Bakari None 1\n", " 23 24 SAÏD Fatoumia None 1\n", " 24 25 SAKOTRA Claudiana None 1\n", " 25 26 TOUFAIL Salahou None 1\n", " 26 76 Ibrahim Chaharzade None 1,\n", " 'tribe': id name grade\n", " 0 1 302 3e}" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datas = pull_datas(1, conn)\n", "datas" ] }, { "cell_type": "code", "execution_count": 181, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'DS1 mise en jambe'" ] }, "execution_count": 181, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datas['evaluation'][\"name\"][0]" ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": true }, "outputs": [], "source": [ "q_df = datas[\"questions\"]\n", "q_df = q_df.assign(\n", " Nom = q_df[[\"name\", \"comment\"]].apply(lambda x: \" \".join(x), 1)\n", ")" ] }, { "cell_type": "code", "execution_count": 183, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamescore_rateis_leveledexercise_idcompetencedomaincommentNom
011011CherGrandeursLecture du thermomètre1 Lecture du thermomètre
122011CalGrandeursSuivre programme de calculs2 Suivre programme de calculs
232.c011CalGrandeursRenverser un programme de calculs2.c Renverser un programme de calculs
04012Cher4opérationsLire le tableau et le graphiqueLire le tableau et le graphique
15012Cher4opérationsDécomposer le problèmeDécomposer le problème
\n", "
" ], "text/plain": [ " id name score_rate is_leveled exercise_id competence domain \\\n", "0 1 1 0 1 1 Cher Grandeurs \n", "1 2 2 0 1 1 Cal Grandeurs \n", "2 3 2.c 0 1 1 Cal Grandeurs \n", "0 4 0 1 2 Cher 4opérations \n", "1 5 0 1 2 Cher 4opérations \n", "\n", " comment Nom \n", "0 Lecture du thermomètre 1 Lecture du thermomètre \n", "1 Suivre programme de calculs 2 Suivre programme de calculs \n", "2 Renverser un programme de calculs 2.c Renverser un programme de calculs \n", "0 Lire le tableau et le graphique Lire le tableau et le graphique \n", "1 Décomposer le problème Décomposer le problème " ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q_df.head()" ] }, { "cell_type": "code", "execution_count": 184, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnameeval_iddatecomment
011 - Prendre la température12017-09-05 00:00:00.000000
122 - Maladroite!12017-09-05 00:00:00.000000
\n", "
" ], "text/plain": [ " id name eval_id date comment\n", "0 1 1 - Prendre la température 1 2017-09-05 00:00:00.000000 \n", "1 2 2 - Maladroite! 1 2017-09-05 00:00:00.000000 " ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datas[\"exercises\"]" ] }, { "cell_type": "code", "execution_count": 185, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ex_q = q_df.groupby(\"exercise_id\")\\\n", " .agg({\"score_rate\": np.sum, \"competence\": lambda x: '-'.join(list(x))}) \\\n", " .merge(datas[\"exercises\"], left_index=True, right_on='id')\n", "ex_q = ex_q.assign(\n", " Nom = ex_q[\"name\"].apply(lambda x: f\"Ex {x}\"),\n", " exercise_id = ex_q[\"id\"]\n", ")\n", "#ex_q" ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sel_fields = ['Nom', 'competence', 'score_rate', 'exercise_id']\n", "xls_df = pd.concat([ex_q[sel_fields], q_df[sel_fields]]).sort_values(\"exercise_id\")\n", "#xls_df" ] }, { "cell_type": "code", "execution_count": 187, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#writer = pd.ExcelWriter(\"./test.xlsx\", engine=\"xlsxwriter\")\n", "#xls_df.to_excel(writer, index=False, sheet_name='DNB blanc 2')" ] }, { "cell_type": "code", "execution_count": 188, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#workbook = writer.book\n", "#worksheet = writer.sheets['DNB blanc 2']" ] }, { "cell_type": "code", "execution_count": 189, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#first_line_format = workbook.add_format({\"align\": 'center', \"rotation\":90})\n", "\n", "#worksheet.set_column('A:D', 20)\n" ] }, { "cell_type": "code", "execution_count": 190, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#writer.save()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## From xlsx" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
competenceBarèmeABDALLAH ALLAOUI TaiassimaADANI IsmouAHAMADA DhoulkamalAHAMADI AsbahatiAHAMADI OUSSENI AnsufiddineAHAMED FayadhiAHMED SAID HadaitaALI MADI Anissa...MOUSSRI BakariSAID FatoumiaSAKOTRA ClaudianaTOUFAIL SalahoumoyenneMinQ1MEQ3Max
DNB blanc 2 généralNaN1122452.046.56527.025.57572...40506058.543.40384621.027.12541.2556.87575.0
Ex 1 - Programme de calculsNaN15311.03.001.00.0310...2072.04.0192310.01.2503.006.87511.0
1 et 2 Suivre le programmeCal636.02.000.00.026...0021.02.6923080.00.2502.005.7506.0
3 Renverser le programmeRai303.00.000.00.000...0020.00.5961540.00.0000.001.1253.0
4 Toujours la même choseRai302.00.000.00.003...0000.00.1923080.00.0000.000.0003.0
\n", "

5 rows × 35 columns

\n", "
" ], "text/plain": [ " competence Barème ABDALLAH ALLAOUI Taiassima \\\n", "DNB blanc 2 général NaN 112 24 \n", "Ex 1 - Programme de calculs NaN 15 3 \n", "1 et 2 Suivre le programme Cal 6 3 \n", "3 Renverser le programme Rai 3 0 \n", "4 Toujours la même chose Rai 3 0 \n", "\n", " ADANI Ismou AHAMADA Dhoulkamal \\\n", "DNB blanc 2 général 52.0 46.5 \n", "Ex 1 - Programme de calculs 11.0 3.0 \n", "1 et 2 Suivre le programme 6.0 2.0 \n", "3 Renverser le programme 3.0 0.0 \n", "4 Toujours la même chose 2.0 0.0 \n", "\n", " AHAMADI Asbahati AHAMADI OUSSENI Ansufiddine \\\n", "DNB blanc 2 général 65 27.0 \n", "Ex 1 - Programme de calculs 0 1.0 \n", "1 et 2 Suivre le programme 0 0.0 \n", "3 Renverser le programme 0 0.0 \n", "4 Toujours la même chose 0 0.0 \n", "\n", " AHAMED Fayadhi AHMED SAID Hadaita \\\n", "DNB blanc 2 général 25.5 75 \n", "Ex 1 - Programme de calculs 0.0 3 \n", "1 et 2 Suivre le programme 0.0 2 \n", "3 Renverser le programme 0.0 0 \n", "4 Toujours la même chose 0.0 0 \n", "\n", " ALI MADI Anissa ... MOUSSRI Bakari \\\n", "DNB blanc 2 général 72 ... 40 \n", "Ex 1 - Programme de calculs 10 ... 2 \n", "1 et 2 Suivre le programme 6 ... 0 \n", "3 Renverser le programme 0 ... 0 \n", "4 Toujours la même chose 3 ... 0 \n", "\n", " SAID Fatoumia SAKOTRA Claudiana \\\n", "DNB blanc 2 général 50 60 \n", "Ex 1 - Programme de calculs 0 7 \n", "1 et 2 Suivre le programme 0 2 \n", "3 Renverser le programme 0 2 \n", "4 Toujours la même chose 0 0 \n", "\n", " TOUFAIL Salahou moyenne Min Q1 ME \\\n", "DNB blanc 2 général 58.5 43.403846 21.0 27.125 41.25 \n", "Ex 1 - Programme de calculs 2.0 4.019231 0.0 1.250 3.00 \n", "1 et 2 Suivre le programme 1.0 2.692308 0.0 0.250 2.00 \n", "3 Renverser le programme 0.0 0.596154 0.0 0.000 0.00 \n", "4 Toujours la même chose 0.0 0.192308 0.0 0.000 0.00 \n", "\n", " Q3 Max \n", "DNB blanc 2 général 56.875 75.0 \n", "Ex 1 - Programme de calculs 6.875 11.0 \n", "1 et 2 Suivre le programme 5.750 6.0 \n", "3 Renverser le programme 1.125 3.0 \n", "4 Toujours la même chose 0.000 3.0 \n", "\n", "[5 rows x 35 columns]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_excel(\"./DNB_blanc2/DNB2_302.xlsx\")\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On enlève les colonnes inutiles et on format les prénoms" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import unicodedata\n", "def normalize_str(s):\n", " return unicodedata.normalize('NFD', s).encode('ascii', 'ignore').lower()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b'abdallah allaoui taiassima'b'adani ismou'b'ahamada dhoulkamal'b'ahamadi asbahati'b'ahamadi ousseni ansufiddine'b'ahamed fayadhi'b'ahmed said hadaita'b'ali madi anissa'b'ali raydel'b'attoumane ali fatima'...b'hamedaly doulkifly'b'ibrahim chaharzade'b'ibrahim nassur'b'inoussa anchoura'b'mohamed nadia'b'mouhoudhoire izak'b'moussri bakari'b'said fatoumia'b'sakotra claudiana'b'toufail salahou'
DNB blanc 2 général2452.046.56527.025.5757245.526.0...23.549.042.5NaN27.53740506058.5
Ex 1 - Programme de calculs311.03.001.00.03109.06.5...2.04.57.5NaN2.552072.0
1 et 2 Suivre le programme36.02.000.00.0266.05.0...2.03.06.0NaN1.040021.0
3 Renverser le programme03.00.000.00.0003.01.5...0.00.01.5NaN0.000020.0
4 Toujours la même chose02.00.000.00.0030.00.0...0.00.00.0NaN0.000000.0
\n", "

5 rows × 27 columns

\n", "
" ], "text/plain": [ " b'abdallah allaoui taiassima' b'adani ismou' \\\n", "DNB blanc 2 général 24 52.0 \n", "Ex 1 - Programme de calculs 3 11.0 \n", "1 et 2 Suivre le programme 3 6.0 \n", "3 Renverser le programme 0 3.0 \n", "4 Toujours la même chose 0 2.0 \n", "\n", " b'ahamada dhoulkamal' b'ahamadi asbahati' \\\n", "DNB blanc 2 général 46.5 65 \n", "Ex 1 - Programme de calculs 3.0 0 \n", "1 et 2 Suivre le programme 2.0 0 \n", "3 Renverser le programme 0.0 0 \n", "4 Toujours la même chose 0.0 0 \n", "\n", " b'ahamadi ousseni ansufiddine' \\\n", "DNB blanc 2 général 27.0 \n", "Ex 1 - Programme de calculs 1.0 \n", "1 et 2 Suivre le programme 0.0 \n", "3 Renverser le programme 0.0 \n", "4 Toujours la même chose 0.0 \n", "\n", " b'ahamed fayadhi' b'ahmed said hadaita' \\\n", "DNB blanc 2 général 25.5 75 \n", "Ex 1 - Programme de calculs 0.0 3 \n", "1 et 2 Suivre le programme 0.0 2 \n", "3 Renverser le programme 0.0 0 \n", "4 Toujours la même chose 0.0 0 \n", "\n", " b'ali madi anissa' b'ali raydel' \\\n", "DNB blanc 2 général 72 45.5 \n", "Ex 1 - Programme de calculs 10 9.0 \n", "1 et 2 Suivre le programme 6 6.0 \n", "3 Renverser le programme 0 3.0 \n", "4 Toujours la même chose 3 0.0 \n", "\n", " b'attoumane ali fatima' ... \\\n", "DNB blanc 2 général 26.0 ... \n", "Ex 1 - Programme de calculs 6.5 ... \n", "1 et 2 Suivre le programme 5.0 ... \n", "3 Renverser le programme 1.5 ... \n", "4 Toujours la même chose 0.0 ... \n", "\n", " b'hamedaly doulkifly' b'ibrahim chaharzade' \\\n", "DNB blanc 2 général 23.5 49.0 \n", "Ex 1 - Programme de calculs 2.0 4.5 \n", "1 et 2 Suivre le programme 2.0 3.0 \n", "3 Renverser le programme 0.0 0.0 \n", "4 Toujours la même chose 0.0 0.0 \n", "\n", " b'ibrahim nassur' b'inoussa anchoura' \\\n", "DNB blanc 2 général 42.5 NaN \n", "Ex 1 - Programme de calculs 7.5 NaN \n", "1 et 2 Suivre le programme 6.0 NaN \n", "3 Renverser le programme 1.5 NaN \n", "4 Toujours la même chose 0.0 NaN \n", "\n", " b'mohamed nadia' b'mouhoudhoire izak' \\\n", "DNB blanc 2 général 27.5 37 \n", "Ex 1 - Programme de calculs 2.5 5 \n", "1 et 2 Suivre le programme 1.0 4 \n", "3 Renverser le programme 0.0 0 \n", "4 Toujours la même chose 0.0 0 \n", "\n", " b'moussri bakari' b'said fatoumia' \\\n", "DNB blanc 2 général 40 50 \n", "Ex 1 - Programme de calculs 2 0 \n", "1 et 2 Suivre le programme 0 0 \n", "3 Renverser le programme 0 0 \n", "4 Toujours la même chose 0 0 \n", "\n", " b'sakotra claudiana' b'toufail salahou' \n", "DNB blanc 2 général 60 58.5 \n", "Ex 1 - Programme de calculs 7 2.0 \n", "1 et 2 Suivre le programme 2 1.0 \n", "3 Renverser le programme 2 0.0 \n", "4 Toujours la même chose 0 0.0 \n", "\n", "[5 rows x 27 columns]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.drop(['competence', 'Barème','moyenne',\n", " 'Min', 'Q1', 'ME', 'Q3', 'Max'], 1)\n", "df.columns = [normalize_str(i) for i in df.columns]\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DNB blanc 2 général 52.0\n", "Ex 1 - Programme de calculs 11.0\n", "1 et 2 Suivre le programme 6.0\n", "3 Renverser le programme 3.0\n", "4 Toujours la même chose 2.0\n", "4 Développer F 0.0\n", "Ex 2 - Choix de piste 4.0\n", "1 Fraction réponse 4.0\n", "1 Notation et vocabulaire 0.0\n", "2 Arbre de probabilité 0.0\n", "Ex 3 - Réduction sur les cahiers 4.0\n", "1 et 2 Raisonnement pour choisir 1.0\n", "1 et 2 Décomposer le problème 2.0\n", "1 et 2 Choix des opérations et calculs 1.0\n", "3 Composition des réductions 0.0\n", "Ex 4 - Athlétisme 9.0\n", "1 Logique de la réponse 3.0\n", "1 Calculs des indicateurs 2.0\n", "1 Clarté des explications 1.0\n", "2 Calculs 1.5\n", "2 Validité des réponses 1.5\n", "2 Tests des possibilités 0.0\n", "Ex 5 - Géométrie 14.0\n", " Reconnaitre les théorèmes 5.0\n", " Validité des calculs 5.0\n", " Suivi du raisonnement géométrique 4.0\n", "Ex 6 - Confitures 0.0\n", "1 Quantité de sucre 0.0\n", "2 Calcul du volume 0.0\n", "2 Nombre de pots 0.0\n", "3 Dessin de l'étiquette 0.0\n", "3 Mise à l'echelle 0.0\n", "3 Longueur de l'étiquette 0.0\n", "Ex Présentation 10.0\n", " Présentation 10.0\n", "Name: b'adani ismou', dtype: float64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[b\"adani ismou\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On enlèves les lignes calculées par excel pour ne garder que les données" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b'abdallah allaoui taiassima'b'adani ismou'b'ahamada dhoulkamal'b'ahamadi asbahati'b'ahamadi ousseni ansufiddine'b'ahamed fayadhi'b'ahmed said hadaita'b'ali madi anissa'b'ali raydel'b'attoumane ali fatima'...b'hamedaly doulkifly'b'ibrahim chaharzade'b'ibrahim nassur'b'inoussa anchoura'b'mohamed nadia'b'mouhoudhoire izak'b'moussri bakari'b'said fatoumia'b'sakotra claudiana'b'toufail salahou'
1 et 2 Suivre le programme36.02.000.00.0266.05.0...2.03.06.0NaN1.040021.0
3 Renverser le programme03.00.000.00.0003.01.5...0.00.01.5NaN0.000020.0
4 Toujours la même chose02.00.000.00.0030.00.0...0.00.00.0NaN0.000000.0
4 Développer F00.01.001.00.0110.00.0...0.01.50.0NaN1.512031.0
1 Fraction réponse44.04.043.04.0444.04.0...3.04.04.0NaN4.044444.0
\n", "

5 rows × 27 columns

\n", "
" ], "text/plain": [ " b'abdallah allaoui taiassima' b'adani ismou' \\\n", "1 et 2 Suivre le programme 3 6.0 \n", "3 Renverser le programme 0 3.0 \n", "4 Toujours la même chose 0 2.0 \n", "4 Développer F 0 0.0 \n", "1 Fraction réponse 4 4.0 \n", "\n", " b'ahamada dhoulkamal' b'ahamadi asbahati' \\\n", "1 et 2 Suivre le programme 2.0 0 \n", "3 Renverser le programme 0.0 0 \n", "4 Toujours la même chose 0.0 0 \n", "4 Développer F 1.0 0 \n", "1 Fraction réponse 4.0 4 \n", "\n", " b'ahamadi ousseni ansufiddine' b'ahamed fayadhi' \\\n", "1 et 2 Suivre le programme 0.0 0.0 \n", "3 Renverser le programme 0.0 0.0 \n", "4 Toujours la même chose 0.0 0.0 \n", "4 Développer F 1.0 0.0 \n", "1 Fraction réponse 3.0 4.0 \n", "\n", " b'ahmed said hadaita' b'ali madi anissa' \\\n", "1 et 2 Suivre le programme 2 6 \n", "3 Renverser le programme 0 0 \n", "4 Toujours la même chose 0 3 \n", "4 Développer F 1 1 \n", "1 Fraction réponse 4 4 \n", "\n", " b'ali raydel' b'attoumane ali fatima' \\\n", "1 et 2 Suivre le programme 6.0 5.0 \n", "3 Renverser le programme 3.0 1.5 \n", "4 Toujours la même chose 0.0 0.0 \n", "4 Développer F 0.0 0.0 \n", "1 Fraction réponse 4.0 4.0 \n", "\n", " ... b'hamedaly doulkifly' \\\n", "1 et 2 Suivre le programme ... 2.0 \n", "3 Renverser le programme ... 0.0 \n", "4 Toujours la même chose ... 0.0 \n", "4 Développer F ... 0.0 \n", "1 Fraction réponse ... 3.0 \n", "\n", " b'ibrahim chaharzade' b'ibrahim nassur' \\\n", "1 et 2 Suivre le programme 3.0 6.0 \n", "3 Renverser le programme 0.0 1.5 \n", "4 Toujours la même chose 0.0 0.0 \n", "4 Développer F 1.5 0.0 \n", "1 Fraction réponse 4.0 4.0 \n", "\n", " b'inoussa anchoura' b'mohamed nadia' \\\n", "1 et 2 Suivre le programme NaN 1.0 \n", "3 Renverser le programme NaN 0.0 \n", "4 Toujours la même chose NaN 0.0 \n", "4 Développer F NaN 1.5 \n", "1 Fraction réponse NaN 4.0 \n", "\n", " b'mouhoudhoire izak' b'moussri bakari' \\\n", "1 et 2 Suivre le programme 4 0 \n", "3 Renverser le programme 0 0 \n", "4 Toujours la même chose 0 0 \n", "4 Développer F 1 2 \n", "1 Fraction réponse 4 4 \n", "\n", " b'said fatoumia' b'sakotra claudiana' \\\n", "1 et 2 Suivre le programme 0 2 \n", "3 Renverser le programme 0 2 \n", "4 Toujours la même chose 0 0 \n", "4 Développer F 0 3 \n", "1 Fraction réponse 4 4 \n", "\n", " b'toufail salahou' \n", "1 et 2 Suivre le programme 1.0 \n", "3 Renverser le programme 0.0 \n", "4 Toujours la même chose 0.0 \n", "4 Développer F 1.0 \n", "1 Fraction réponse 4.0 \n", "\n", "[5 rows x 27 columns]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df[list(~df.reset_index()[\"index\"].apply(lambda x: x.startswith(\"Ex\") or x.startswith(\"DNB\")))]\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexb'abdallah allaoui taiassima'b'adani ismou'b'ahamada dhoulkamal'b'ahamadi asbahati'b'ahamadi ousseni ansufiddine'b'ahamed fayadhi'b'ahmed said hadaita'b'ali madi anissa'b'ali raydel'...b'hamedaly doulkifly'b'ibrahim chaharzade'b'ibrahim nassur'b'inoussa anchoura'b'mohamed nadia'b'mouhoudhoire izak'b'moussri bakari'b'said fatoumia'b'sakotra claudiana'b'toufail salahou'
01 et 2 Suivre le programme36.02.000.00.0266.0...2.03.06.0NaN1.040021.0
13 Renverser le programme03.00.000.00.0003.0...0.00.01.5NaN0.000020.0
24 Toujours la même chose02.00.000.00.0030.0...0.00.00.0NaN0.000000.0
34 Développer F00.01.001.00.0110.0...0.01.50.0NaN1.512031.0
41 Fraction réponse44.04.043.04.0444.0...3.04.04.0NaN4.044444.0
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " index b'abdallah allaoui taiassima' b'adani ismou' \\\n", "0 1 et 2 Suivre le programme 3 6.0 \n", "1 3 Renverser le programme 0 3.0 \n", "2 4 Toujours la même chose 0 2.0 \n", "3 4 Développer F 0 0.0 \n", "4 1 Fraction réponse 4 4.0 \n", "\n", " b'ahamada dhoulkamal' b'ahamadi asbahati' b'ahamadi ousseni ansufiddine' \\\n", "0 2.0 0 0.0 \n", "1 0.0 0 0.0 \n", "2 0.0 0 0.0 \n", "3 1.0 0 1.0 \n", "4 4.0 4 3.0 \n", "\n", " b'ahamed fayadhi' b'ahmed said hadaita' b'ali madi anissa' \\\n", "0 0.0 2 6 \n", "1 0.0 0 0 \n", "2 0.0 0 3 \n", "3 0.0 1 1 \n", "4 4.0 4 4 \n", "\n", " b'ali raydel' ... b'hamedaly doulkifly' \\\n", "0 6.0 ... 2.0 \n", "1 3.0 ... 0.0 \n", "2 0.0 ... 0.0 \n", "3 0.0 ... 0.0 \n", "4 4.0 ... 3.0 \n", "\n", " b'ibrahim chaharzade' b'ibrahim nassur' b'inoussa anchoura' \\\n", "0 3.0 6.0 NaN \n", "1 0.0 1.5 NaN \n", "2 0.0 0.0 NaN \n", "3 1.5 0.0 NaN \n", "4 4.0 4.0 NaN \n", "\n", " b'mohamed nadia' b'mouhoudhoire izak' b'moussri bakari' \\\n", "0 1.0 4 0 \n", "1 0.0 0 0 \n", "2 0.0 0 0 \n", "3 1.5 1 2 \n", "4 4.0 4 4 \n", "\n", " b'said fatoumia' b'sakotra claudiana' b'toufail salahou' \n", "0 0 2 1.0 \n", "1 0 2 0.0 \n", "2 0 0 0.0 \n", "3 0 3 1.0 \n", "4 4 4 4.0 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.reset_index()\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexb'abdallah allaoui taiassima'b'adani ismou'b'ahamada dhoulkamal'b'ahamadi asbahati'b'ahamadi ousseni ansufiddine'b'ahamed fayadhi'b'ahmed said hadaita'b'ali madi anissa'b'ali raydel'...b'ibrahim chaharzade'b'ibrahim nassur'b'inoussa anchoura'b'mohamed nadia'b'mouhoudhoire izak'b'moussri bakari'b'said fatoumia'b'sakotra claudiana'b'toufail salahou'q_name
01 et 2 Suivre le programme36.02.000.00.0266.0...3.06.0NaN1.040021.0b'1 et 2 suivre le programme'
13 Renverser le programme03.00.000.00.0003.0...0.01.5NaN0.000020.0b'3 renverser le programme'
24 Toujours la même chose02.00.000.00.0030.0...0.00.0NaN0.000000.0b'4 toujours la meme chose'
34 Développer F00.01.001.00.0110.0...1.50.0NaN1.512031.0b'4 developper f'
41 Fraction réponse44.04.043.04.0444.0...4.04.0NaN4.044444.0b'1 fraction reponse'
\n", "

5 rows × 29 columns

\n", "
" ], "text/plain": [ " index b'abdallah allaoui taiassima' b'adani ismou' \\\n", "0 1 et 2 Suivre le programme 3 6.0 \n", "1 3 Renverser le programme 0 3.0 \n", "2 4 Toujours la même chose 0 2.0 \n", "3 4 Développer F 0 0.0 \n", "4 1 Fraction réponse 4 4.0 \n", "\n", " b'ahamada dhoulkamal' b'ahamadi asbahati' b'ahamadi ousseni ansufiddine' \\\n", "0 2.0 0 0.0 \n", "1 0.0 0 0.0 \n", "2 0.0 0 0.0 \n", "3 1.0 0 1.0 \n", "4 4.0 4 3.0 \n", "\n", " b'ahamed fayadhi' b'ahmed said hadaita' b'ali madi anissa' \\\n", "0 0.0 2 6 \n", "1 0.0 0 0 \n", "2 0.0 0 3 \n", "3 0.0 1 1 \n", "4 4.0 4 4 \n", "\n", " b'ali raydel' ... b'ibrahim chaharzade' \\\n", "0 6.0 ... 3.0 \n", "1 3.0 ... 0.0 \n", "2 0.0 ... 0.0 \n", "3 0.0 ... 1.5 \n", "4 4.0 ... 4.0 \n", "\n", " b'ibrahim nassur' b'inoussa anchoura' b'mohamed nadia' \\\n", "0 6.0 NaN 1.0 \n", "1 1.5 NaN 0.0 \n", "2 0.0 NaN 0.0 \n", "3 0.0 NaN 1.5 \n", "4 4.0 NaN 4.0 \n", "\n", " b'mouhoudhoire izak' b'moussri bakari' b'said fatoumia' \\\n", "0 4 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 1 2 0 \n", "4 4 4 4 \n", "\n", " b'sakotra claudiana' b'toufail salahou' q_name \n", "0 2 1.0 b'1 et 2 suivre le programme' \n", "1 2 0.0 b'3 renverser le programme' \n", "2 0 0.0 b'4 toujours la meme chose' \n", "3 3 1.0 b'4 developper f' \n", "4 4 4.0 b'1 fraction reponse' \n", "\n", "[5 rows x 29 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.assign(\n", " q_name = df[\"index\"].apply(normalize_str),\n", " )\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexq_namelevel_20
01 et 2 Suivre le programmeb'1 et 2 suivre le programme'b'abdallah allaoui taiassima'3.0
11 et 2 Suivre le programmeb'1 et 2 suivre le programme'b'adani ismou'6.0
21 et 2 Suivre le programmeb'1 et 2 suivre le programme'b'ahamada dhoulkamal'2.0
31 et 2 Suivre le programmeb'1 et 2 suivre le programme'b'ahamadi asbahati'0.0
41 et 2 Suivre le programmeb'1 et 2 suivre le programme'b'ahamadi ousseni ansufiddine'0.0
\n", "
" ], "text/plain": [ " index q_name \\\n", "0 1 et 2 Suivre le programme b'1 et 2 suivre le programme' \n", "1 1 et 2 Suivre le programme b'1 et 2 suivre le programme' \n", "2 1 et 2 Suivre le programme b'1 et 2 suivre le programme' \n", "3 1 et 2 Suivre le programme b'1 et 2 suivre le programme' \n", "4 1 et 2 Suivre le programme b'1 et 2 suivre le programme' \n", "\n", " level_2 0 \n", "0 b'abdallah allaoui taiassima' 3.0 \n", "1 b'adani ismou' 6.0 \n", "2 b'ahamada dhoulkamal' 2.0 \n", "3 b'ahamadi asbahati' 0.0 \n", "4 b'ahamadi ousseni ansufiddine' 0.0 " ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.set_index([\"index\", \"q_name\"]).stack().reset_index()\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = df.rename(columns={0:\"value\", \"level_2\": \"norm_surname\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il ne reste plus qu'à trouver les correspondances avec la base de données." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sqlite_datas = pull_sqlite(34, conn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les élèves" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamesurnamemailcommmenttribe_idnorm_surname
01ABDALLAH ALLAOUITaiassimaNone1b'abdallah allaoui taiassima'
12ADANIIsmouNone1b'adani ismou'
23AHAMADADhoulkamalNone1b'ahamada dhoulkamal'
34AHAMADIAsbahatiNone1b'ahamadi asbahati'
45AHAMADI OUSSENIAnsufiddineNone1b'ahamadi ousseni ansufiddine'
\n", "
" ], "text/plain": [ " id name surname mail commment tribe_id \\\n", "0 1 ABDALLAH ALLAOUI Taiassima None 1 \n", "1 2 ADANI Ismou None 1 \n", "2 3 AHAMADA Dhoulkamal None 1 \n", "3 4 AHAMADI Asbahati None 1 \n", "4 5 AHAMADI OUSSENI Ansufiddine None 1 \n", "\n", " norm_surname \n", "0 b'abdallah allaoui taiassima' \n", "1 b'adani ismou' \n", "2 b'ahamada dhoulkamal' \n", "3 b'ahamadi asbahati' \n", "4 b'ahamadi ousseni ansufiddine' " ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def tmp(x):\n", " return normalize_str(\" \".join([x[\"name\"], x['surname']]))\n", "st_df = sqlite_datas[\"students\"]\n", "st_df = st_df.assign(\n", " norm_surname = st_df[[\"surname\", \"name\"]].apply(tmp,1)\n", ")\n", "st_df.head()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "set()" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(df['norm_surname'].unique()).difference(set(st_df['norm_surname'].unique()))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{b'inoussa anchoura'}" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(st_df['norm_surname'].unique()).difference(set(df['norm_surname'].unique()))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = pd.merge(df, st_df, left_on='norm_surname', right_on=\"norm_surname\")[[\"q_name\", \"id\", \"value\"]]" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
q_nameidvalue
0b'1 et 2 suivre le programme'13.0
1b'3 renverser le programme'10.0
2b'4 toujours la meme chose'10.0
3b'4 developper f'10.0
4b'1 fraction reponse'14.0
\n", "
" ], "text/plain": [ " q_name id value\n", "0 b'1 et 2 suivre le programme' 1 3.0\n", "1 b'3 renverser le programme' 1 0.0\n", "2 b'4 toujours la meme chose' 1 0.0\n", "3 b'4 developper f' 1 0.0\n", "4 b'1 fraction reponse' 1 4.0" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les questions" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamescore_rateis_leveledexercise_idcompetencedomaincomment
04001 et 260122CalProgramme de calculsSuivre le programme
1401330122RaiProgramme de calculsRenverser le programme
2402430122RaiProgramme de calculsToujours la même chose
3403430122CalProgramme de calculsDévelopper F
0404180123ComProbablilitéNotation et vocabulaire
\n", "
" ], "text/plain": [ " id name score_rate is_leveled exercise_id competence \\\n", "0 400 1 et 2 6 0 122 Cal \n", "1 401 3 3 0 122 Rai \n", "2 402 4 3 0 122 Rai \n", "3 403 4 3 0 122 Cal \n", "0 404 1 8 0 123 Com \n", "\n", " domain comment \n", "0 Programme de calculs Suivre le programme \n", "1 Programme de calculs Renverser le programme \n", "2 Programme de calculs Toujours la même chose \n", "3 Programme de calculs Développer F \n", "0 Probablilité Notation et vocabulaire " ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q_df = sqlite_datas[\"questions\"]\n", "q_df.head()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def tmp(x):\n", " return normalize_str(\" \".join([x[\"name\"], x['comment']]))\n", "q_df = q_df.assign(\n", " q_name = q_df.apply(tmp, 1)\n", ")" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "set()" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(q_df[\"q_name\"].unique()).difference(set(df[\"q_name\"].unique()))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([b'1 et 2 suivre le programme', b'3 renverser le programme',\n", " b'4 toujours la meme chose', b'4 developper f',\n", " b'1 fraction reponse', b'1 notation et vocabulaire',\n", " b'2 arbre de probabilite', b'1 et 2 raisonnement pour choisir',\n", " b'1 et 2 decomposer le probleme',\n", " b'1 et 2 choix des operations et calculs',\n", " b'3 composition des reductions', b'1 logique de la reponse',\n", " b'1 calculs des indicateurs', b'1 clarte des explications',\n", " b'2 calculs', b'2 validite des reponses',\n", " b'2 tests des possibilites', b' reconnaitre les theoremes',\n", " b' validite des calculs', b' suivi du raisonnement geometrique',\n", " b'1 quantite de sucre', b'2 calcul du volume', b'2 nombre de pots',\n", " b\"3 dessin de l'etiquette\", b\"3 mise a l'echelle\",\n", " b\"3 longueur de l'etiquette\", b' presentation'], dtype=object)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"q_name\"].unique()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = pd.merge(df, q_df, left_on=\"q_name\", right_on=\"q_name\")[[\"id_x\", \"id_y\", \"value\"]]\\\n", " .rename(columns={\"id_x\": \"student_id\", \"id_y\": \"question_id\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yes ça y est je dois les avoir!" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
student_idquestion_idvalue
014003.0
124006.0
234002.0
344000.0
454000.0
\n", "
" ], "text/plain": [ " student_id question_id value\n", "0 1 400 3.0\n", "1 2 400 6.0\n", "2 3 400 2.0\n", "3 4 400 0.0\n", "4 5 400 0.0" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Et maintenant on sauvegarde tout!" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df.to_sql(\"score\", conn, if_exists='append', index=False)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'fdsqfdsq' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfdsqfdsq\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'fdsqfdsq' is not defined" ] } ], "source": [ "fdsqfdsq" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fait au DNB blanc 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wb = xlsxwriter.Workbook(\"DNB_BLANC_pro1.xlsx\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Formatages" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "eval_format = wb.add_format({'bold': True, 'font_color': 'red'})\n", "eval_cell = wb.add_format()\n", "eval_cell.set_bg_color(\"red\")\n", "# exo_cell" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La feuille de calcul" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wb = xlsxwriter.Workbook(\"DS4_302.xlsx\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ws = wb.add_worksheet()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En tête du tableau" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ws.write(0,1,\"Competence\")\n", "ws.write(0,2,\"Barème\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Toutes les questions et exercices" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def q_line(q, row, ws):\n", " ws.write(row, 0, f\"{q.name} - {q.comment}\")\n", " ws.write(row, 1, f\"{q.competence}\")\n", " ws.write(row, 2, q.score_rate)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def exo_block(exo, row, ws):\n", " qrow = row\n", " for q in exo[\"questions\"]:\n", " qrow += 1\n", " q_line(q, qrow, ws)\n", " ws.write(row, 0, f\"Ex {exo['name']}\")\n", " row_range = \", \".join([f\"C{i}\" for i in range(row+2, qrow+2)])\n", " for i in range(30):\n", " ws.write(row, i+2, f\"=SUM({row_range})\")\n", " return qrow" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "row = 2\n", "exo_rows = []\n", "for exo in ev.exercises:\n", " exo_rows.append(row)\n", " row = exo_block(exo, row, ws) + 1\n", "ws.write(1,0, ev.name, eval_format)\n", "exo_xls_range = \", \".join([f\"C{i+1}\" for i in exo_rows])\n", "for i in range(30):\n", " ws.write(1,i+2, f\"=SUM({exo_xls_range})\", eval_format)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wb.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Avec openpyxl" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from openpyxl import Workbook\n", "from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, colors" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "colors.RED" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wb = Workbook()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ws = wb.create_sheet(ev.name)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ws.cell(1,2,\"Competence\")\n", "ws.cell(1,3,\"Barème\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def q_line(q, row, ws):\n", " ws.cell(row, 1, f\"{q.name} - {q.comment}\")\n", " ws.cell(row, 2, f\"{q.competence}\")\n", " ws.cell(row, 3, q.score_rate)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def exo_block(exo, row, ws):\n", " qrow = row\n", " for q in exo[\"questions\"]:\n", " qrow += 1\n", " q_line(q, qrow, ws)\n", " ws.cell(row, 1, f\"Ex {exo['name']}\")\n", " row_range = \", \".join([f\"C{i}\" for i in range(row+1, qrow+1)])\n", " ws.cell(row, 3, f\"=SUM({row_range})\")\n", " return qrow" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "row = 3\n", "exo_rows = []\n", "for exo in ev.exercises:\n", " exo_rows.append(row)\n", " row = exo_block(exo, row, ws) + 1\n", "eval_row = ws.row_dimensions[2]\n", "eval_row.fill = PatternFill(bgColor=colors.RED)\n", "ws.cell(2,1, ev.name)\n", "exo_xls_range = \", \".join([f\"C{i}\" for i in exo_rows])\n", "ws.cell(2,3, f\"=SUM({exo_xls_range})\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ev.tribe" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wb.save(f\"./{ev.name}-{ev.tribe}.xlsx\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }