From 1420a3d65e83d291ed3b9bed496c33f8cd273e54 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Mon, 16 Apr 2018 10:44:04 +0300 Subject: [PATCH] =?UTF-8?q?Analyse=20des=20r=C3=A9sultats=20du=20DNB=20bla?= =?UTF-8?q?nc1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Divers/DNB blanc 1.slides.html | 34230 +++++++++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 34231 insertions(+), 1 deletion(-) create mode 100644 Divers/DNB blanc 1.slides.html diff --git a/Divers/DNB blanc 1.slides.html b/Divers/DNB blanc 1.slides.html new file mode 100644 index 0000000..f94e2e6 --- /dev/null +++ b/Divers/DNB blanc 1.slides.html @@ -0,0 +1,34230 @@ + + + + + + + + + + + +DNB blanc 1 slides + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Analyse des notes du DNB

+
+
+
+
+
+
+
+

En bon prof de math, on commence par un petit cours sur les boites à moustaches! C'est un super outils pour visualiser la répartition des données entre elles.

+

On sépare les données en 4 groupes de même taille (25%). Un groupe dans une moustache, un dans une partie du corps, un dans l'autre partie du corps et le dernier dans l'autre moustache.

+

Boite à moustache pour les newbies

+

Je laisse ceux qui ne sont pas partis en courant à appuyer sur la flèche du bas ou espace pour avoir une boite à moustache un peu plus complexe et complete.

+

Pour les autres c'est flèche de gauche.

+ +
+
+
+
+
+
+
+

Boite à moustache pour les newbies

+ +
+
+
+
+
+
+
+

DNB Général

Ici juqu'au contraire, on ne parlera que des classes qui ont passé le DNB générale.

+ +
+
+
+
+
+
In [4]:
+
+
+
gene
+
+ +
+
+
+ +
+
+ + +
+ +
Out[4]:
+ + + + +
+
['301', '302', '303', '304', '309', '310', '311']
+
+ +
+ +
+
+ +
+
+
+
+
+

Les absents ont toujours tord. On les sort de toute l'analyse qui suiva.

+ +
+
+
+
+
+
In [11]:
+
+
+
absents = df[df.isnull().any(1)]
+absents[["Classe", "Nom"]+matieres]
+
+ +
+
+
+ +
+
+ + +
+ +
Out[11]:
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClasseNomFrançaisHGMathsSVTPhysiqueTechno
20302INOUSSA Anchoura36.512.0NaNNaNNaNNaN
6303ATTOUMANI AminNaNNaNNaNNaNNaNNaN
9304M'MADI AbdourahimNaNNaNNaNNaNNaNNaN
26309YOUSSOUFA Elina (ULIS)NaN9.019.08.04.515.5
6310BACAR AbdallahNaNNaNNaNNaNNaNNaN
9310CHARKANE FarsaNaNNaNNaNNaNNaNNaN
5311ASSANE KassimNaNNaNNaNNaNNaNNaN
8311BEN SOIGHIR SoiriantiNaNNaNNaNNaNNaNNaN
9311BEN SOIGHIS AHAMADA SoiriantiNaNNaNNaNNaNNaNNaN
12311DJAANFARI HaïriaNaNNaNNaNNaNNaNNaN
+
+
+ +
+ +
+
+ +
+
+
+
+
+

Répartition des notes.

Le DNB blanc était noté sur 325.

