##préambule
import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd
plt.rcParams['figure.dpi'] = 500

#%% Loi faible grand nombres
n=100 #celui qui apparait dans le théorème
L=1000 #nombre de repetitions

Moyennes=[]
for i in range(L):
    R=rd.random(n)
    Moyennes.append(np.mean(R))
plt.xlim(0,1)
plt.hist(Moyennes,density=True,align=color='teal')
plt.show()

#%%Binomiale -> Poissons

lam=4
n=50
N=1000

R=rd.binomial(n,lam/n,N)
plt.xlim(0,25)
#plt.ylim(0,1)
plt.hist(R,density=True,histtype='stepfilled',bins=range(0,n+1))
plt.show()

##
R=rd.poisson(lam,N)
plt.xlim(0,25)
#plt.ylim(0,1)
plt.hist(R,density=True,histtype='stepfilled',bins=range(0,n+1))
plt.show()

##centrale limite
def phi(x):
    return np.exp(-x**2/2)/(np.sqrt(2*np.pi))
#tracé de la gaussienne
x=np.arange(-5,5,0.01)
y=phi(x)
plt.plot(x,y,color='red',linewidth=2)

#tracé de l'histogramme
n=50 # celui qui apparait dans la limite
L =1000000 # nombre de simulation



sigma=np.sqrt(1./12) #a adapter à la loi utilisée
moyenne=1/2
Xbarre=[]
for i in range(L):
    Xbarre.append(np.mean(rd.random(n)))


XbarreE=np.sqrt(n)*(np.array(Xbarre)-moyenne)/(sigma)

bins = np.linspace(-5, 5, 80)
histo, bins = np.histogram(XbarreE, bins=bins, density=True)

bin_centers = 0.5*(bins[1:] + bins[:-1])



plt.bar(bin_centers, histo)
plt.show()

#%% conformité à la moyenne

#Echantillon=np.round(rd.normal(1,0.15,35)-0.05,2)

Echantillon=np.array([0.79, 0.95, 0.85, 1.26, 0.97, 0.86, 1.09, 1.02, 0.85, 1.18, 0.7 ,
       0.72, 0.83, 0.75, 1.15, 0.97, 0.94, 0.93, 0.67, 1.14, 0.95, 0.63,
       0.89, 0.8 , 0.93, 1.09, 0.96, 0.71, 1.16, 0.94, 0.81, 0.95, 1.01,
       0.96, 1.01])
Moyenne=np.mean(Echantillon)

mu=1
Moyenne=np.mean(Echantillon)
EcartType=np.std(Echantillon,ddof=0) # non corrigé

from scipy.stats import norm
alpha=0.01
n=len(Echantillon)
quantite=abs((Moyenne-mu)/(EcartType/np.sqrt(n)))

quantile =norm.ppf(1-alpha/2)
print(quantite,quantile)
#%% drosophile
homotypique= 140
heterotipique=106
total=homotypique+heterotipique
proportion = homotypique/total

print(proportion)
from scipy.stats import norm
alpha=0.05


quantile =norm.ppf(1-alpha/2)
ErreurS=quantile/(2*np.sqrt(total))
print(proportion -ErreurS,proportion+ErreurS)

