#!/usr/bin/env python
# coding: utf-8
# # Notion d'Echantillonnage
# ## Population étudiée
# Nous étudions dans une population de points de couleur noire et rouge le caractère rouge.
# On considère une population de 200 points noirs et 50 points rouges
# In[1]:
get_ipython().run_line_magic('pylab', 'inline')
# population de départ
npts = [200,50]
# taille des échantillons
taille=30
# Nombre d'échantilllons à fabriquer
n_exp=50
# In[2]:
from random import random
col=['black','red']
points=[]
for i in range(2):
for j in range(npts[i]):
x=random()*6-3
y=random()*6-3
points.append((x,y,col[i]))
print("Un point ressemble à ceci : ",points[0])
# Voici à quoi ressemble cette population :
# In[26]:
#import matplotlib as plt
# Mise en forme des données pour accélerer le tracé
pxnoir,pxrouge,pynoir,pyrouge=[],[],[],[]
for i in points:
if i[2]=='black':
pxnoir.append(i[0])
pynoir.append(i[1])
else:
pxrouge.append(i[0])
pyrouge.append(i[1])
pyplot.scatter(pxnoir,pynoir,marker='o',c='black',s=40)
pyplot.scatter(pxrouge,pyrouge,marker='o',c='red',s=40)
# ## Fabrication d'un échantillon
# A présent, prélevons un échantillon de quelques points aléatoirement dans notre population de points.
# Nous effections un tirage sans remise.
# In[15]:
def prendreEchantillon(taille):
points1=points.copy()
echantillon=[]
for i in range(taille):
echantillon.append(points1.pop(randint(len(points1))))
return echantillon
# In[25]:
echantillon=prendreEchantillon(taille)
for i in echantillon:
plt.scatter(i[0],i[1],marker='o',c=i[2],s=40)
# Fabriquons une fonction pour compter les points rouges d'un échantillon
# In[19]:
def compteRouge(ech):
nb=0
for i in ech:
if i[2]=='red':
nb+=1
return nb
print ("Il y a ",compteRouge(echantillon), " points rouges dans l'échantillon")
# Avons-nous la même proportion de points rouges dans notre échantillon que dans la population de départ ?
# In[40]:
taille=30
echantillon=prendreEchantillon(taille)
for i in echantillon:
plt.scatter(i[0],i[1],marker='o',c=i[2],s=40)
print("Dans la population de départ nous avons une fréquence de points rouges égale à",npts[1]/sum(npts))
print("Dans l'échantillon nous avons une fréquence de ",compteRouge(echantillon)/taille)
# ## Fluctuation d'échantillonnage
# Devons-nous nous étonner de cette différence ?
# Reproduisons plusieurs fois l'expérience et calculons pour chaque expérience la fréquence d'apparition des points rouge dans l'échantillon.
# In[41]:
freqs=[]
for i in range(n_exp):
echantillon=prendreEchantillon(taille)
freqs.append(compteRouge(echantillon)/taille)
print(freqs)
# Visualisons ces fréquences sur un graphique.
# In[42]:
scatter(range(n_exp),freqs,marker='x',c='blue',s=40)
axis([0,n_exp, 0, 1])
# ## Intervalle de fluctuation : Rappel de seconde
# En seconde, vous avez vu que les fréquences observées dans l'échantillon fluctuaient à l'intérieur d'un intervalle dont la largeur dépend de la taille de l'échantillon :
# $$I=\left[p-\dfrac{1}{\sqrt n};p+\dfrac{1}{\sqrt n}\right]$$
# In[43]:
p=npts[1]/sum(npts)
I=[p-1/sqrt(taille),p+1/sqrt(taille)]
print("I=",I)
# Visualisons cet intervalle sur le graphique précédent
# In[46]:
scatter(range(n_exp),freqs,marker='x',c='blue',s=40)
plot((0,n_exp),(I[0],I[0]))
plot((0,n_exp),(I[1],I[1]))
axis([0,n_exp, 0, 1])
# L'intervalle de fluctuation contient la plupart des échantillons.
# En réalité la probabilité qu'un échantillon sorte de cet intervalle n'est que de 5%.
# Dénombrons dans le cadre de notre expérience le nombre d'échantillons en dehors de l'intervalle :
# In[45]:
HorsIntervalle=[e for e in freqs if eI[1]]
d=len(HorsIntervalle)
print ("Il y a ",d, " échantillons hors de l'intervalle de fluctuation, soit", d/n_exp*100,"%" )
# A présent, modifiez les paramètres de l'expérience fixés au début et observez le résultat.