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)
Bool2017=[((df["Date"])[i])[6:10]=="2017" for i in range(len(df))]
#liste avec Vrai si la ième observation est en 2017

len(df[Bool2017])#353 jours en 2017

#3 (2 points)


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

SeuilEthane=[Seuil(Ethane[i]) for i in range(len(Benzene)) ]
sum(SeuilEthane)

table=pan.crosstab(SeuilEthane, columns="SeuilEthane",normalize=True)
print(table)
#col_0  SeuilBenzene
#row_0              
#0               0.046
#1               0.542
#2               0.412

#4  (1 point) 
fig,ax=plt.subplots()
ax.bar(['m<2 µg','5  µg>m>2 µg','m>5 µg'],height=table['SeuilEthane'])
fig.suptitle("Diagramme en Tuyau d'orgue Des dépassements des Seuils d'Éthane à Feyzin")


#5  (1 point) 
Ethane.describe()

np.mean(Ethane)#5.389
np.var(Ethane)#biaisé 15.862
np.var(Ethane,ddof=1)#non-biaisé 15.886

np.quantile(Ethane,0.25,interpolation='lower')#3.23


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

st.t.interval(0.90,df=len(x)-1,loc=np.mean(x),scale=st.sem(x))
#(1.50, 1.567)

#7 (2 points)
y=np.log(Propane)
np.corrcoef(x,y)#0.165 significativement non nulle, OK si réponse inverse ! difficile à dire sans test
#st.pearsonr(x,y) (0.16496852367624154, 1.7235190809236775e-05) la régression est significative

a,b=ms.linregress(x,y)[0:2]
print("y=",a,"*x+",b)
#y=0.16x + 1.7235190809236775e-05

#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 de l'Ethane en fonction du Benzene et droite de régression")


###### Exo 2

#1 (1.5 points)
N=500
X=st.expon.rvs(loc=0,scale=0.5,size=N)
np.mean(X)


#2  (1.5 points)

U=np.exp(-2 *X)

M=np.max(U)#proche de 1, 
print(M)
np.min(U)#avec min 0, on trace loi uniforme  sur [0,1] 


#3  (1 point)

fig,ax=plt.subplots()
ax.hist(U,bins=20)
fig.suptitle("Histogramme de U")


#4 (1.5 points)


plt.hist(U,bins=20,density=True)
x=np.linspace(0,1.2,100)
plt.plot(x,st.uniform.pdf(x,loc=0,scale=1))

#un plus grand N=5000 est néessaire largement (1000 encore assez mauvais)
N=5000
X=st.expon.rvs(loc=0,scale=0.5,size=N)
U=np.exp(-2 *X)
m=np.mean(X)#proche de 1, on trace une droite exponentielle de paramètre 1/np.mean(X)

plt.hist(U,bins=20,density=True)
x=np.linspace(0,1.2,100)
plt.plot(x,st.uniform.pdf(x,loc=0,scale=1))


#5 (2 points)
N=500
X=st.expon.rvs(loc=0,scale=0.5,size=N)


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(2)")

#6 (1.5 points) La limite est l'espérance 0.5 d'une loi E(2), 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(2)")
ax.plot(np.arange(1,N+1),np.repeat(0.5,N),color="red")
