# imporation des bibliothèques

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats

# importation des données depuis le fichier g_data.csv
fichier  =open('g_data.csv','r') 	# ouverture du fichier pour le rendre lisible
data=fichier.readlines() 		    # copie du contenu du fichier dans une variable 'data'
fichier.close() 			        # fermeture du fichier
N=len(data) 				        # création d'une variable 'N' égale au nombre de lignes du fichier


g=(N-2)*[0] 				        # création de la variable de type liste qui contiendra les valeurs de g
grandeur = data[0] 			        # récupération du nom de la grandeur (1ere ligne du fichier csv)
unité = data[1] 			        # récupération de l'unité (2e ligne du fichier csv)

#la boucle va copier au fur et à mesure les données d'une ligne dans la variable g
for i in range(2,len(data)): 		# les deux premières lignes ne contiennent pas de données
    data[i]=data[i].replace(',','.')# remplace les virgules du fichier d'origine par des points
    g[i-2]=eval(data[i])            # copies des valeurs contenues dans data vers la variable g[]





# préparation de l'histogramme
valRef = 9.81                       # on fixe la valeur de référence

N=int(np.sqrt(len(g)))              # calcul du nombre de classes de l'histogramme

plt.clf                             # efface la figure existante

n = plt.hist(g,bins=N, ec='black')  # fabrication de l'histogramme de g avec N classes (bins), entourage noir 

plt.xlabel(grandeur+ unité)         # nom de la grandeur en abscisses 
plt.ylabel('population')            # nom de la grandeur en ordonnées 
plt.title("Histogramme des valeurs de g") # affichage du titre


g_min=min(g)                        # enregistrement des valeurs minimum et maximum de g
g_max=max(g)                        # necessaire à l'affichage optionnel

g=np.array(g)                       # transformation de g en variable de type tableau pour pouvoir faire des clculs simplement
moy=g.mean()                        # calcul de la moyenne mean() est une méthode associée au type np.array
uc=g.std(ddof=1)/np.sqrt(len(g))    # calcul de l'écart type
zScore = abs((moy-valRef)/uc)       # calcul du Z score



# affichage des valeurs numériques

print('population =',len(g),'   Nombre de classes =',N)
print('moy = {0:G}'.format(moy) , '   uc = {0:G}'.format(uc), '  Z_Score = {0:G}'.format(zScore))



#---------------------------------options d'affichage------------------------------------
plt.axvline(x=moy, color='red')    # affichage d'une ligne verticale à la moyenne calculée

#tracé de la gaussienne ayant les mêmes caractéristiques de moyenne et d'écart type
x = np.linspace(g_min, g_max, 100) # fabrique 100 valeurs coomprises entre les valeurs minimum et maximum de g
y = scipy.stats.norm.pdf(x,moy,uc*N) # fabrication d'une gaussienne standard 
plt.plot(x,y/max(y)*max(n[0]), color='orange') # tracé de la courbe gaussienne 
#----------------------------------------------------------------------------------------


plt.show()                         # affiche la figure