import pandas as pan #pour les donnÃ©es :gestion des data.frame
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats.mstats as ms
import scipy.stats as st


###### Exo 1
df=pan.read_csv("/home/Enseignement/Cours/StatInfo/tpnote2024/Data34698.csv",sep="\t")


df=pan.read_csv("http://tinyurl.com/y39an7ef/Data34698.csv",sep="\t")
for nom in df.keys():
    globals()[nom] = df[nom]
    
df.keys()


#1 (1 point) Date est qualitative, toutes les autres sont quantitatives continues (1 point)

#2 (1 point)
Bool2016=[(Date[i])[6:10]=="2016" for i in range(len(df))]
#liste avec Vrai si la ième observation est en 2016

len(df[Bool2016])#319 jours en 2016



#3 (2 points)
def Seuil(x):
    if x> 5: 
        return(2)
    elif x>2:
        return(1)
    else:
        return(0)
        

SeuilBenzene=[Seuil(Benzene[i]) for i in range(len(Benzene)) ]
sum(SeuilBenzene)#339

table=pan.crosstab(SeuilBenzene, columns="SeuilBenzene")
print(table)
#col_0  SeuilBenzene
#row_0              
#0               390
#1               225
#2                57

#4  (1 point) 

fig,ax=plt.subplots()
ax.pie(table['SeuilBenzene'],labels=['m<2 µg','5  µg>m>2 µg','m>5 µg'])
fig.suptitle("Diagramme Circulaire Des dépassements des Seuils du Benzene à Feyzin")



#5 (1 point)
Benzene.describe()

np.mean(Benzene)#2.181
np.var(Benzene)#biaisé 3.711
np.var(Benzene,ddof=1)#non-biaisé 3.716

np.quantile(Benzene,0.75,interpolation='lower')#2.92


#6 (2 points)
x=np.log(Benzene)

st.t.interval(0.95,df=len(x)-1,loc=np.mean(x),scale=st.sem(x))
#(0.329, 0.471)

#7 (2 points)
y=np.log(Propane)
np.corrcoef(x,y)#-0.213 significativement non nulle
#st.pearsonr(x,y) (-0.21291845458376615, 2.500589012594671e-08), la régression est significative

a,b=ms.linregress(x,y)[0:2]
print("y=",a,"*x+",b)

#8 (1 point)
fig,ax=plt.subplots()
ax.plot(x,y,'.b')
ax.axline(xy1=(0,b),slope=a,color="red")
fig.suptitle("Nuage de points du Propane en fonction du Benzene et droite de régression")


###### Exo 2

#1 (1 point)
N=500
U=st.uniform.rvs(0,1,size=N)

#2 (1 point)

X=-np.log(U)

#3  (1 point)
fig,ax=plt.subplots()
ax.hist(X,bins=20)
fig.suptitle("Histogramme de X")

#4 (2 points)
m=np.mean(X);print(m)#proche de 1, on trace une droite exponentielle de paramètre 1/np.mean(X)


fig,ax=plt.subplots()
ax.hist(X,bins=20,density=True)
x=np.linspace(0,10,100)
ax.plot(x,st.expon.pdf(x,loc=0,scale=m))
fig.suptitle("Histogramme de X comparé à densité de E(1)")


#plus grand N= 500 ou 2000 suffisent largement
N=2000
U=st.uniform.rvs(0,1,size=N)
X=-np.log(U)
m=np.mean(X)#proche de 1, on trace une droite exponentielle de paramètre 1/np.mean(X)


fig,ax=plt.subplots()
ax.hist(X,bins=40,density=True)
x=np.linspace(0,10,100)
ax.plot(x,st.expon.pdf(x,loc=0,scale=m))
fig.suptitle("Histogramme de X comparé à densité de E(1)")



#5 (2 points)
N=500
U=st.uniform.rvs(0,1,size=N)
X=-np.log(U)

Y=np.cumsum(X)/np.arange(1,N+1)
fig,ax=plt.subplots()
ax.plot(np.arange(1,N+1),Y)
fig.suptitle("Illustration de la LGN pour variables E(1)")
#6 (2 points) La limite est l'espérance 1 d'une loi E(1), on illustre la loi des grands nombres. 

#7 (1 point)
fig,ax=plt.subplots()
ax.plot(np.arange(1,N+1),Y)
fig.suptitle("Illustration de la LGN pour variables E(1)")
ax.plot(np.arange(1,N+1),np.repeat(1,N),color="red")