+ +
+
+
+
+
+
In [13]:
+
+
+
df["total"].hist(bins=150, figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[13]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78d789390>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Quelques statistiques!

Pour les non anglophones mean signifie moyenne, std (standart deviation) signifie écart type

+

Barèmes: +Français 100 HG 50 Math 100 SVT 25 Physique Chimie 25 Techno 25

+ +
+
+
+
+
+
In [14]:
+
+
+
round(df[matieres].describe(), 2)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[14]:
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FrançaisHGMathsSVTPhysiqueTechno
count178.00178.00178.00178.00178.00178.00
mean45.5322.5634.6912.7710.5612.69
std15.839.1317.265.074.915.02
min2.000.001.002.002.002.50
25%37.5015.2523.009.126.008.50
50%47.0023.0030.0012.0010.0012.50
75%55.3828.7542.7516.0014.0016.50
max88.0043.0090.0025.0024.0023.50
+
+
+ +
+ +
+
+ +
+
+
+
+
+

Répartition des notes par matières

Vous allez enfin retrouver les boites à moustaches!

+

Les notes ont été normalisées pour pouvoir comparer les épreuves

+ +
+
+
+
+
+
In [15]:
+
+
+
df[norm_matieres].boxplot(figsize=(15,5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[15]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78d76bf98>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Les plus motivés pourront faire flèche du bas pour voir pleins de beaux graphiques qui ne disent pas grand chose (mais j'aime qu'on me fasse mentir).

+ +
+
+
+
+
+
+
+

Y a-t-il un lien entre la réussite dans une matière et dans une autre?

Dans les nuages de points, chaque point correspond à une élèves.

+

On compage ses notes dans deux matières à chaque fois. L'idée est de voir si la réussite dans une matière est liée à la réussite dans une autre (elles sont corrélées) ou si au contraire, il n'y a pas de lien. Elles sont fortement corrélées quand les points sont regroupés. Si les points sont éclatés, la réussite dans une matière ne semble pas de rapport avec la réussite dans une autre.

+

Les graphiques du milieu montre la répartition de toutes les notes dans chaque matière.

+ +
+
+
+
+
+
In [17]:
+
+
+
ax = scatter_matrix(df[matieres],
+                    alpha=0.5,
+                    figsize=(15, 15),
+                    #diagonal='kde',
+                   )
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Une autre version mais chaque couleur correspond à une classe.

+ +
+
+
+
+
+
In [18]:
+
+
+
fig = sns.pairplot(df,
+             vars=norm_matieres,
+             hue="Classe",
+             diag_kind="kde",
+             plot_kws={'alpha':0.5,},
+            )
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Comparaison des classes entre elles

Parce que chaque prof principale aime que sa classe soit la meilleure!

+

Mais rappelez vous, la comparaison des classes entre elle n'a pas beaucoup d'interet pour juger les élèves. Chaque classe n'a pas été corrigée par le même correcteur et on sait tous à quel point les autres profs sont pas sympas avec nos classes!

+ +
+
+
+
+
+
+
+

C'est moi qui ait la meilleur classe

+ +
+
+
+
+
+
+
+

Score total

+
+
+
+
+
+
In [20]:
+
+
+
bp_data.plot(title="Total de points",
+            kind="box",
+             grid=True,
+            figsize=(15,5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[20]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa782edc9e8>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Français

+
+
+
+
+
+
In [22]:
+
+
+
df[["Français", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[22]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78276c1d0>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Histoire géo

+
+
+
+
+
+
In [23]:
+
+
+
df[["HG", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[23]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa782063710>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Les maths

+
+
+
+
+
+
In [24]:
+
+
+
df[["Maths", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[24]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa781ed5b70>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

SVT

+
+
+
+
+
+
In [25]:
+
+
+
df[["SVT", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[25]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa781e9dcc0>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Physique

+
+
+
+
+
+
In [26]:
+
+
+
df[["Physique", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[26]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa781bc8780>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Techno

+
+
+
+
+
+
In [27]:
+
+
+
df[["Techno", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[27]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa781a39ef0>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

DNB pro

On ne parle plus que des DNB pro maintenant

+ +
+
+
+
+
+
In [49]:
+
+
+
pro
+
+ +
+
+
+ +
+
+ + +
+ +
Out[49]:
+ + + + +
+
['305', '306', '307', '308', '312']
+
+ +
+ +
+
+ +
+
+
+
+
+

Elèves absent à au moins une epreuve

+ +
+
+
+
+
+
In [33]:
+
+
+
absents = df[df.isnull().any(1)]
+absents[["Nom", "Classe"]+matieres]
+
+ +
+
+
+ +
+
+ + +
+ +
Out[33]:
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NomClasseFrançaisHGMathsSVTPhysiqueTechno
5ALI CHIONI Azihar305NaNNaNNaNNaNNaNNaN
19YOUSSOUF Radika305NaNNaNNaNNaNNaNNaN
10IBRAHIM Izaki (UPE2A)306NaNNaN12.05.5NaN2.0
3ALI MROIVILI Rasmine307NaNNaNNaNNaNNaNNaN
5AN-YALDINE Mourtaza307NaNNaNNaNNaNNaNNaN
0ABDOU Mounibati308NaNNaNNaNNaNNaNNaN
1AHAMED Halima308NaNNaNNaNNaNNaNNaN
6ANDILI Hafidhou308NaNNaNNaNNaNNaNNaN
21MOUSTOIFA Edé308NaNNaNNaNNaNNaNNaN
22MROIVILI Abdou308NaNNaNNaNNaNNaNNaN
23MZE El Anziz308NaNNaNNaNNaNNaNNaN
24RABEHAMINA Jessica308NaNNaNNaNNaNNaNNaN
+
+
+ +
+ +
+
+ +
+
+
+
+
+

Répartition des notes

+
+
+
+
+
+
In [35]:
+
+
+
df["total"].hist(bins=150, figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[35]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78189b5f8>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Statistiques par matières et le total

+
+
+
+
+
+
In [36]:
+
+
+
round(df[matieres+["total"]].describe(), 2)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[36]:
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FrançaisHGMathsSVTPhysiqueTechnototal
count100.00100.00100.00100.00100.00100.00100.00
mean25.9215.7624.309.186.287.1488.58
std18.627.5714.355.023.983.8745.41
min1.002.005.002.502.002.0020.50
25%9.509.0014.384.503.004.0051.88
50%21.5015.0021.009.005.006.7578.75
75%41.5021.0029.6213.008.259.00122.38
max68.0034.0081.0020.0021.0020.50202.50
+
+
+ +
+ +
+
+ +
+
+
+
+
+

Données par matières

On a rapporté les notes sur 1 pour pouvoir comparer les matières entre elles.

+ +
+
+
+
+
+
In [37]:
+
+
+
df[norm_matieres].boxplot(figsize=(15,5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[37]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78189bb00>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Y a-t-il un lien entre la réussite dans une matière et dans une autre?

+
+
+
+
+
+
In [39]:
+
+
+
ax = scatter_matrix(df[matieres],
+                    alpha=0.5,
+                    figsize=(15, 15),
+                    diagonal='kde')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [40]:
+
+
+
fig = sns.pairplot(df,
+             vars=norm_matieres,
+             hue="Classe",
+             diag_kind="kde",
+             plot_kws={'alpha':0.5,},
+            )
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Le total des points

+
+
+
+
+
+
In [42]:
+
+
+
bp_data.plot(title="Total de points",
+            kind="box",
+             grid=True,
+            figsize=(15,5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[42]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa78013dbe0>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Français

+
+
+
+
+
+
In [43]:
+
+
+
df[["Français", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[43]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b68f400>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Histoire géo

+
+
+
+
+
+
In [44]:
+
+
+
df[["HG", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[44]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b4f8710>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Les maths

+
+
+
+
+
+
In [45]:
+
+
+
df[["Maths", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[45]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b548588>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

SVT

+
+
+
+
+
+
In [46]:
+
+
+
df[["SVT", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[46]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b2e9898>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Physique

+
+
+
+
+
+
In [47]:
+
+
+
df[["Physique", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[47]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b19f358>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

Techno

+
+
+
+
+
+
In [48]:
+
+
+
df[["Techno", "Classe"]].set_index("Classe", append=True).unstack(1).boxplot(figsize=(15, 5))
+
+ +
+
+
+ +
+
+ + +
+ +
Out[48]:
+ + + + +
+
<matplotlib.axes._subplots.AxesSubplot at 0x7fa77b090da0>
+
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+ + + + + + + diff --git a/Makefile b/Makefile index f2bd2b1..9e057a5 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ SSH_CONF=Embrevade SSH_TARGET_DIR=/var/docker/raw.opytex.org/www/ -SRC_EXCLUDE=--exclude 'Archive' --exclude 'tools/' --exclude "__pycache__" --exclude "config.sh" --exclude "Divers" --exclude "reflections" --exclude "Notes" --exclude "notes" +SRC_EXCLUDE=--exclude 'Archive' --exclude 'tools/' --exclude "__pycache__" --exclude "config.sh" --exclude "reflections" --exclude "Notes" --exclude "notes" GIT_EXCLUDE=--exclude ".git" --exclude ".gitignore" --exclude ".*" ssh_upload: