Pārlūkot izejas kodu

New parameters in detail table

Ali 1 gadu atpakaļ
vecāks
revīzija
4b56e407b9

+ 1 - 1
setup.py

@@ -41,6 +41,6 @@ setup(
     test_suite='tests',
     tests_require=test_requirements,
     url='https://github.com/alibell/py_thesis_toolbox',
-    version='0.0.2',
+    version='0.0.3',
     zip_safe=False,
 )

+ 2 - 0
thesis_analysis/analyseStatistiques.py

@@ -98,8 +98,10 @@ class analyseStatistiques ():
         description["n"] = data.shape[0]
         description["mean"] = data.mean()
         description["median"] = data.median()
+        description["min"] = data.min()
         description["Q25"] = data.quantile(0.25)
         description["Q75"] = data.quantile(0.75)
+        description["max"] = data.max()
         description["std"] = data.std()
         description["std_mean"] = description["std"]/math.sqrt(description["n"])
         description["ci_95"] = [description["mean"]-1.96*description["std_mean"], 

+ 60 - 8
thesis_analysis/genererTableau.py

@@ -280,12 +280,14 @@ class genererTableau ():
             
         return en_tete
     
-    def _generer_en_tete_detail(self, variable):
+    def _generer_en_tete_detail(self, variable, iqr=False, extremes=False):
         
         """
             Genere l'en-tête d'un tableau Descriptif
             Input :
                 axes : liste des axes d'analyse
+                iqr, boolean: Si true, intègle les intervalles interquartiles
+                extremes, boolean: Si true, intègle les valeurs extrêmes
             Output : None
         """
         
@@ -301,6 +303,19 @@ class genererTableau ():
         ## Pour les variables quantitatives
         if type_variable == "quantitative":
             en_tete = en_tete + ["n", "mean", "std", "IC 95%"]
+
+            extremes_iqr = [
+                ("min", extremes),
+                ("Q25", iqr),
+                ("median", iqr),
+                ("Q75", iqr),
+                ("max", extremes),
+            ]
+
+            for title, rule in extremes_iqr:
+                if rule:
+                    en_tete.append(title)
+
         elif type_variable == "qualitative":
             en_tete.append("n")
             en_tete = en_tete + self.liste_modalites_variables[variable]
@@ -408,13 +423,15 @@ class genererTableau ():
         
         return(lignes)
     
-    def _generer_lignes_detail(self, variable, axe = None):
+    def _generer_lignes_detail(self, variable, axe = None, extremes=False, iqr=False):
         
         """
             Genere des ligne d'analyse d'un tableau détaillé pour une variable
             Input :
                 variable : nom de la variable
                 axe : axe sur lesquels générer les ligne
+                iqr, boolean: Si true, intègle les intervalles interquartiles
+                extremes, boolean: Si true, intègle les valeurs extrêmes
         """        
     
         lignes = []
@@ -428,8 +445,25 @@ class genererTableau ():
                 ligne.append(self._generer_str_valeur(self.data[variable]["global"]["mean"])) # Moyenne
                 ligne.append(self._generer_str_valeur(self.data[variable]["global"]["std"])) # Ecart type
                 ligne.append(self._generer_str_ci(self.data[variable]["global"]["ci_95"])) # IC à 95%
+
+                extremes_iqr = [
+                    ("min", extremes),
+                    ("Q25", iqr),
+                    ("median", iqr),
+                    ("Q75", iqr),
+                    ("max", extremes),
+                ]
+
+                for value, rule in extremes_iqr:
+                    if rule:
+                        ligne.append(
+                            self._generer_str_valeur(
+                                self.data[variable]["global"][value]
+                            )
+                        )
+
                 ligne = ligne + ["", "", ""] # Blanc technique
-                
+
                 lignes.append(ligne)
             else:
                 # On vérifie l'axe
@@ -459,7 +493,23 @@ class genererTableau ():
                     ligne.append(self._generer_str_valeur(donnees_axe[valeur_axe]["mean"])) # Moyenne
                     ligne.append(self._generer_str_valeur(donnees_axe[valeur_axe]["std"])) # Ecart type
                     ligne.append(self._generer_str_ci(donnees_axe[valeur_axe]["ci_95"])) # IC à 95%
-                    
+
+                    extremes_iqr = [
+                        ("min", extremes),
+                        ("Q25", iqr),
+                        ("median", iqr),
+                        ("Q75", iqr),
+                        ("max", extremes),
+                    ]
+
+                    for value, rule in extremes_iqr:
+                        if rule:
+                            ligne.append(
+                                self._generer_str_valeur(
+                                    self.data[variable]["global"][value]
+                                )
+                            )
+
                     ligne = ligne + ["", "", ""] # Blanc technique
                     lignes.append(ligne)
         else:
@@ -607,7 +657,7 @@ class genererTableau ():
         
         return(sortie)
     
-    def tableau_detail_variable (self, chemin, variable, axes = None, format_sortie = "csv"):
+    def tableau_detail_variable (self, chemin, variable, axes = None, iqr=False, extremes=False, format_sortie = "csv"):
         
         """
             Décrit le contenu d'une variable selon un axe ou plusieurs axes donnés.
@@ -617,6 +667,8 @@ class genererTableau ():
                 chemin : chemin du fichier de sortie
                 variable : nom de la variable à traiter
                 axes : liste des axes d'analyse
+                iqr, boolean: Si True, inclus les intervalles interquartiles
+                extremes, boolean: Si True, inclus les extremes (min, max)
                 format_sortie :
                     'tsv' pour un tableau séparé par une tabulation
                     'csv' pour un tableau séparé par une virgule
@@ -635,14 +687,14 @@ class genererTableau ():
         # Récupération des donnée
         
         # Génération de l'en-tête
-        en_tete = self._generer_en_tete_detail(variable)
+        en_tete = self._generer_en_tete_detail(variable, extremes=extremes, iqr=iqr)
                 
         # Création du tableau
         tableau = []
         tableau.append(en_tete)
         
         # On génère la première ligne d'analyse
-        tableau = tableau + self._generer_lignes_detail(variable, None)
+        tableau = tableau + self._generer_lignes_detail(variable, None, extremes=extremes, iqr=iqr)
         
         # Ligne vide
         tableau.append(["" for x in range(len(tableau[-1]))])
@@ -650,7 +702,7 @@ class genererTableau ():
         # Ajout des axes
         if axes is not None:
             for axe in axes:
-                tableau = tableau + self._generer_lignes_detail(variable, axe)
+                tableau = tableau + self._generer_lignes_detail(variable, axe, extremes=extremes, iqr=iqr)
 
         # Generation de la sortie
         sortie = self._generer_sortie(chemin, tableau, format_sortie)