123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import math
- import pandas as pd
- from .test import testQualitatif, testQuantitatif
- class analyseStatistiques ():
- """
- Permet l'analyse d'un jeu de données.
- Analyses univariés :
- Description des données
- Application des tests
- Input : dataset
- """
-
- def __init__ (self, df):
- # Chargement du dataframe
- self.df = df
-
- def _describe_qualitative (self, data):
-
- """
- Calculate n and p of each modalitie of the qualitative value
- Input : data, Pandas Series containing data to describe
- """
-
- table = data.value_counts()
- description = pd.DataFrame({'n':table, 'p':table/table.sum()}) \
- .to_dict("index")
- description["total"] = table.sum()
-
- return(description)
-
- def _get_sub_table(self, variable, axes):
-
- # On sélectionne les données à analyse
- if (axes is None):
- temp_data = self.df[[variable]]
- else:
- temp_data = self.df[[variable]+axes]
-
- temp_data = temp_data.dropna()
-
- return(temp_data)
-
-
- def _analyse_univarie_qualitative (self, variable, axes = None):
-
- temp_data = self._get_sub_table(variable, [])
-
- # On charge un dictionnaire vide
- analyse = {}
-
- analyse["n"] = temp_data.shape[0]
- ## Globale : en dehors de l'axe d'analyse
- analyse["global"] = self._describe_qualitative(temp_data[variable])
- ## Spécifique : Dans les axes d'analyse
- if (axes is not None):
-
- analyse["sous_groupes"] = {}
- analyse["test"] = {}
-
- for axe in axes:
-
- temp_data = self._get_sub_table(variable, [axe])
-
- # Axe values
- axe_values = temp_data[axe] \
- .drop_duplicates().values.tolist()
-
- # Description
- analyse["sous_groupes"][axe] = {}
- for values in axe_values:
- analyse["sous_groupes"][axe][values] = self._describe_qualitative(
- temp_data[
- temp_data[axe] == values
- ] \
- .reset_index(drop = True)[variable]
- )
- # Test statistique
- analyse["test"][axe] = testQualitatif(temp_data, variable,axe).best_test()
- analyse["type"] = "qualitative"
- return analyse
-
- def _describe_quantitative (self, data):
- """
- Calculate mean, median, Q25, 50, 27, std, std_mean and CI for quantitative data
- Input : data, Pandas Series containing data to describe
- """
-
- # Dict containing data
- description = {}
-
- 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"],
- description["mean"]+1.96*description["std_mean"]]
-
- return description
-
- def _analyse_univarie_quantitative (self, variable, axes = None):
-
- # On sélectionne les données à analyse
- temp_data = self._get_sub_table(variable, [])
-
- # On charge un dictionnaire vide
- analyse = {}
-
- analyse["n"] = temp_data.shape[0]
- ## Globale : en dehors de l'axe d'analyse
- analyse["global"] = self._describe_quantitative(temp_data[variable])
-
- ## Spécifique : Dans les axes d'analyse
- if (axes is not None):
-
- analyse["sous_groupes"] = {}
- analyse["test"] = {}
- for axe in axes:
-
- temp_data = self._get_sub_table(variable, [axe])
-
- # Axe values
- axe_values = temp_data[axe] \
- .drop_duplicates().values.tolist()
-
- # Description
- analyse["sous_groupes"][axe] = {}
- for values in axe_values:
- analyse["sous_groupes"][axe][values] = self._describe_quantitative(
- temp_data[
- temp_data[axe] == values
- ] \
- .reset_index(drop = True)[variable]
- )
- # Test statistique
- analyse["test"][axe] = testQuantitatif(temp_data, variable,axe).best_test()
- analyse["type"] = "quantitative"
- return analyse
-
- def analyse_univarie (self, variables, axes = None):
- """
- Analyse descriptive univariée
- variable : dictionnaire contenant la liste des variables à analyser de la forme :
- Key = Nom de la variable, Value : type de variable : quantitative ou qualitative
- axes : axes d'analyse de la variable, doivent être de type qualitative. Liste de variables.
- """
-
- # Sortie des résultats
- resultats = {}
-
- for variable, type_variable in variables.items():
- if type_variable == 'qualitative':
- resultats[variable] = self._analyse_univarie_qualitative(variable, axes)
- elif type_variable == 'quantitative':
- resultats[variable] = self._analyse_univarie_quantitative(variable, axes)
-
- return(resultats)
|