TP2 Sujet

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

TP2_sujet

May 12, 2023

1 TP 2 : Statistiques avec Python

Les tableurs sont des outils puissants mais pouvant être limités. Nous allons utiliser Python pour
traiter des données et obtenir les caractéristiques d’une variable statistique.
Nous allons étudier différentes caractéristiques sur les ponts en France. Les
données utilisées durant ce TP sont disponibles gratuitement à cette adresse :
https://www.data.gouv.fr/fr/datasets/programme-national-ponts-donnees-publiques/
Nous utiliserons en particulier 2 bibliothèques Python qui permettent respectivement le traitement
des données et leur représentation : numpy et matplotlib
[ ]: # Import des libraries python
import numpy as np
import matplotlib.pyplot as plt

1.1 Région d’implantation des ponts

Les régions d’implantation des ponts recensées sont données dans le fichier region_pont.npy.
[ ]: # Import des données
serie_r = np.load('region_pont.npy',allow_pickle=True)
print('Les 10 premiers éléments de la série sont :')

print('La série comporte '+str(0)+' éléments.')

1. Donner la population, ainsi que sa taille


2. Donner le type de caractère étudié
1)
2)

[ ]: # Taille de la population
N = len(serie_r)
# Modalités
regions = ['Auvergne Rhone Alpes',
'Hauts de France',
'Occitanie',

1
'Nouvelle Aquitaine',
'Pays de la Loire',
'Grand Est',
'Ile de France',
'Provence Alpes Cote d azur',
'Normandie',
'Centre Val de Loire',
'Bourgogne Franche Comte',
'Bretagne',
'Corse']

# ???
xxx_r = []
for i in range(13):
ni=0
for j in range(N):
if serie_r[j]==regions[i]:
ni+=1
xxx_r.append(ni)
xxx_r=np.array(xxx_r)
print(xxx_r)

3. Donner la signification de la variable xxx_r. Renommer cette variable avec un nom plus
explicite.
4. Donner le nombre de ponts recensés dans la région Nouvelle-Aquitaine.
3)
4)
effectifs_r est un array de numpy. Il s’agit d’une liste sur lesquelles les opérations sont déjà définies.
Ainsi, effectifs_r+5 renvoie un array où l’on a ajouté 5 à tous les éléments de effectifs_r.
5. Compléter la ligne ci-dessous
[ ]: # Calcul des fréquences
frequences_r =

La représentation des données s’effectue généralement avec matplotlib.


6. Donner les représentations graphiques possible pour le type de variable étudié.
On donne la représentation graphique en secteur circulaire de la série
6)

[ ]: # Tracé de la représentation en secteur circulaire


plt.figure()
plt.pie(effectifs_r,

↪colors=['yellow','purple','orange','deepskyblue','red','chocolate','gray','green','hotpink',

2
'blue','indigo','violet','darkorange'],
radius=2)
plt.legend(labels=regions,title='Région',loc='center left',bbox_to_anchor=(1,-0.
↪5,2,2))

plt.show()
print(frequences_r)

7. Commmenter la série
7)

1.2 Longueurs des ponts

On étudie à présent la longueur des ponts recensés, et plus particulièrement ceux dont la longueur
est comprise entre 50 m et 200 m.
[ ]: # Import des données
serie_l = np.load('longueur_pont.npy')
print('La série comporte '+str(0)+' éléments.')
# Taille de la population
N =

7. Donner la taille de la population


8. Donner le type de caractère etudié
7)
8)
On se propose de définir 20 classes de même amplitude pour étudier cette série.
9. Donner les valeurs extrêmales recensées
10. Donner la définition des 5 premières classes
[ ]: # Déterminer les valeurs extrêmales

9)
10)

[ ]: # Définition des classes à amplitudes égales


b_reg = [50 + i*7.5 for i in range(21)]

# Calcul des effectifs


