﻿# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as scs

#%% Exercice 1.1

plt.figure()

plt.subplot(3,2,1)
X = np.linspace(-5,5,100)
plt.plot(X,scs.norm.pdf(X,scale=0.5))
plt.plot(X,scs.norm.pdf(X,scale=1))
plt.plot(X,scs.norm.pdf(X,scale=2))
plt.title(u'Densité loi gaussienne')
plt.legend([u'sigma = 0.5',u'sigma = 1',u'sigma = 2'])

plt.subplot(3,2,2)
X = np.linspace(-5,5,100)
plt.plot(X,scs.norm.cdf(X,scale=0.5))
plt.plot(X,scs.norm.cdf(X,scale=1))
plt.plot(X,scs.norm.cdf(X,scale=2))
plt.title(u'Fonction de répartition loi gaussienne')
plt.legend([u'sigma = 0.5',u'sigma = 1',u'sigma = 2'])


plt.subplot(3,2,3)
X = np.linspace(-5,5,100)
plt.plot(X,scs.cauchy.pdf(X))
plt.title(u'Densité loi de Cauchy')

plt.subplot(3,2,4)
X = np.linspace(-5,5,100)
plt.plot(X,scs.norm.cdf(X))
plt.title(u'Fonction de répartition loi de Cauchy')


plt.subplot(3,2,5)
X = np.linspace(0,6,100)
plt.plot(X,scs.gamma.pdf(X,0.5))
plt.plot(X,scs.gamma.pdf(X,1))
plt.plot(X,scs.gamma.pdf(X,2))
plt.title(u'Densité loi Gamma')
plt.legend([u'alpha = 0.5',u'alpha = 1',u'alpha = 2'])

plt.subplot(3,2,6)
X = np.linspace(0,6,100)
plt.plot(X,scs.gamma.cdf(X,0.5))
plt.plot(X,scs.gamma.cdf(X,1))
plt.plot(X,scs.gamma.cdf(X,2))
plt.title(u'Fonction de répartition loi Gamma')
plt.legend([u'alpha = 0.5',u'alpha = 1',u'alpha = 2'])

plt.show()

#%% Exercice 1.2

plt.figure()

X = np.linspace(-10,10,500)
plt.plot(X,scs.norm.pdf(X,0,1))
plt.plot(X,scs.cauchy.pdf(X))
plt.title(u'Densité des lois gaussiennes et Cauchy')
plt.legend([u'gaussienne',u'Cauchy'])

plt.show()

#%% Exercice 1.3

plt.figure()
X = np.linspace(-5,5,500)
sigmas = [1,0.5,0.25,0.1,0.05]
for s in sigmas:
    plt.plot(X,scs.norm.pdf(X,scale=s))
plt.legend([u'sigma = ' + str(s) for s in sigmas])
plt.title(u'Densité de la loi gaussienne')
plt.show()

plt.figure()
for s in sigmas:
    plt.plot(X,scs.norm.cdf(X,scale=s))
plt.legend([u'sigma = ' + str(s) for s in sigmas])
plt.title(u'Fonction de répartition de la loi gaussienne')
plt.show()

 
#%% Exercice 1.4

plt.figure()

X = np.linspace(0,5,500)
ks = [1,2,4,8,16,32,64]
for k in ks:
    plt.plot(X,scs.gamma.pdf(X,k,scale=1./k))
plt.legend([u'k = ' + str(k) for k in ks])
plt.title(u'Densité de la loi Gamma')

plt.show()

plt.figure()

X = np.linspace(0,2,500)
plt.plot(X,scs.gamma.pdf(X,100,scale=0.01))
plt.plot(X,scs.norm.pdf(X,loc=1,scale=0.1))
plt.legend([u'loi Gamma, alpha=beta=100',u'loi gaussienne, mu=1, sigma=0.1'])
plt.title(u'Comparaison des densités des lois Gamma et gaussienne')

plt.show()



#%% Exercice 2.1

plt.figure()

