Browse Source

New parameters in detail table

Ali 1 year ago
parent
commit
4b56e407b9
3 changed files with 63 additions and 9 deletions
  1. 1 1
      setup.py
  2. 2 0
      thesis_analysis/analyseStatistiques.py
  3. 60 8
      thesis_analysis/genererTableau.py

+ 1 - 1
setup.py

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

+ 2 - 0
thesis_analysis/analyseStatistiques.py

@@ -98,8 +98,10 @@ class analyseStatistiques ():
         description["n"] = data.shape[0]
         description["n"] = data.shape[0]
         description["mean"] = data.mean()
         description["mean"] = data.mean()
         description["median"] = data.median()
         description["median"] = data.median()
+        description["min"] = data.min()
         description["Q25"] = data.quantile(0.25)
         description["Q25"] = data.quantile(0.25)
         description["Q75"] = data.quantile(0.75)
         description["Q75"] = data.quantile(0.75)
+        description["max"] = data.max()
         description["std"] = data.std()
         description["std"] = data.std()
         description["std_mean"] = description["std"]/math.sqrt(description["n"])
         description["std_mean"] = description["std"]/math.sqrt(description["n"])
         description["ci_95"] = [description["mean"]-1.96*description["std_mean"], 
         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
         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
             Genere l'en-tête d'un tableau Descriptif
             Input :
             Input :
                 axes : liste des axes d'analyse
                 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
             Output : None
         """
         """
         
         
@@ -301,6 +303,19 @@ class genererTableau ():
         ## Pour les variables quantitatives
         ## Pour les variables quantitatives
         if type_variable == "quantitative":
         if type_variable == "quantitative":
             en_tete = en_tete + ["n", "mean", "std", "IC 95%"]
             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":
         elif type_variable == "qualitative":
             en_tete.append("n")
             en_tete.append("n")
             en_tete = en_tete + self.liste_modalites_variables[variable]
             en_tete = en_tete + self.liste_modalites_variables[variable]
@@ -408,13 +423,15 @@ class genererTableau ():
         
         
         return(lignes)
         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
             Genere des ligne d'analyse d'un tableau détaillé pour une variable
             Input :
             Input :
                 variable : nom de la variable
                 variable : nom de la variable
                 axe : axe sur lesquels générer les ligne
                 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 = []
         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"]["mean"])) # Moyenne
                 ligne.append(self._generer_str_valeur(self.data[variable]["global"]["std"])) # Ecart type
                 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%
                 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
                 ligne = ligne + ["", "", ""] # Blanc technique
-                
+
                 lignes.append(ligne)
                 lignes.append(ligne)
             else:
             else:
                 # On vérifie l'axe
                 # 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]["mean"])) # Moyenne
                     ligne.append(self._generer_str_valeur(donnees_axe[valeur_axe]["std"])) # Ecart type
                     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%
                     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
                     ligne = ligne + ["", "", ""] # Blanc technique
                     lignes.append(ligne)
                     lignes.append(ligne)
         else:
         else:
@@ -607,7 +657,7 @@ class genererTableau ():
         
         
         return(sortie)
         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.
             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
                 chemin : chemin du fichier de sortie
                 variable : nom de la variable à traiter
                 variable : nom de la variable à traiter
                 axes : liste des axes d'analyse
                 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 :
                 format_sortie :
                     'tsv' pour un tableau séparé par une tabulation
                     'tsv' pour un tableau séparé par une tabulation
                     'csv' pour un tableau séparé par une virgule
                     'csv' pour un tableau séparé par une virgule
@@ -635,14 +687,14 @@ class genererTableau ():
         # Récupération des donnée
         # Récupération des donnée
         
         
         # Génération de l'en-tête
         # 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
         # Création du tableau
         tableau = []
         tableau = []
         tableau.append(en_tete)
         tableau.append(en_tete)
         
         
         # On génère la première ligne d'analyse
         # 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
         # Ligne vide
         tableau.append(["" for x in range(len(tableau[-1]))])
         tableau.append(["" for x in range(len(tableau[-1]))])
@@ -650,7 +702,7 @@ class genererTableau ():
         # Ajout des axes
         # Ajout des axes
         if axes is not None:
         if axes is not None:
             for axe in axes:
             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
         # Generation de la sortie
         sortie = self._generer_sortie(chemin, tableau, format_sortie)
         sortie = self._generer_sortie(chemin, tableau, format_sortie)