4 Commits 63963670bf ... 4b56e407b9

Tác giả SHA1 Thông báo Ngày
  Ali 4b56e407b9 New parameters in detail table 1 năm trước cách đây
  Ali 91c09cb9aa Fix ouput mode of tableau detail 1 năm trước cách đây
  Ali 5efed13f97 Fix bug 1 năm trước cách đây
  Ali 3d83b04014 Adding parametrization of table column name 1 năm trước cách đây
3 tập tin đã thay đổi với 73 bổ sung14 xóa
  1. 1 1
      setup.py
  2. 2 0
      thesis_analysis/analyseStatistiques.py
  3. 70 13
      thesis_analysis/genererTableau.py

+ 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"], 

+ 70 - 13
thesis_analysis/genererTableau.py

@@ -16,14 +16,16 @@ class genererTableau ():
             qualitative_string_format : format d'écriture du n et de la proportion des variables qualitatives
     """
     
-    def __init__ (self, data, precision = 2, quantitative_string_format = "{mean:.2f} +/- {std:.2f} ({n})", qualitative_string_format = "{n} ({p:.2%})"):
+    def __init__ (self, data, precision = 2, quantitative_column_title = "{variable} mean +/- std (n)", quantitative_string_format = "{mean:.2f} +/- {std:.2f} ({n})", qualitative_column_title="{variable} no. (%)", qualitative_string_format = "{n} ({p:.2%})"):
         
         """
             Data : data contenant les données aggrégées, généré par analyseStatistiques.analyse_univarie
         """
         
         # Parametres
+        self.quantitative_column_title = quantitative_column_title
         self.quantitative_string_format = quantitative_string_format
+        self.qualitative_column_title = qualitative_column_title
         self.qualitative_string_format = qualitative_string_format
         self.absence_test = "Absence de test effectué (CI des tests conventionnels non remplis)"
         self.precision = precision
@@ -72,7 +74,7 @@ class genererTableau ():
         """
         
         texte = self.quantitative_string_format.format(
-            mean = round(mean, self.precision), 
+            mean=round(mean, self.precision), 
             std=round(std, self.precision), 
             n=round(n, self.precision)
         )
@@ -278,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
         """
         
@@ -299,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]
@@ -322,7 +339,7 @@ class genererTableau ():
             # Ligne d'une variable quantitative : une seule ligne
             
             ligne = [] # On instancie la ligne
-            ligne.append(variable+" mean +/- std (n)") # Ajout du nom de variable
+            ligne.append(self.quantitative_column_title.format(variable=variable)) # Ajout du nom de variable
             ligne.append("") # Espace vide, technique
             ligne.append(self._generer_str_mean_std_n(
                 self.data[variable]["global"]["mean"],
@@ -351,7 +368,7 @@ class genererTableau ():
             
             ## On écrit la première ligne : nom de variable et test
             ligne = [] # On instancie la ligne
-            ligne.append(variable+" no. (%)") # Nom de variable
+            ligne.append(self.qualitative_column_title.format(variable=variable)) # Nom de variable
             ligne = ligne + ["", ""] # Variable vides
             
             # Données liées à chaque axe
@@ -406,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 = []
@@ -426,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
@@ -457,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:
@@ -605,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.
@@ -615,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
@@ -633,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]))])
@@ -648,6 +702,9 @@ 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)
         
-        return(tableau)
+        return(sortie)