plt.subplot(3,2,1)
X = np.arange(0,11)
plt.stem(X,scs.poisson.pmf(X,0.5),markerfmt='bD')
plt.stem(X,scs.poisson.pmf(X,2),markerfmt='gs')
plt.stem(X,scs.poisson.pmf(X,5),markerfmt='ro')
plt.legend([u'lambda = 0.5',u'lambda = 2',u'lambda = 5'])
plt.title(u'Fonction de masse loi de Poisson')

plt.subplot(3,2,2)
plt.step(X,scs.poisson.cdf(X-1,0.5))
plt.step(X,scs.poisson.cdf(X-1,2))
plt.step(X,scs.poisson.cdf(X-1,5))
plt.legend([u'lambda = 0.5',u'lambda = 2',u'lambda = 5'])
plt.title(u'Fonction de répartition loi de Poisson')

plt.subplot(3,2,3)
X = range(0,21)
plt.stem(X,scs.binom.pmf(X,20,0.2),markerfmt='bD')
plt.stem(X,scs.binom.pmf(X,20,0.5),markerfmt='gs')
plt.stem(X,scs.binom.pmf(X,20,0.8),markerfmt='ro')
plt.title(u'Fonction de masse loi binomiale')
plt.legend([u'p = 0.2',u'p = 0.5',u'p = 0.8'])

plt.subplot(3,2,4)
plt.step(X,scs.binom.cdf(X,20,0.2), where='post')
plt.step(X,scs.binom.cdf(X,20,0.5), where='post')
plt.step(X,scs.binom.cdf(X,20,0.8), where='post')
plt.title(u'Fonction de répartition loi binomiale')
plt.legend([u'p = 0.2',u'p = 0.5',u'p = 0.8'])


plt.subplot(3,2,5)
X = range(0,11)
plt.stem(X,scs.geom.pmf(X,0.7),markerfmt='bD')
plt.stem(X,scs.geom.pmf(X,0.5),markerfmt='gs')
plt.stem(X,scs.geom.pmf(X,0.2),markerfmt='ro')
plt.legend([u'p = 0.7',u'p = 0.5',u'p = 0.2'])
plt.title(u'Fonction de masse loi géométrique')

plt.subplot(3,2,6)
plt.step(X,scs.geom.cdf(X,0.7), where='post')
plt.step(X,scs.geom.cdf(X,0.5), where='post')
plt.step(X,scs.geom.cdf(X,0.2), where='post')
plt.legend([u'p = 0.7',u'p = 0.5',u'p = 0.2'])
plt.title(u'Fonction de répartition loi géométrique')

plt.show()



#%% Exercice 2.2

plt.figure()

X = range(0,11)
plt.stem(X,scs.binom.pmf(X,10,1./10),markerfmt='bD')
plt.stem(X,scs.binom.pmf(X,20,1./20),markerfmt='gs')
plt.stem(X,scs.binom.pmf(X,40,1./40),markerfmt='ro')
plt.title(u'Fonction de masse loi binomiale, p = 1/n')
plt.legend([u'n = 10',u'n = 20',u'n = 40'])

plt.show()

plt.figure()

plt.step(X,scs.binom.cdf(X,10,1./10), where='post')
plt.step(X,scs.binom.cdf(X,20,1./20), where='post')
plt.step(X,scs.binom.cdf(X,40,1./40), where='post')
plt.title(u'Fonction de répartition loi binomiale, p = 1/n')
plt.legend([u'n = 10',u'n = 20',u'n = 40'])

plt.show()

plt.figure()

plt.stem(X,scs.binom.pmf(X,100,1./100),markerfmt='bD')
plt.stem(X,scs.poisson.pmf(X,1),markerfmt='gs')
plt.title(u'Comparaison fonctions de masse loi binomiale, p=1/n et loi de Poisson')
plt.legend([u'loi binomiale, n = 100, p = 0.01',u'loi de Poisson, lambda = 1'])

plt.show()



#%% Exercice 2.3

plt.figure()

