Lyc´ee Thiers - MPSI-3

publicité
Lycée Thiers
TP PYTHON - 07
Analyser, ordonner, classer des données et visuellement s’il vous plait !
1 - Pyplot, dessine moi un nuage
Le nuage de points de Rp , p 2, c’ est la matière première du statisticien. Il apparaît lorsque on étudie
plusieurs caractères quantitatifs sur une population.
En e↵et chaque individu est représenté par un p-uplet (x1 , ..., xp ) où xi est égal à la valeur que prend le
i-ème caractère sur l’individu concerné. Lorsque p = 2 ou p = 3, on peut représenter graphiquement
un tel nuage.
Dans le module matplotlib de python, on trouve un sous-module pyplot qui comporte, entre autres,
la fonction scatter ( éparpiller en français) permettant de dessiner un nuage de points. Exécuter le
script suivant pour découvrir cette fonction :
from matplotlib . pyplot import *
from random import random
scatter ([ random () *50 for k in range (20)], [ random () *50 -25 for k in
range (20)],c=’rb ’,s=[80 ,100] , marker =’*’)
Les deux premiers paramètres sont deux listes de même longueur de nombres entiers ou flottants.
Les paramètres c et s gèrent respectivement les couleurs et la taille des points. Ils se présentent sous
la forme d’un objet ou d’une liste d’objets, désignant les couleurs des points et les aires occupées par
ceux-ci. Pour désigner une couleur, on peut utiliser un format (r,g,b). Le paramètre marker désigne le
caractère utilisé pour représenter les points. Essayer :
scatter ([ random () *50 for k in range (20)], [ random () *50 -25 for k in
range (20)],c=[(1 ,0 ,0.6) ,(0,0,1) ,(0.2 ,1 ,0.4)],s=[40*i for i in
range (1 ,10)], marker =’x’)
[Qu. 1] Quelle commande faut-il saisir dans le shell pour obtenir les nuages qui ressemblent à ceux-ci ?
TP PYTHON - 07
2
2 - Scruter les nuages
Lorsqu’on est en présence d’un grand nombre de données, on essaie de réduire ces données à quelques
valeurs qui permettront de comparer plus facilement deux ou plusieurs nuages de points.
[Qu. 2] Point moyen. On considère un nuage de n points N. On appelle point moyen du nuage,
l’isobarycentre G de ses points.
On rappelle que ce point vérifie :
X ! !
GP = 0
P2N
1) Montrer que le minimum de la fonction M 7!
point moyen de N.
1X
MP2 est atteint si et seulement si M est le
n
P2N
Ceci justifie l’utilisation du point moyen pour résumer un nuage de points puisqu’il est « le plus
proche » au sens de la fonction précédente du nuage de points.
2) Dans la suite de ce TP, on suppose que le nuage est donné par deux listes de même longueur X
et Y de flottants, listes des abscisses et des ordonnées des points du nuage.
Ecrire deux fonctions pointMoyen et visuelPointMoyen dont les paramètres sont les deux listes
précédentes et qui renvoient, le point moyen pour la première, et affiche, sur une même figure,
le nuage et son point moyen, pour la deuxième. On fera en sorte que le point moyen soit bien
discernable des autres points.
3) Tester vos fonctions sur le nuage défini par :
X=[ i for i in range(1,11) for j in range(3)] Y=[i*sin(i) for i in range(30)]. Voici
un résultat :
4) Faire de même avec le nuage :
X=[k/40 for k in range(41)] Y=[4*k*(40-k)/40**2 for k in range(41)]
pour obtenir :
TP PYTHON - 07
3
[Qu. 3] Inertie d’un nuage. Deux nuages ayant le même point moyen peuvent avoir des formes très
di↵érentes :
Pour mesurer la dispersion des points du nuage par rapport au point moyen, on définit l’inertie du nuage,
I(N), par :
1X
I(N) =
GP2 (1)
n
P2N
On remarquera que cette inertie correspond au minimum de la fonction définie dans la question 1.1.
et qu’elle se comporte comme une aire. En e↵et, si l’on transforme le nuage par une homothétie de
rapport ↵, celle-ci est multipliée par ↵2 .
1) Formule de Huyghens. On note O le couple (0, 0). Démontrer que :
0
1
CC
1 BBB X
I(N) = BB@
OP2 CCCA OG2 (2)
n
P2N
2) Selon que l’on calcule l’inertie en utilisant la définition (1) ou l’égalité (2), combien d’étapes le
calcul comporte-t-il ? Écrire une fonction efficace calculant I(N).
3) Calculer l’inertie des nuages des questions 2.3 et 2.4. Vous devez obtenir : 145.392728945346 et
0.18532500000000002.
[Qu. 4] De l’interactivité, de l’animation ! Pour réaliser des modifications d’une figure pendant
l’exécution d’un script ou d’une fonction, il faut activer le mode intéractif en exécutant l’instruction
ion() (lire « ail one » pour « interactive mode on » en anglo-marseillais).
On utilisera aussi les fonctions, clf() pour e↵acer la figure avant de la mettre à jour et pause() pour
temporiser avant une modification ultérieure. La fonction pause demande un argument qui est un
nombre positif correspondant au nombre de secondes de cette temporisation. Essayer :
ion ()
for i in range (1 ,50):
X=[k/i for k in range(i+1)]
Y=[4*k*(i-k)/i**2 for k in range(i+1)]
color =[(X[k],X[k],X[k]) for k in range(i+1)]
aire =[(1 -Y[k]) *200 for k in range (i+1)]
clf ()
scatter (X,Y,c=color ,s=aire , marker =’o’)
pause (0.1)
Rem. L’utilisation de la commande pause rend superflue celle du mode interactif.
Réaliser une animation analogue avec la fonction x 7! sin(2⇡x) sur [0, 1].
TP PYTHON - 07
4
[Qu. 5] Point extrémaux d’une fonction sur le nuage. Étant donnée une fonction f définie de R2 dans
R, on souhaite déterminer un point du nuage qui minimise f sur le nuage et un point qui la maximise
sur le nuage.
1) Écrire une fonction argValeurMin de paramètres X, Y et f qui retourne un point du nuage qui
minimise la fonction f sur le nuage.
2) Vous avez peut-être remarqué que les animations réalisées dans la question 4 n’étaient pas très
fluides. Même en réduisant le temps de pause et avec des nuages peu volumineux, cela reste lent.
On peut penser que ceci provient du fait que le nuage est recréé et redessiné totalement à chaque
fois.
Si l’on ne doit modifier que l’aspect de certains points du nuage, il est donc maladroit de redessiner
tout le nuage à chaque modification de celui-ci. On peut alors utiliser deux membres modifiables
de l’objet renvoyé par la fonction scatter : _facecolors, qui contient la liste des couleurs des
points sous la forme de quadruplets (r,g,b,t), t indiquant de niveau de transparence et _sizes qui
permet d’accéder aux tailles de ces points.
Essayer le script suivant :
X=[ random () for k in range (100)]
Y=[ random () for k in range (100)]
couleur =[(0 ,0 ,1 ,0.5) for k in range (100) ]
taille =[50 for k in range (100) ]
nuage= scatter (X,Y,c=couleur ,s= taille )
for i in range (50):
k= randint (0 ,99)
nuage. _facecolors [k]=(1 ,0 ,0 ,1)
nuage. _sizes [k]=150
pause (0.1)
Attention : Il est indispensable de mémoriser l’objet renvoyé par scatter dans une variable
pour pouvoir utiliser les fonctions précédentes et modifier l’aspect du nuage. Le nombre de points,
de couleurs et de tailles sont fixés à l’initialisation.
3) On aimerait visualiser cette recherche en traduisant graphiquement l’algorithme utilisé dans
la fonction argValeurMin. Chaque point pourra prendre quatre couleurs di↵érentes durant le
déroulement de l’algorithme et en prendra trois au moins. Suivant que le point, n’a pas encore été
examiné, est en train d’être examiné, est le point qui réalise le minimum des points déjà examinés,
a déjà été examiné, sa couleur et sa taille, éventuellement, devront être di↵érentes.
Par exemple, l’entête de la fonction peut se présenter comme suit :
def visuelArgValeurMin(X,Y,f,ptInit,ptMin,ptVu,ptCourant,marque)
où les paramètres ptInit,ptMin,ptVu,ptCourant sont des couples (taille,couleur) décrivant
les di↵érents états possibles d’un point du nuage.
4) Tester votre fonction en ajoutant le code suivant après sa définition dans le script :
def fLin(x,y):
return 2*x+3*y
visuelArgValeurMin ([ random () *50 for k in range (50) ],[ random () *50
for k in range (50)],fLin ,(200 ,(1 ,1 ,1 ,1)) ,(400 ,(0 ,1 ,1 ,1))
,(200 ,(0 ,0 ,0 ,1)) ,(400 ,(1 ,0 ,0 ,1)),’*’)
5) Écrire une fonction nommée visuelArgValeurMinMax similaire à la précédente pour visualiser la
recherche simultanée d’un minimum et d’un maximum d’une fonction f sur le nuage.
6) Utiliser la fonction précédente pour la recherche d’un point le plus proche et d’un point le plus
éloigné du point moyen d’un nuage.
TP PYTHON - 07
5
Annexe
Rappel des notations : un nuage de points N est partitionné en p sous-nuages N1 , · · · , Np . On note
p
X
n = card (N) ainsi que nk = card (Nk ) (pour 1 6 k 6 p) de sorte que n =
nk . Le point moyen
k=1
(isobarycentre) de N est noté G et celui de Nk est noté Gk .
Par définition de l’inertie d’un nuage et vu que N =
p
G
k=1
Nk :
p
1 X
1X X
2
I (N) =
GM =
GM2
n
n
M2N
Or :
k=1 M2Nk
⇣ !
!⌘2
! !
GM2 = GGk + Gk M = GG2k + 2 GGk .Gk M + Gk M2
donc :
X
M2Nk
! X
! X
GM2 = nk GG2k + 2 GGk .
Gk M +
Gk M2
Mais, par définition d’un barycentre,
X
M2Nk
M2Nk
! !
Gk M = 0 . Ainsi, en reprenant (1) :
M2Nk
p
p
1X
1X X
2
I (N) =
nk GGk +
Gk M2
n
n
k=1 M2Nk
k=1
Or, d’une part :
p
1X
nk GG2k = Ir
n
et, d’autre part :
k=1
0
1
p
p
p
X
BB 1 X
CC 1 X
1X X
1
BB
2
2C
C
Gk M =
nk BB
Gk M CC =
nk I (Nk ) = Ia
@ nk
A n
n
n
k=1 M2Nk
d’où la conclusion :
k=1
M2Nk
I (N) = Ir + Ia
k=1
(1)
Téléchargement