Analyse des données: application facile des statistiques descriptives et des statistiques d'estimation aux données CSV en Python

introduction

Les statistiques descriptives et les statistiques d'estimation sont souvent utilisées dans l'analyse des données au stade de la compréhension des données avant de construire un modèle d'apprentissage automatique. Cette fois, afin de comprendre les données, j'ai lu les données CSV avec le dataframe des pandas et créé le code source pour appliquer facilement des statistiques descriptives et des statistiques d'estimation.

Données de préparation

Créez des données CSV en entrée. Les données utilisées pour créer le code source sont présentées ci-dessous.

x1,x2,x3,x4,x5
1,11,1,1,1
2,12,1,1,2
3,13,1,1,3
4,14,1,1,4
5,150,1,1,5
5,150,1,1,5
4,160,1,1,4
3,180,1,1,3
2,180,1,1,2
1,190,2,2,2

Code source

Le code source modulaire est illustré ci-dessous.

class StatisticalTests():
    def __init__(self):
        pass

    @classmethod
    def basic_info(cls, df):
        print('Statistiques de base------------------start')
        print('df.head(3)-------------')
        print(df.head(3))
        print('df.dtypes-------------')
        print(df.dtypes)
        print('df.describe(include=\'all\')-------------')
        print(df.describe(include='all'))

    @classmethod
    def t_interval(cls, df):
        print('Population moyenne 95%Intervalle de confiance-------------------start')
        for column_name, s in df.iteritems():
            u2 = s.var(ddof=1)  #Estimation de la variance de la population (variance sans biais)
            m = s.mean()  #Moyenne de l'échantillon
            n = len(s)-1  #Degré de liberté
            se = math.sqrt(u2/len(s))  #Erreur standard

            ci1, ci2 = st.t.interval(alpha=0.95, loc=m, scale=se, df=n)
            print(f'Nom de colonne= {column_name} //Population moyenne 95%IC de l'intervalle de confiance= '
                  f'[{ci1:.2f} , {ci2:.2f}] //Moyenne de l'échantillon[{m}]')

    @classmethod
    def shapiro(cls, df):
        print('Test de Shapiro Wilk(Test de normalité)------------------start')
        for column_name, s in df.iteritems():
            _, p = st.shapiro(s)
            if p >= 0.05:
                print(f'Nom de colonne= {column_name} //valeur p= {p:.3f} '
                      f'//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il n'y a pas de normalité')
            else:
                print(f'Nom de colonne= {column_name} //valeur p= {p:.3f} '
                      f'//Résultat du test:Rejeter l'hypothèse nulle, pas de normalité')

    @classmethod
    def levene(cls, xa, xb):
        print('Entre 2 groupes:Population moyenne 95%Test d'isodispersité par test rubéen-------------------start')
        _, p = st.levene(xa, xb, center='mean')
        if p >= 0.05:
            print(f'valeur p= {p:.3f} //Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire que les deux échantillons ne sont pas équidistants.')
        else:
            print(f'valeur p= {p:.3f} //Résultat du test:Rejetant l'hypothèse nulle, les deux échantillons ne sont pas équidistants')

    @classmethod
    def ttest_rel(cls, xa, xb):
        print('Entre 2 groupes:Test t correspondant-------------------start')
        #L'hypothèse nulle est qu'il n'y a pas de différence significative entre les valeurs moyennes des deux échantillons.
        #S'il y a une réponse, vérifiez la même personne avant et après l'administration du médicament comme M. A et M. B
        t, p = st.ttest_rel(xa, xb)
        if np.sign(t) == -1:
            a = xa
            xa = xb
            xb = a

        t, p = st.ttest_rel(xa, xb)
        mu = abs(xa.mean()-xb.mean())
        se = mu/t
        n = len(xa)+len(xb)-2
        ci1, ci2 = st.t.interval(alpha=0.95, loc=mu, scale=se, df=n)
        if p >= 0.05:
            print(f'valeur p={p:.3f} //valeur t= {t:.2f}')
            print(f'//Différence de valeur moyenne= {mu:.2f} //Erreur standard de différence= {se:.2f}')
            print(f'//95 de différence moyenne%IC de l'intervalle de confiance= [{ci1:.2f} , {ci2:.2f}]')
            print('//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il existe une différence significative entre les valeurs moyennes des deux échantillons.')
        else:
            print(f'valeur p={p:.3f} //valeur t= {t:.2f}')
            print(f'//Différence de valeur moyenne= {mu:.2f} //Erreur standard de différence= {se:.2f}')
            print(f'//95 de différence moyenne%IC de l'intervalle de confiance= [{ci1:.2f} , {ci2:.2f}]')
            print(f'//Résultat du test:En rejetant l'hypothèse nulle, il y a une différence significative dans la moyenne des deux échantillons')

    @classmethod
    def ttest_ind_equal_var_true(cls, xa, xb):
        print('Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性あり)test t-------------------start')
        #L'hypothèse nulle est qu'il n'y a pas de différence significative entre les valeurs moyennes des deux échantillons.
        #Sans correspondance, ne vérifiez pas la même personne avant et après l'administration du médicament comme M. A et M. B
        t, p = st.ttest_ind(xa, xb, equal_var=True)
        if np.sign(t) == -1:
            a = xa
            xa = xb
            xb = a

        t, p = st.ttest_ind(xa, xb, equal_var=True)
        cls._ttest_ind(t, p, xa, xb)

    @classmethod
    def ttest_ind_equal_var_false(cls, xa, xb):
        print('Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性なし)test t-------------------start')
        #L'hypothèse nulle est qu'il n'y a pas de différence significative entre les valeurs moyennes des deux échantillons.
        #Sans correspondance, ne vérifiez pas la même personne avant et après l'administration du médicament comme M. A et M. B
        t, p = st.ttest_ind(xa, xb, equal_var=False)
        if np.sign(t) == -1:
            a = xa
            xa = xb
            xb = a

        t, p = st.ttest_ind(xa, xb, equal_var=False)
        cls._ttest_ind(t, p, xa, xb)

    @classmethod
    def _ttest_ind(cls, t, p, xa, xb):
        mu = abs(xa.mean()-xb.mean())
        se = mu/t
        n = len(xa)+len(xb)-2
        ci1, ci2 = st.t.interval(alpha=0.95, loc=mu, scale=se, df=n)
        if p >= 0.05:
            print(f'valeur p={p:.3f} //valeur t= {t:.2f}')
            print(f'//Différence de valeur moyenne= {mu:.2f} //Erreur standard de différence= {se:.2f}')
            print(f'//95 de différence moyenne%IC de l'intervalle de confiance= [{ci1:.2f} , {ci2:.2f}]')
            print('//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il existe une différence significative entre les valeurs moyennes des deux échantillons.')
        else:
            print(f'valeur p={p:.3f} //valeur t= {t:.2f}')
            print(f'//Différence de valeur moyenne= {mu:.2f} //Erreur standard de différence= {se:.2f}')
            print(f'//95 de différence moyenne%IC de l'intervalle de confiance= [{ci1:.2f} , {ci2:.2f}]')
            print(f'//Résultat du test:En rejetant l'hypothèse nulle, il y a une différence significative dans la moyenne des deux échantillons')

    @classmethod
    def chisquare(cls, sample, answer):
        print('Test d'aptitude-------------------start')
        #Hypothèse d'opposition: Les données obtenues ne correspondent pas à la distribution théorique.
        sample = sample.tolist()
        answer = answer.tolist()

        p = st.chisquare(sample, f_exp=answer)[1]
        if p >= 0.05:
            print(f'valeur p= {p:.3f} //Résultat du test:On ne peut pas conclure que l'hypothèse nulle ne correspond pas à la distribution théorique.')
        else:
            print(f'valeur p= {p:.3f} //Résultat du test:Nous rejetons l'hypothèse nulle et concluons qu'elle ne correspond pas à la distribution théorique.')

    @classmethod
    def chi2_contingency(cls, df):
        print('Test d'indépendance-------------------start')
        # Usage)
        #Nombre de cancérogènes Nombre de non cancérigènes
        #Groupe fumeur 30 70
        #Groupe non fumeur 20 80
        # print(st.chi2_contingency(x))
        p = st.chi2_contingency(df.values)[1]
        if p >= 0.05:
            print(f'valeur p= {p:.3f} //Résultat du test:En adoptant l'hypothèse nulle, nous ne pouvons pas conclure que les deux variables ne sont pas indépendantes.')
        else:
            print(f'valeur p= {p:.3f} //Résultat du test:Rejetant l'hypothèse nulle, nous concluons que les deux variables ne sont pas indépendantes.')

    @classmethod
    def pearsonr(cls, xa, xb):
        print('Test du coefficient de corrélation-------------------start')
        #Faire une hypothèse nulle et une hypothèse alternative:L'hypothèse nulle est ρ=0, c'est-à-dire corrélation de population=0
        #L'hypothèse alternative est "ρ ≠ 0", c'est-à-dire la corrélation de population ≠ 0
        x1 = xa.values
        x2 = xb.values
        s = st.pearsonr(x1, x2)
        if s[1] >= 0.05:
            print(f'Coefficient de corrélation= {s[0]:.3f} //valeur p= {s[1]:.3f} //Résultat du test:Adoptez l'hypothèse nulle. On ne peut pas dire qu'il existe une corrélation.')
        else:
            print(f'Coefficient de corrélation= {s[0]:.3f} //valeur p= {s[1]:.3f} //Résultat du test:Rejetez l'hypothèse nulle. Il y a une corrélation.')

Résultat d'exécution

Un exemple d'exécution du code source modulaire ci-dessus est présenté ci-dessous. Vous pouvez voir que vous pouvez comprendre les données CSV.

Statistiques de base------------------start
df.head(3)-------------
   x1  x2  x3  x4  x5
0   1  11   1   1   1
1   2  12   1   1   2
2   3  13   1   1   3
df.dtypes-------------
x1    int64
x2    int64
x3    int64
x4    int64
x5    int64
dtype: object
df.describe(include='all')-------------
              x1          x2         x3         x4        x5
count  10.000000   10.000000  10.000000  10.000000  10.00000
mean    3.000000  106.000000   1.100000   1.100000   3.10000
std     1.490712   81.493013   0.316228   0.316228   1.37032
min     1.000000   11.000000   1.000000   1.000000   1.00000
25%     2.000000   13.250000   1.000000   1.000000   2.00000
50%     3.000000  150.000000   1.000000   1.000000   3.00000
75%     4.000000  175.000000   1.000000   1.000000   4.00000
max     5.000000  190.000000   2.000000   2.000000   5.00000
Population moyenne 95%Intervalle de confiance-------------------start
Nom de colonne= x1 //Population moyenne 95%IC de l'intervalle de confiance= [1.93 , 4.07] //Moyenne de l'échantillon[3.0]
Nom de colonne= x2 //Population moyenne 95%IC de l'intervalle de confiance= [47.70 , 164.30] //Moyenne de l'échantillon[106.0]
Nom de colonne= x3 //Population moyenne 95%IC de l'intervalle de confiance= [0.87 , 1.33] //Moyenne de l'échantillon[1.1]
Nom de colonne= x4 //Population moyenne 95%IC de l'intervalle de confiance= [0.87 , 1.33] //Moyenne de l'échantillon[1.1]
Nom de colonne= x5 //Population moyenne 95%IC de l'intervalle de confiance= [2.12 , 4.08] //Moyenne de l'échantillon[3.1]
Test de Shapiro Wilk(Test de normalité)------------------start
Nom de colonne= x1 //valeur p= 0.341 //Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il n'y a pas de normalité
Nom de colonne= x2 //valeur p= 0.004 //Résultat du test:Rejeter l'hypothèse nulle, pas de normalité
Nom de colonne= x3 //valeur p= 0.000 //Résultat du test:Rejeter l'hypothèse nulle, pas de normalité
Nom de colonne= x4 //valeur p= 0.000 //Résultat du test:Rejeter l'hypothèse nulle, pas de normalité
Nom de colonne= x5 //valeur p= 0.410 //Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il n'y a pas de normalité
Entre 2 groupes:Population moyenne 95%Test d'isodispersité par test rubéen-------------------start
valeur p= 0.000 //Résultat du test:Rejetant l'hypothèse nulle, les deux échantillons ne sont pas équidistants
Entre 2 groupes:Population moyenne 95%Test d'isodispersité par test rubéen-------------------start
valeur p= 0.813 //Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire que les deux échantillons ne sont pas équidistants.
Entre 2 groupes:Test t correspondant-------------------start
valeur p=0.003 //valeur t= 4.01
//Différence de valeur moyenne= 103.00 //Erreur standard de différence= 25.70
//95 de différence moyenne%IC de l'intervalle de confiance= [49.01 , 156.99]
//Résultat du test:En rejetant l'hypothèse nulle, il y a une différence significative dans la moyenne des deux échantillons
Entre 2 groupes:Test t correspondant-------------------start
valeur p=0.343 //valeur t= 1.00
//Différence de valeur moyenne= 0.10 //Erreur standard de différence= 0.10
//95 de différence moyenne%IC de l'intervalle de confiance= [-0.11 , 0.31]
//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il existe une différence significative entre les valeurs moyennes des deux échantillons.
Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性あり)test t-------------------start
valeur p=0.001 //valeur t= 4.00
//Différence de valeur moyenne= 103.00 //Erreur standard de différence= 25.77
//95 de différence moyenne%IC de l'intervalle de confiance= [48.85 , 157.15]
//Résultat du test:En rejetant l'hypothèse nulle, il y a une différence significative dans la moyenne des deux échantillons
Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性あり)test t-------------------start
valeur p=0.878 //valeur t= 0.16
//Différence de valeur moyenne= 0.10 //Erreur standard de différence= 0.64
//95 de différence moyenne%IC de l'intervalle de confiance= [-1.25 , 1.45]
//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il existe une différence significative entre les valeurs moyennes des deux échantillons.
Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性なし)test t-------------------start
valeur p=0.003 //valeur t= 4.00
//Différence de valeur moyenne= 103.00 //Erreur standard de différence= 25.77
//95 de différence moyenne%IC de l'intervalle de confiance= [48.85 , 157.15]
//Résultat du test:En rejetant l'hypothèse nulle, il y a une différence significative dans la moyenne des deux échantillons
Entre 2 groupes:Pas de support(Entre 2 groupesに等分散性なし)test t-------------------start
valeur p=0.878 //valeur t= 0.16
//Différence de valeur moyenne= 0.10 //Erreur standard de différence= 0.64
//95 de différence moyenne%IC de l'intervalle de confiance= [-1.25 , 1.45]
//Résultat du test:En adoptant l'hypothèse nulle, on ne peut pas dire qu'il existe une différence significative entre les valeurs moyennes des deux échantillons.
Test d'aptitude-------------------start
valeur p= 0.000 //Résultat du test:Nous rejetons l'hypothèse nulle et concluons qu'elle ne correspond pas à la distribution théorique.
Test d'aptitude-------------------start
valeur p= 1.000 //Résultat du test:Nous ne pouvons pas conclure en adoptant l'hypothèse nulle qu'elle ne correspond pas à la distribution théorique.
Test d'indépendance-------------------start
valeur p= 0.142 //Résultat du test:En adoptant l'hypothèse nulle, nous ne pouvons pas conclure que les deux variables ne sont pas indépendantes.
Test d'indépendance-------------------start
valeur p= 0.000 //Résultat du test:Rejetant l'hypothèse nulle, nous concluons que les deux variables ne sont pas indépendantes.
Test d'indépendance-------------------start
valeur p= 1.000 //Résultat du test:En adoptant l'hypothèse nulle, nous ne pouvons pas conclure que les deux variables ne sont pas indépendantes.
Test du coefficient de corrélation-------------------start
Coefficient de corrélation= 0.165 //valeur p= 0.649 //Résultat du test:Adoptez l'hypothèse nulle. On ne peut pas dire qu'il existe une corrélation.
Test du coefficient de corrélation-------------------start
Coefficient de corrélation= 0.979 //valeur p= 0.000 //Résultat du test:Rejetez l'hypothèse nulle. Il y a une corrélation.

Résumé

référence

Recommended Posts

Analyse des données: application facile des statistiques descriptives et des statistiques d'estimation aux données CSV en Python
Représentez facilement des données graphiques dans le shell et Python
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Traitement pleine largeur et demi-largeur des données CSV en Python
[Introduction à Python] Combinaison des données Nikkei Average et NY Dow CSV
Hashing de données en R et Python
Notes de lecture (en Python et Stan) pour une introduction à la modélisation statistique pour l'analyse de données (Midorimoto)
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie1-
traitement pour utiliser les données notMNIST en Python (et essayé de les classer)
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie4-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
Entrée / sortie de données en Python (CSV, JSON)
Lire Python csv et exporter vers txt
Compressez les données python et écrivez sur sqlite
Comment utiliser is et == en Python
Résumé des distributions de probabilité qui apparaissent souvent dans les statistiques et l'analyse des données
Grattage de la nourriture avec python et sortie en CSV
Comment générer une séquence en Python et C ++
Variables Python et types de données appris avec la chimio-automatique
Analyse de données python
Recevoir et afficher les données de formulaire HTML en Python
[Python] Permutation des lignes et des colonnes de données Numpy
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Lire et écrire des fichiers CSV et JSON avec Python
Envoyer un message à Skype et Chatwork en Python
Analyse de données en Python: une note sur line_profiler
[Python] Flux du scraping Web à l'analyse des données
Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
CSV en Python
La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
Environnement enregistré pour l'analyse des données avec Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment étudier le test d'analyse des données de certification d'ingénieur Python 3 par un débutant Python (passé en septembre 2020)
[Introduction à la décomposition des éléments] Organisons les méthodes d'analyse des séries chronologiques en R et python ♬
[Impression] [Analyse de données à partir de zéro] Introduction à la science des données Python apprise dans des analyses de rentabilisation
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Je veux facilement implémenter le délai d'expiration en python
Résumé des outils nécessaires pour analyser les données en Python
Comment appliquer des marqueurs uniquement à des données spécifiques avec matplotlib
[Pour les débutants] Comment étudier le test d'analyse de données Python3
Enregistrez collectivement des données dans Firestore à l'aide d'un fichier csv en Python
Fusion de la mise en œuvre du tri / analyse du montant du calcul et de l'expérimentation en Python
Note de lecture: Introduction à l'analyse de données avec Python
Liste du code Python utilisé dans l'analyse de Big Data
Écrire des tests en Python pour profiler et vérifier la couverture
[Python] Comment trier un dict dans une liste et une instance dans une liste
Analyse en composants principaux (PCA) et analyse en composants indépendants (ICA) avec python
Comment lire un csv contenant uniquement des entiers en Python
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
Analyse de données avec python 2
Présentation de l'analyse de données python
Modèle d'analyse de données Python
Analyse d'association en Python
Analyse de données avec Python