Lyc ´ee 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,p2, c’ est la matière première du statisticien. Il apparaît lorsque on étudie
plusieurs caractères quantitatifs sur une population.
En eet chaque individu est représenté par un p-uplet (x1, ..., xp) où xiest é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 kin range(20)], [ random()*50-25 for kin
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 cet sgè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 kin range(20)], [ random()*50-25 for kin
range(20)],c=[(1,0,0.6),(0,0,1),(0.2,1,0.4)],s=[40*i for iin
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 npoints N. On appelle point moyen du nuage,
l’isobarycentre Gde ses points.
On rappelle que ce point vérifie :
X
P2N
!
GP =!0
1) Montrer que le minimum de la fonction M7! 1
nX
P2N
MP2est atteint si et seulement si Mest le
point moyen de N.
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 Yde 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 ache, 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 :
I(N)=1
nX
P2N
GP2(1)
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 eet, 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 Ole couple (0,0). Démontrer que :
I(N)=1
n
0
B
B
B
B
B
@X
P2N
OP21
C
C
C
C
C
A
OG2(2)
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 ecace 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 eacer 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 iin range(1,50):
X=[k/i for kin range(i+1)]
Y=[4*k*(i-k)/i**2 for kin range(i+1)]
color=[(X[k],X[k],X[k]) for kin range(i+1)]
aire=[(1-Y[k])*200 for kin 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 x7! sin(2x) sur [0,1].
TP PYTHON - 07 4
[Qu. 5] Point extrémaux d’une fonction sur le nuage. Étant donnée une fonction fdéfinie de R2dans
R, on souhaite déterminer un point du nuage qui minimise fsur le nuage et un point qui la maximise
sur le nuage.
1) Écrire une fonction argValeurMin de paramètres X,Yet fqui retourne un point du nuage qui
minimise la fonction fsur 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 kin range(100)]
Y=[random() for kin range(100)]
couleur=[(0,0,1,0.5) for kin range(100)]
taille=[50 for kin range(100)]
nuage=scatter(X,Y,c=couleur,s=taille)
for iin 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 kin range(50)],[random()*50
for kin 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 fsur 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 Nest partitionné en psous-nuages N1,··· ,Np.On note
n=card (N)ainsi que nk=card (Nk)(pour 1 6k6p) de sorte que n=
p
X
k=1
nk.Le point moyen
(isobarycentre) de Nest noté Get celui de Nkest noté Gk.
Par définition de l’inertie d’un nuage et vu que N=
p
G
k=1
Nk:
I(N)=1
nX
M2N
GM2=1
n
p
X
k=1
X
M2Nk
GM2(1)
Or :
GM2= !
GGk+ !
GkM2=GG2
k+2 !
GGk. !
GkM+GkM2
donc : X
M2Nk
GM2=nkGG2
k+2 !
GGk.X
M2Nk
 !
GkM+X
M2Nk
GkM2
Mais, par définition d’un barycentre, X
M2Nk
 !
GkM=!0.Ainsi, en reprenant (1):
I(N)=1
n
p
X
k=1
nkGG2
k+1
n
p
X
k=1
X
M2Nk
GkM2
Or, d’une part :
1
n
p
X
k=1
nkGG2
k=Ir
et, d’autre part :
1
n
p
X
k=1
X
M2Nk
GkM2=1
n
p
X
k=1
nk0
B
B
B
B
B
B
@
1
nkX
M2Nk
GkM21
C
C
C
C
C
C
A
=1
n
p
X
k=1
nkI(Nk)=Ia
d’où la conclusion :
I(N)=Ir+Ia
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !