Fonctionnement de choices
Tout est là:
#debut du script
import random
#mise en place des categories, ici mon ensemble contient soit des "chomeur", soit des "non chomeur", soit des "rentier"
maliste = ["chomeur", "non chomeur", "rentier"]
'''
ceci est une liste memorisee dans tirage
elle comprendra 10 elements tires au hasard avec remise dans un sac comprenant 33 chomeur, 70 non chomeur et 10 rentier)
'''
tirage=random.choices(maliste, weights = [33, 70,10], k = 10)
print(tirage, len(tirage))
#fin du script
Application 1
Ce qui donne l'idée suivante pour mes collègues de maths:
J'ai un population de 1000 personnes comprenant 158 chômeurs et donc 1000-158 non chômeurs.
On dira que je ne connais pas le nombre de personnes dans ma population!
Je tire un échantillon (ici 20)
Si pour l'échantillon je calcule le ratio chômeur de l'échantillon /effectif de l'échantillon
Alors puisque le tirage est aléatoire et sans remise ce ratio doit être le même que celui de ma population
=> d'ou l'estimation de la population
Ex de simulation
['chomeur', 'non chomeur', 'chomeur', 'non chomeur', 'non chomeur', 'chomeur', 'non chomeur', 'non chomeur', 'non chomeur', 'chomeur', 'non chomeur', 'non chomeur', 'non chomeur', 'chomeur', 'non chomeur', 'non chomeur', 'chomeur', 'non chomeur', 'non chomeur', 'non chomeur']
526.6666666666666
Script
#debut du script
import random
#mise en place
mylist = ["chomeur", "non chomeur"]
#pour test jouer avec les valeurs des 3 lignes du dessous
nbrepop=1000 # pop de sees ;)
nbrechompop=158 # nbre de chomeurs de sees
ech=20 # nombre d'element tiré
nbrenonchompop=nbrepop-nbrechompop
#population
'''
Soit une population de 1000 indiv comprenant 158 chomeurs et 842 non chomeurs
tirage est alors une liste extraite au hasard de 20 elements tires parmis les 1000
Attention, erreur possible div par 0 si pas de chom tiré dans l'echantillon
'''
#ceci est une liste mémorisée dans tirage
tirage=random.choices(mylist, weights = [nbrechompop, nbrenonchompop], k = ech)
print(tirage)
# xxxech pour echantillon
nbrechomech=tirage.count("chomeur")
nbrenonchomech=tirage.count("non chomeur")
#estimation selon methode delphine jugan
nbrepop=ech*nbrechompop/nbrechomech
print(nbrepop)
#fin du script
Application 2
Mais un prof de maths n'est jamais satisfait ;)
Principe
Sur la base du problème du dessus, je simule ici 100 tirages et donc 100 estimations de la population initiale que je mémorise dans une liste. Puis je calcule la moyenne puis la médiane de cette liste d'estimations
Script
import random
import numpy as np
#mise en place
mylist = ["chomeur", "non chomeur"]
#pour test jouer avec les valeurs des 3 lignes du dessous
nbrepop=1000 # pop de sees ;)
nbrechompop=158 # nbre de chomeurs de sees
ech=10 # nombre d'element tiré
nbrenonchompop=nbrepop-nbrechompop
#population
'''
Soit une population de 1000 indiv comprenant 158 chomeurs et 842 non chomeurs
tirage est alors une liste extraite au hasard de 20 elements tires parmis les 1000
Attention, erreur possible div par 0 si pas de chom tiré dans l'echantillon => protection ligne 22-26
'''
simu=[]
for i in range(100):
#ceci est une liste mémorisée dans tirage
tirage=random.choices(mylist, weights = [nbrechompop, nbrenonchompop], k = ech)
#ceci est une protection pour eviter un tirage avec nbrechomech=0 car sinon erreur div 0 en bas
while tirage.count("chomeur")==0:
tirage=random.choices(mylist, weights = [nbrechompop, nbrenonchompop], k = ech)
#fin de la protection
# xxxech pour echantillon
nbrechomech=tirage.count("chomeur")
nbrenonchomech=tirage.count("non chomeur")
#estimation pop initiale
nbrepop=ech*nbrechompop/nbrechomech
simu.append(nbrepop)
print(simu)
print(np.mean(simu))
print(np.median(simu))
Aucun commentaire:
Enregistrer un commentaire
Tout commentaire nous engage ;)