Exercice : Calculs statistiques
Rappels pour la gestion des fichiers :
f=open('fichier.txt','w')
Explications : 'fichier.txt' désigne le nom du fichier. Le mode d’ouverture peut-être ’w’ pour « écriture » (wrtie), ’r’ pour « lecture » (read) ou ’a’ pour « ajout » (append).
f.readline()
Explication : lecture d’une ligne de l’objet fichier f
\n
Explication : caractère d’échappement : saut de ligne
c1.strip()
Explication : renvoie une chaîne sans les espaces et les caractères d’échappement (saut de ligne par exemple) en début et en fin de la chaîne de caractère c1
c1.strip(';')
Explication : sépare une chaîne de caractères (c1) en une liste de mots avec le séparateur ’ ;’
f.write('exemple')
Explication : écrit dans l’objet fichier f la chaîne de caractères ’exemple’
f.close()
Explication : ferme le fichier
Question
Ecrire un programme Python permettant de créer un fichier ’droite.txt’ contenant les éléments suivants :
10 : nombre de points du fichier
25 ;10.9 : abscisse et ordonnée du premier point
20 ; 9.3
15 ; 8.2
12 ; 7.5
9 ; 6.2
6 ; 5.8
3 ; 4.2
0 ; 3.9
-3 ; 2.8
-6 ; 2 : abscisse et ordonnée du dernier point
Solution
x=[25, 20, 15, 12, 9, 6, 3, 0, -3, -6]
y=[10.9, 9.3, 8.2, 7.5, 6.2, 5.8, 4.2, 3.9, 2.8, 2]
n=len(x)
f=open('droite.txt', 'w') #création du fichier 'droite.txt' en écriture
f.write(str(n)+'\n') # première ligne avec la longueur de la liste
for i in range(n) :
f.write(str(x[i])+';'+str(y[i]+'\n'))
f.close() # fermeture du fichier
Question
Ecrire un programme Python permettant d’ouvrir un fichier .txt (par exemple ’droite.txt’) et de récupérer les abscisses et les ordonnées dans deux listes.
Solution
f=open('droite.txt', 'r')
n=int(f.readline()) # nombre de points
x=[]
y=[]
for i in range(n):
ligne=f.readline()
ligne2=ligne.strip() # enlève les caractères d'échappement
xchaine, ychaine=ligne2.split(';')
x.append(float(xchaine)) # conversion de l'abscisse en type float
y.append(float(ychaine))
f.close()
Question
On cherche à modéliser les n points expérimentaux \((x_1,y_1), (x_2, y_2) \,... \, (x_n, y_n)\) par une fonction polynôme du premier ordre, de la forme : \(y=ax+b\).
\(a=\dfrac{n\sum\limits_{i=1}^{n}x_i\,y_i-\Bigl(\sum\limits_{i=1}^n x_i \Bigr) \Bigl(\sum\limits_{i=1}^n y_i \Bigr)}{n\sum\limits_{i=1}^n {x_i}^2-\Bigl(\sum\limits_{i=1}^n x_i\Bigr)^2}\) et \(b=\bar y-a \bar x \)en notant \(\bar x\) la moyenne des \(x_i\) et \(\bar y\) la moyenne des \(y_i\).
Ecrire un programme Python permettant de calculer les coefficients \(a\) et \(b\) correspondant aux points expérimentaux du fichier ’droite.txt’.
Solution
sumx=0
sumy=0
sumprodxy=0
moy_x=0
moy_y=0
sumcarrex=0
for i in range(n):
sumx=sumx+x[i]
sumy=sumy+y[i]
sumprodxy=sumprodxy+x[i]*y[i]
moy_x=moy_x+x[i]
moy_y=moy_y+y[i]
sumcarrex+=x[i]**2
moy_x=moy_x/n
moy_y=moy_y/n
a=(n*sumprodxy-sumx*sumy)/(n*sumcarrex-sumx**2)
b=moy_y-a*moy_x
Question
Ecrire un programme Python permettant de représenter graphiquement la fonction \(y_{\text{modélisé}}=ax+b\).
Solution
import matplotlib.pyplot as plt
ymodelise=[a*elt+b for elt in x]
plt.plot(x, ymodelise)