Sondage et intervalle de confiance
Dans cette leçon nous réalisons un sondage après la sortie d'un film dans différentes villes pour mesurer le taux de satisfaction. On voudrait estimer la probabilité qu'une personne prise au hasard apprécie le film.
Dans chaque ville on interroge 100 personnes et on collecte leurs réponses dans une liste.
- 1
Dans les leçons précédentes nous avons vu comment créer une liste de manière explicite en indiquant ses éléments. Par exemple
L = [1,2,3]
. C'est ce qu'on appelle définir une liste en extension.Mais lorsque la liste contient beaucoup d'éléments comme dans notre cas, procéder de cette manière n'est pas réaliste.
À la place, on peut définir une liste en décrivant une propriété ou un calcul sur chacun de ses éléments avec une nouvelle syntaxe. Par exemple :
>>> [i ** 2 for i in range(3)] [0, 1, 4]
Le code précédent crée une liste contenant
i ** 2
pour chaquei
allant de 0 à 2. Cette formule est interprétée par Python en[0 ** 2, 1 ** 2, 2 ** 2]
qui donne finalement la liste[0, 1, 4]
Autrement dit, on a les trois premiers carrés d'entiers. Comme d'habitude la variable
i
aurait pu être nommée différemment. Autre exemple :>>> [2 * n for n in range(5)] [0, 2, 4, 6, 8]
De cette manière on crée une liste contenant les cinq premiers nombres pairs. En effet le
for n in range(5)
nous donne une séquence de cinq nombres, et pour chacun de ces nombresn
on ajoute2 * n
dans la liste.Dans la console crée une liste en compréhension, de sorte qu'elle contiennent les dix premiers cubes d'entiers à partir de zéro.
Solution
La liste doit contenir dix nombres en partant de zéro donc on utilise
for n in range(10)
et comme on veut des cubes, pour chaquen
on ajouten ** 3
dans la liste :>>> [n ** 3 for n in range(10)] [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
- 2
On peut également utiliser un appel de fonction dans la formule. Par exemple pour simuler dix lancers d'un dé à six face, on peut faire :
from random import randint L = [randint(1,6) for n in range(10)]
De cette manière on a une liste de longueur 10 dont chaque élément est un entier aléatoire compris entre 1 et 6.
J'ai défini une fonction
sondage
qui renvoie lorsqu'on l'appelle un entier 0 ou 1 avec une certaine probabilité. Cette fonction ne prend pas d'argument et permet de modéliser la réponse donnée par un individu lors du sondage : 0 si la personne n'a pas aimé le film, 1 si la personne a apprécié le film.Dans l'éditeur crée une liste
L1
en compréhension qui représente les réponses données par 100 personnes au sondage.Solution
Il nous faut une liste de longueur 100 donc on utilise
for n in range(100)
et chaque élément de la liste doit être la réponse d'une personne au sondage donc un appel de la fonctionsondage
:L1 = [sondage() for n in range(100)]
- 3
Pour savoir ce qu'ont pensé les gens dans cette ville tu peux afficher la liste dans la console. Il faudrait compter la proportion de 1 pour avoir le taux de gens qui ont apprécié le film.
Les listes ont justement la capacité de compter le nombre d'occurrences d'une valeur grâce à la méthode
count
. Par exemple pour compter le nombre de 0 d'une listeL
on peut faire :L.count(0)
Combien de personnes ont apprécié le film dans cette ville ? Saisi l'expression dans la console pour avoir la réponse.
Solution
Il faut compter le nombre de 1 de la liste
L1
:>>> L1.count(1) 62
Donc dans mon cas il y 62% de gens qui ont apprécié le film
- 4
Nous allons reproduire ce sondage dans une vingtaine de villes en France pour déterminer dans chacune de ces villes la proportion de personnes qui apprécient le film.
Pour cela une liste
L
initialement vide permet de stocker le taux de satisfaction des gens à chaque sondage. Et une boucle for permet de réaliser le sondage dans chacune des vingts ville.Il reste à calculer et stocker le taux de satisfaction dans chacune de ces villes. Défini dans la boucle for et sous la variable
L1
une variabletaux
qui calcul le taux de satisfaction dans cette ville. C'est-à-dire le nombre de gens qui ont aimé par rapport à la taille de la liste.Ensuite ajoute ce nombre à la liste
L
en utilisant une méthode spécifique aux listes. À la fin de la boucle, la listeL
doit contenir 20 élémentsSolution
On commence par définir la variable
taux
sous la variableL1
Cette variable représente le taux de satisfaction dans la ville donc il faut compter le nombre de 1 de la liste
L1
et diviser par la taille de la liste. SoitL1.count(1) / len(L1)
Ensuite on ajoute ce nombre à la liste
L
à l'aide de la méthodeappend
en faisantL.append(taux)
L = [] for ville in range(20): L1 = [sondage() for n in range(100)] taux = L1.count(1) / len(L1) L.append(taux)
- 5
Si tu affiches la liste
L
dans la console tu vas observer des fluctuations du taux de satisfaction d'une ville à l'autre. Comme attendu !Pour faire notre estimation on va se baser sur le taux moyen. Autrement dit on veut calculer une moyenne des valeurs de
L
. Mais on ne va pas recoder la fonctionmoyenne
, on va faire plus simple.En Python il y a une fonction
sum
qui comme son nom l'indique, calcule la somme des éléments. Elle prend une liste en argument. Par exemple>>> sum([1,2,3]) 6
Défini en dehors de la boucle for une variable
taux_moyen
qui calcule la moyenne des éléments deL
en utilisant la fonctionsum
. Affiche ensuite cette variable à l'aide deprint
Solution
Il faut définir une variable
taux_moyen
. Cette variable doit être définie après la boucle for, autrement la listeL
est encore vide.Ensuite on calcule la moyenne en sommant les éléments de
L
et en divisant par le nombre d'éléments deL
, ce qui correspond àlen(L)
:L = [] for ville in range(20): L1 = [sondage() for n in range(100)] taux = L1.count(1) / len(L1) L.append(taux) taux_moyen = sum(L) / len(L) print(taux_moyen)
En statistiques, il est fréquent de vouloir estimer une probabilité à partir d'une fréquence observée sur un échantillon. À cause des fluctuations on ne peut pas connaître précisément la probabilité. Mais on peut déterminer un intervalle dans lequel elle se trouve : où est le nombre d'éléments de chaque échantillon.
Donc dans notre cas, si nous n'avions qu'un unique échantillon de taille 100 sur lequel le taux de satisfaction est de 60%, alors cette formule nous permet de dire que le taux réel de satisfaction est dans l'intervalle
Et plus la taille de l'échantillon augmente, plus cet intervalle est petit, donc précis !