X = range(0,101)
plt.stem(X,scs.binom.pmf(X,10,0.5),markerfmt='bD')
plt.stem(X,scs.binom.pmf(X,30,0.5),markerfmt='gs')
plt.stem(X,scs.binom.pmf(X,100,0.5),markerfmt='ro')
plt.title(u'Fonction de masse loi binomiale, p = 0.5')
plt.legend([u'n = 10',u'n = 30',u'n = 100'])

plt.show()

plt.figure()

plt.step(X,scs.binom.cdf(X,10,0.5), where='post')
plt.step(X,scs.binom.cdf(X,30,0.5), where='post')
plt.step(X,scs.binom.cdf(X,100,0.5), where='post')
plt.title(u'Fonction de répartition loi binomiale, p = 0.5')
plt.legend([u'n = 10',u'n = 30',u'n = 100'])

plt.show()

plt.figure()

plt.stem(X,scs.binom.pmf(X,100,0.5),markerfmt='bD')
Y = np.linspace(0,100,500)
plt.plot(Y,scs.norm.pdf(Y,loc=50,scale=5),c='g')
plt.title(u'Comparaison fonctions de masse loi binomiale, p=0.5 et loi gaussienne')
plt.legend([u'loi gaussienne, mu = 50, sigma = 5',u'loi binomiale, n = 100, p = 0.5'])

plt.show()


#%% Exercice 3

Fission = np.loadtxt(u'TP1_Fission.txt')
print(u'Taille de l\'échantillon : ', np.size(Fission))
print(u'Moyenne : ', np.mean(Fission))
print(u'Premier quartile : ', np.percentile(Fission,25))
print(u'Médiane : ', np.median(Fission))
print(u'Troisième quartile : ', np.percentile(Fission,75))
print(u'Ecart interquartile : ', np.percentile(Fission,75) - np.percentile(Fission,25))
print(u'Ecart-type : ', np.std(Fission))
print(u'Maximum : ', np.max(Fission))
print(u'Minimum : ', np.min(Fission))

#%% 

mu = np.mean(Fission)

plt.figure()

plt.subplot(2,1,1)
X = np.linspace(0,np.max(Fission),100)
plt.hist(Fission,bins=30,density=True)
plt.plot(X,scs.expon.pdf(X,scale=mu))
plt.xlabel(u'Durée (ms)')
plt.ylabel(u'Fréquence normalisée')
plt.title(u'Histogramme des données (expérience Fission)\net densité de la loi exponentielle')
plt.legend([u'Histogramme', u'Densité de la loi exponentielle'])

plt.subplot(2,1,2)
plt.step(np.sort(Fission),np.arange(0,1,1./len(Fission)))
plt.plot(X,scs.expon.cdf(X,scale=mu))
plt.xlabel(u'Durée (ms)')
plt.ylabel(u'Fréquence normalisée')
plt.title(u'Fonction de répartition empirique (expérience Fission)\net fonction de réparition de la loi exponentielle')
plt.legend([u'Fonct. de rép. empirique', u'Fonct. de rép. de la loi exponentielle'],loc='lower right')

plt.show()



#%% Exercice 4.1

N = np.arange(0,7)
Frequences = np.array([56,22,9,1,0,1,0])

plt.figure()

plt.stem(N,Frequences)
plt.xlabel(u'Nombre de merles')
plt.ylabel(u'Frequences')
plt.title(u'Nombre de merles captivés par jour')

plt.show()


#%% Exercice 4.3

L = np.dot(N,Frequences)/float(sum(Frequences))


#%% Exercice 4.4

plt.figure()

plt.stem(N,Frequences,markerfmt='bD')
plt.xlabel(u'Nombre de merles')
plt.ylabel(u'Frequences')
plt.title(u'Comparaison des données avec la fonction de masse\nde la loi de Poisson de paramètre lambda='+str(L))
plt.stem(N,sum(Frequences)*scs.poisson.pmf(N,L),markerfmt='gs')
plt.legend([u'données', u'loi de Poisson'])

plt.show()