n_reg = np.zeros(20)
for i in range(20):
for j in range(N):
l = serie_l[j]
if l > b_reg[i] and l<=b_reg[i+1]:
n_reg[i]+=1

3
print(b_reg)

[ ]: # Calcul des fréquences


f_reg = n_reg/N
print(f_reg[5])

11. Donner la classe associée à cette fréquence


12. Rappeler les représentations graphiques possibles de ce type de variable
13. On donne l’histogramme de la série avec ces classes. Commenter la figure obtenue.
11)
12)

[ ]: # La fonction plt.hist trace un histogramme à partir d'une série de données.␣


↪S'il est donné,

# l'argument bins défini les classes sur lesquels l'histogramme est calculé.␣
↪L'argument density

# précise que l'on veut un histogramme en fréquence unitaire. Par défaut, le␣
↪diagramme tracera

# des barres dont la hauteur correspond à l'effectif

[ ]: # Tracé de l'histogramme
plt.figure()
plt.hist(serie_l,bins=b_reg,density=True,ec='black')
plt.xlabel('Longueur du pont (m)')
plt.ylabel('Fréquence unitaire (m$^{-1}$)')
plt.show()

13)
On définit à présent 10 classes de même effectif. On montre que les classes sont telles que :
[ ]: # Définition des classes à effectifs constants
b_effc = [50,
52.60000000000002,
55.30000000000006,
59.000000000000114,
63.00000000000017,
68.8999999999999,
76.19999999999949,
86.09999999999893,
101.09999999999808,
130.09999999999644,
198.4]

# Calcul des centres


c_effc = np.zeros(10)

4
for i in range(10):
c_effc[i]=(b_effc[i]+b_effc[i+1])/2

# Calcul des effectifs


n_effc = np.zeros(10)
for j in range(N):
l = serie_l[j]
for i in range(10):
if l > b_effc[i] and l<=b_effc[i+1]:
n_effc[i]+=1

print(n_effc)

14. En copiant et adaptant le précédent tracé, tracer l’histogramme associé à cette définition de
classe
[ ]: # Tracé de l'histogramme

On cherche à présent à calculer les caractéristiques de la série.


15. Rappeler la définition exacte de la moyenne et de la médiane
16. Caculer la moyenne. On utilisera la fonction np.sum(X) qui somme tous les éléments de X
17. Déterminer la médiane
15)

[ ]: moyenne =
print('La moyenne exacte vaut '+str(moyenne) +' m.')

mediane =
print('La médiane exacte vaut '+str(mediane)+' m.')

18. Rappeler la définition approchée de la moyenne et de la médiane à l’aide des classes


19. Déterminer ces valeurs avec les classes à effectif constant. On donnera F(63 m)=0.4166 et
F(68.90 m)=0.5175
18)

[ ]: # Calcul de la fonction de répartition


F_effc = np.zeros(11)
for i in range(10):
F_effc[i+1]=F_effc[i]+n_effc[i]/N

# Tracé de la fonction de répartition


plt.figure()
plt.plot(b_effc,F_effc)
plt.xlabel('Longueur (m)')
plt.ylabel('F')
plt.show()

5
[ ]: # Calcul de la moyenne approchée
moyenne_app = 0
for i in range(10):
moyenne_app = moyenne_app + #???
print('La moyenne approchée vaut '+str(moyenne_app)+' m.')

[ ]: # Calcul de la médiane approchée


mediane_app = #???
print('La médiane approchée vaut '+str(mediane_app)+' m.')

21. Rappeler la définition de la variance et de l’écart-type


22. Calculer ces valeurs
21)

[ ]: # Calcul de la variance
variance = 0
for j in range(N):
variance = variance + #???

#Calcul de l'écart-type
ecarttype=np.sqrt(variance)

print('La variance vaut '+str(variance)+' m^2.')


print("L'écart-type vaut "+str(ecarttype)+' m.')

Vous aimerez peut-être aussi