#!/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.