Le tableau suivant donne l'évolution des bénéfices d'une société.
Année | Bénéfice |
---|---|
1 | 28 |
3 | 27.2 |
8 | 37.6 |
13 | 40.7 |
On cherche à savoir s'il existe une corrélation entre les années et les bénéfices de la société.
Liens intéressants :
http://www.python-simple.com/python-matplotlib/scatterplot.php
http://www.python-simple.com/python-numpy-scipy/fitting-regression.php
Outils PYTHON utilisés :
from math import *
# from random import *
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import linregress
liste_x=[1,3,8,13]
liste_y=[28,27.2,37.6,40.7]
plt.axis([0,15, 0, 50]) # Attention [x1,x2,y1,y2]
plt.xlabel('Années')
plt.ylabel('Bénéfices')
plt.title('Evolution des bénéfices de la société')
plt.grid()
plt.scatter(liste_x,liste_y)
plt.show()
# Recherche du point moyen associé à la série.
def PointMoyen(liste_x,liste_y):
X=np.array(liste_x) # Transformation de la liste en un tableau de valeurs numpy.
Y=np.array(liste_y)
return X.mean(), Y.mean()
print(f"Le point moyen associée à la liste a pour coordonnées : {PointMoyen(liste_x,liste_y)[0]:.2f}, {PointMoyen(liste_x,liste_y)[1]:.2f}")
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les trois premières
print("Ecriture y=ax+b")
print("a= ", lr[0])
print("b= ",lr[1])
print("coefficient de corrélation : ",lr[2])
# Une autre méthode, np.polyfit renvoie a et b
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
print(poly)
poly(4)
liste_x=[1,3,8,13]
liste_y=[28,27.2,37.6,40.7]
plt.axis([0,15, 0, 50])
plt.xlabel('Années')
plt.ylabel('Bénéfices')
plt.title('Evolution des bénéfices de la société')
plt.grid()
plt.scatter(liste_x,liste_y)
lx= np.linspace(0,30,100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.plot(lx,poly(lx))
plt.show()
On considère la série statistique à deux variables suivantes : .
x | y |
---|---|
1 | 1 |
3 | 2 |
4 | 4 |
6 | 4 |
8 | 5 |
9 | 7 |
11 | 8 |
14 | 9 |
# Exercice 1 de la feuille de TD
liste_x=[1,3,4,6,8,9,11,14]
liste_y=[1,2,4,4,5,7,8,9]
plt.axis([0,15, 0, 20])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('')
plt.grid()
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
# plt.plot(lx,poly(lx))
plt.scatter(liste_x,liste_y)
lx= np.linspace(0,30,100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.show()
plt.show()
def exercice1():
print(f"Le point moyen associée à la liste a pour coordonnées : {PointMoyen(liste_x,liste_y)[0]:.2f}, {PointMoyen(liste_x,liste_y)[1]:.2f}")
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les trois premières
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit)
print("Ecriture y=ax+b")
print("a= ", lr[0])
print("b= ",lr[1])
print("coefficient de corrélation : ",lr[2])
print(poly)
print(f"L'estimation de y pour x=12 est : {poly(12):.0f}")
exercice1()
Faire l’étude à la calculatrice en arrondissant les résultats à $10^{-3}$
L’étude, durant les cinq dernières années, du nombre de passagers transportés annuellement sur une ligne aérienne a conduit au tableau suivant :
Rang de l’année | Nombre de passagers $p_i$ |
---|---|
1 | 7550 |
2 | 9325 |
3 | 10741 |
4 | 12837 |
5 | 15655 |
Rang de l’année | $y_i=ln(p_i)$ |
---|---|
1 | |
2 | |
3 | |
4 | |
5 |
Utiliser un calculateur pour représenter le nuage de points $M(x_i,y_i)$ dans un repère orthogonal du plan. Peut-on envisager un ajustement affine de ce nuage ?
# Exercice 2 de la feuille de TD
liste_pi=[7550,9325,10741,12837,15655]
liste_ln_pi=[log(i) for i in liste_pi]
liste_x=[1,2,3,4,5]
liste_y=[8.93,9.14,9.28,9.46,9.66]
plt.axis([0,15, 0, 20])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('')
plt.grid()
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les trois premières
print("Ecriture y=ax+b")
print("a= ", lr[0])
print("b= ",lr[1])
print("coefficient de corrélation : ",lr[2])
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
plt.plot(lx,poly(lx))
plt.scatter(liste_x,liste_y)
lx= np.linspace(0,30,100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.show()
La bibliothèque du comité d’entreprise d’une grande société a établi le bilan de ses activités pour les quatre dernières années. Le tableau suivant donne en milliers pour chaque année :
Rang de l’année | 1 | 2 | 3 | 4 |
---|---|---|---|---|
$x_i$ | 3 | 7 | 1 | 5 |
$y_i$ | 0,3 | 1,4 | 0,1 | 0,4 |
$z_i$ | 0,9 | 3,2 | 2,1 | 2,8 |
liste_x=[3,7,1,5]
liste_y=[0.3,1.4,0.1,0.4]
plt.axis([0,15, 0, 3])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('')
plt.grid()
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les trois premières
print("Ecriture y=ax+b")
print("a= ", lr[0])
print("b= ",lr[1])
print("coefficient de corrélation : ",lr[2])
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
plt.plot(lx,poly(lx))
plt.scatter(liste_x,liste_y)
lx= np.linspace(0,30,100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.show()
liste_x=[3,7,1,5]
liste_y=[0.9,3.2,2.1,2.8]
plt.axis([0,15, 0, 5])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Titre du graphique')
plt.grid()
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les trois premières
print("Ecriture y=ax+b")
print("a= ", lr[0])
print("b= ",lr[1])
print("coefficient de corrélation : ",lr[2])
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
lx= np.linspace(0,30,100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.plot(lx,poly(lx)) # pour dessiner la droite
plt.scatter(liste_x,liste_y)
plt.show()
On considère la série statistique à deux variables suivantes : .
x | y |
---|---|
80 | 4 |
90 | 4,8 |
100 | 6,3 |
110 | 8 |
120 | 10 |
Utiliser un calculateur pour représenter le nuage de points $M(x_i,y_i)$ dans un repère orthogonal du plan. Peut-on envisager un ajustement affine de ce nuage ?
Déterminer par la méthode des moindres carrés une équation de la droite de régression de y en x.
Calculer la valeur y pour x=130
Du point de vue PYTHON :
def Representation(liste_x,liste_y):
axis=[min(liste_x),max(liste_x),min(liste_y),max(liste_y)]
plt.axis()
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Titre du graphique')
plt.grid()
plt.scatter(liste_x,liste_y)
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit) # On crée une fonction polynimiale à partir de a et b.
lx= np.linspace(min(liste_x),max(liste_x),100) #créer une liste de 100 valeurs dans l'intervalle[0,30]
plt.plot(lx,poly(lx))
plt.show()
def DroiteRegressionLineaire(liste_x,liste_y):
"Renoie a et b dans l'écriture y=ax+b"
lr = linregress(liste_x, liste_y) # lr reçoit cinq informations, on n'utilise que les deux premières a et b
return lr[0], lr[1]
def CoefficientCorrelation(liste_x,liste_y):
lr = linregress(liste_x, liste_y)
return lr[2]
def EvalY(liste_x,liste_y,x):
fit =np.polyfit(liste_x, liste_y, 1)
poly = np.poly1d(fit)
return poly(x)
def AffichageElements(liste_x,liste_y):
a,b=DroiteRegressionLineaire(liste_x,liste_y)
print("Ecriture y=ax+b")
print("a= ", a)
print("b= ",b)
print("coefficient de corrélation : ",CoefficientCorrelation(liste_x,liste_y))
def demo() :
liste_x=[80,90,100,110,120]
liste_y=[4,4.8,6.3,8,10]
Representation(liste_x,liste_y)
AffichageElements(liste_x,liste_y)
x=130
print(f"La valeur pour {x} est {EvalY(liste_x,liste_y,x):.2f}")
demo()
Une entreprise fabrique et commercialise un produit rare. Sa production mensuelle, qui ne peut excéder 7 tonnes, est notée X (en tonnes) : le coût total de cette production mensuelle est noté Y (en k€). On rappelle que $1 k€=10^3 €$. On pose $Z=e^{\frac{100-Y}{25}}$
x | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
y | 19,2 | 20,1 | 27,5 | 32,2 | 40,6 | 57,3 |
z | 25,33 |
def demo2() :
liste_x=[1,2,3,4,5,6]
liste_y=[48,49,52.5,55,56,61]
Representation(liste_x,liste_y)
AffichageElements(liste_x,liste_y)
x=9
print(f"La valeur pour {x} est {EvalY(liste_x,liste_y,x):.2f}")
demo2()