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/Data68935.csv",sep="\t")


df=pan.read_csv("http://tinyurl.com/y39an7ef/Data68935.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])#361 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)#31

table=pan.crosstab(SeuilBenzene, columns="SeuilBenzene")
print(table)
#col_0  SeuilBenzene
#row_0              
#0               679
#1               27
#2                2

#4(1 points)

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

#count    708.000000
#mean       0.685325
#std        0.699883
#75%        0.830000


np.mean(Benzene)#0.685
np.var(Benzene)#biaisé 0.489
np.var(Benzene,ddof=1)#non-biaisé 30.489

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


#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.757, -0.644)

#7(2 points)
y=np.log(Propane)
np.corrcoef(x,y)# 0.843 est très significativement non nulle
#st.pearsonr(x,y) (0.8438714506896857, 4.498176143485748e-193), la régression est significative


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

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




###### Exo 2

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




#2 (2 points)
Y=np.cumsum(U)/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 U([0,1])")
#3 (2 points) La limite est l'espérance 0.5 d'une loi U([0,1]), on illustre la loi des grands nombres. 



#4 (1 point)

X=np.ceil(-2* np.log(U))

#5  (2 points)
table=pan.crosstab(X, columns="X",normalize=True)
table.plot.bar()

#Autre solution
fig,ax=plt.subplots()
x=np.arange(int(np.min(X)),int(np.max(X)+1))
ax.bar(x,np.reshape(table.values,len(table)),width=0.2)
fig.suptitle("Diagramme en bâton de X")
       
#6 (2 points)
m=np.mean(X);print(m)#proche de 2.5, on trace une loi géométrique de paramètre 1/np.mean(X)=0.2


fig,ax=plt.subplots()
x=np.arange(int(np.min(X)),int(np.max(X)+1))
ax.bar(x,np.reshape(table.values,len(table)),width=0.1)
x=np.arange(1,8)
ax.plot(x,st.geom.pmf(x,p=1/m),'or')
fig.suptitle("Diagramme en bâton de X comparé à loi G(0.4)")





