FORMAV votre partenaire Formation http://formav.eu
# -*- coding: utf-8 -*-
#Programme créé par Martine Arrou-Vignod 24 Juin 2015
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
# Données
dt1= np. array ([2.3 , 2.5 , 2.6 , 3.1 , 3.4 , 4 , 3.9 , 4, 4.1 , 4.1 , 4.2 , 4.4 , 4.7 ,
5.1 , 5.5 , 5.8 , 6.2 , 6.9 , 6.9 , 7.3])
dt2 = np. array ([7 , 8, 4.3, 4.7, 6, 6, 12, 8, 5, 7, 8, 7, 9, 10, 13, 7, 11, 11, 16,
14] , dtype = float )
#Données sous forme de fichier
def afficher_donnees(monfichier):
mesdonnees=open(monfichier,'r')
lecture = mesdonnees.read()
print('Visualisation des données')
print(lecture)
print('fin fichier')
#Données sous forme de fichier
def donnees_fichier(nom_fichier):
afficher_donnees(nom_fichier)
donnees1,donnees2 = np.loadtxt(nom_fichier, unpack=True)
plt.plot( donnees1,donnees2,'go')
plt.show()
return donnees1,donnees2
do1,do2=donnees_fichier("donnees.txt")
#retourne les paramètres a,b,sigma_x,sigma_y,covar_xy,r
def param_regression(x,y):
n = y. size
x_m=np.mean(x)
y_m=np.mean(y)
#calcul de la covariance
covar_xy=np.dot(x,y)/n-x_m*y_m
#calcul de la variance de x
var_x=np.dot(x,x)/n-x_m*x_m
#calcul de la variance de y
var_y=np.dot(y,y)/n-y_m*y_m
sigma_x=np.sqrt(var_x)
sigma_y=np.sqrt(var_y)
#calcul de a
a=covar_xy/var_x
#calcul de b
b=y_m-a*x_m
#calcul du coefficient de corrélation
r=covar_xy/sigma_x/sigma_y
return(a,b,sigma_x,sigma_y,covar_xy,r)
#trace une droite quelconque
def droiteab(a,b,x):
return(a*x+b)
#trace le nuage et la droite
def tracernuagedroite(dx,dy,a,b):
x = np.linspace(np.min(dx),np.max(dx),30)
z=droiteab(a,b,x)
chaine = " y= %1.3f x " %a
if b>0 :
chaine2 ="+%1.3f" %b
else :
chaine2 ="%1.3f" %b
chaine3=chaine + chaine2
print(chaine3)
plt.plot(x,z,label=chaine3)
plt.legend()
plt.grid(True)
plt. plot (dx,dy, 'ro ')
#affichage des paramètres
def affichparametres(x,y):
p=param_regression(x,y)
print('données')
print(x)
print(y)
print('paramètres')
print('écart type de x=',p[2])
print('écart type de y=',p[3])
print('variance de y=',p[2]**2)
print('variance de y=',p[3]**2)
print('covariance xy=',p[4])
print('coefficient de corrélation=',p[5])
if p[1] >0 :
print('droit: d\'ajustement linéaire y=',"%1.6f"%p[0],'x+',"%1.6f" %p[1])
else :
print('droit: d\'ajustement linéaire y=',"%1.6f"% p[0],'x', "%1.6f"%p[1])
#tracerdroite et nuage
def tracer(d1,d2):
if d1.size == d2.size :
print('ok')
#p contient les paramètres de la droite
p=param_regression(d1,d2)
tracernuagedroite(d1,d2,p[0],p[1]);
else:
print('la dimension de vos matrices n\'est pas la même')
#les données sont celles du tableau :dt1 et dt2
tracer(dt1,dt2)
#les données sont celles du fichier :do1 et do2
tracer(do1,do2)
#les données sont celles du tableau :dt1 et dt2
affichparametres(dt1,dt2)
#les données sont celles du fichier :do1 et do2
affichparametres(do1,do2)
#fonction pour affichage
def pythonreg(d1,d2):
n = d2. size
a,b = np.polyfit(d1,d2,1)
x = np.linspace(np.min(d1),np.max(d1),30)
print(" a=",a,"b=",b)
z=a*x+b
chaine = " y= %1.3f x " %a
if b >0 :
chaine2 ="+%1.3f" %b
else:
chaine2 ="%1.3f" %b
chaine3=chaine + chaine2
print(chaine3)
plt.plot(x,z,label=chaine3)
plt.legend()
plt.grid(True)
plt. plot (d1,d2, 'bo ')
print('fin')
#les données sont celles du fichier :do1 et do2
pythonreg(do1,do2)
#les données sont celles du tableau :dt1 et dt2
pythonreg(dt1,dt2)