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