Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise

Aperçu

Je pense qu'il est très important de vérifier l'effet après avoir mené divers essais avec les services WEB. Je pense que les statistiques de base peuvent être pleinement utilisées comme méthode. Cette fois, nous avons résumé la méthode d'analyse des données statistiques à l'aide de Python + Jupyter Lab (Docker) dans le but de vérifier l'effet de la production d'essai qui peut être utilisée dans les entreprises à partir de statistiques de base et d'analyse de données.

Veuillez également vous référer au notebook utilisé cette fois-ci. https://github.com/hikarut/Data-Science/tree/master/notebooks/statisticsSample

environnement

On suppose que Jupyter Lab peut être utilisé avec Docker en se référant à ce qui suit. Utiliser la liaison de clé vim dans JupyterLab démarré avec Docker

Résumé de la méthode d'analyse

- Variables explicatives qualitatives
(2 classifications)
Variables explicatives quantitatives
(Cas multiples, y compris la quantité et la qualité)
Résultat quantitatif(Numérique) Test T pour la différence entre les valeurs moyennes
(ou le test de somme des rangs de Wilcoxon)
Analyse de régression multiple
Résultat qualitatif(Type de classification) Test Z pour la différence de proportion
(Identique au test du chi carré)
Analyse de régression logistique

le terme

Quantitatif

qualitatif

Résultat

Variable explicative

Valeur moyenne

import numpy as np

np.mean()

Médian

import numpy as np

np.median()

déviation

Variance

import numpy as np

np.var()

Écart-type

import numpy as np

np.std()

Hypothèse nulle

Hypothèse de conflit

valeur p

Détails de la méthode d'analyse

test t

1 test t échantillon (1 test groupe t)

#1 échantillon de test t

import numpy as np
import scipy as sp
import matplotlib.pyplot as plt

coffee = np.array([
    210.9, 195.4, 202.1 , 211.3, 195.5, 
    212.9, 210.9, 198.3, 202.1, 215.6, 
    204.7, 212.2, 200.7, 206.1, 195.8
])

t, p = sp.stats.ttest_1samp(coffee, popmean=200)
print('Moyenne mère:', np.mean(coffee))
print('Valeur T avec une moyenne de population de 200:', t)
print('Probabilité que la population moyenne soit de 200(valeur p):', p)

Résultat d'exécution


Population moyenne: 204.96666666666664
Valeur T avec une moyenne de population de 200: 2.751076959309973
Probabilité que la population moyenne soit de 200(valeur p): 0.015611934395473872

Test t apparié

#Test t apparié

import numpy as np
from scipy import stats

A = np.array([0.7, -1.6, -0.2, -1.2, -0.1, 3.4, 3.7, 0.8, 0.0, 2.0])
B = np.array([1.9, 0.8, 1.1, 0.1, -0.1, 4.4, 5.5, 1.6, 4.6, 3.4])

print('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_rel(A, B)

Résultat d'exécution


Une moyenne: 0.75
Moyenne B: 2.3299999999999996
Ttest_relResult(statistic=-4.062127683382037, pvalue=0.00283289019738427)

Test t de l'étudiant

#Test t de l'étudiant

import numpy as np
from scipy import stats

A = np.array([6.3, 8.1, 9.4, 10.4, 8.6, 10.5, 10.2, 10.5, 10.0, 8.8])
B = np.array([4.8, 2.1, 5.1, 2.0, 4.0, 1.0, 3.4, 2.7, 5.1, 1.4, 1.6])

print('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_ind(A, B)

Résultat d'exécution


Une moyenne: 9.28
Moyenne B: 3.0181818181818185
Ttest_indResult(statistic=9.851086859836649, pvalue=6.698194360479442e-09)

Test t de Welch

#Test t de Welch

import numpy as np
from scipy import stats

A = np.array([13.8, 10.2, 4.6, 10.0, 4.2, 16.1, 14.4, 4.9, 7.7, 11.4])
B = np.array([3.3, 2.6, 4.0, 4.7, 1.9, 2.9, 4.7, 5.3, 4.3, 3.0, 2.0])

print('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_ind(A, B, equal_var=False)

Résultat d'exécution


Une moyenne: 9.73
Moyenne B: 3.5181818181818176
Ttest_indResult(statistic=4.426442804187721, pvalue=0.0012285738375064346)

Test de la somme des rangs de Wilcoxon

import numpy as np
from scipy import stats

A = np.array([1.83, 1.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30, 2.01, 3.11])
B = np.array([0.88, 0.65, 0.60, 1.05, 1.06, 1.29, 1.06, 2.14, 1.29])

print('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.mannwhitneyu(A, B, alternative='two-sided')

Résultat d'exécution


Une moyenne: 2.0018181818181815
Moyenne B: 1.1133333333333333
MannwhitneyuResult(statistic=91.0, pvalue=0.0018253610099931035)

Test de somme des ordres de code de Wilcoxon

import numpy as np
from scipy import stats

A = np.array([1.83, 1.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30])
B = np.array([0.88, 0.65, 0.60, 1.05, 1.06, 1.29, 1.06, 2.14, 1.29])

print('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.wilcoxon(A, B)

Résultat d'exécution


Une moyenne: 1.8777777777777775
Moyenne B: 1.1133333333333333
WilcoxonResult(statistic=0.0, pvalue=0.007685794055213263)

Test du chi carré

#Test du chi carré

import numpy as np
import pandas as pd
from scipy import stats

#Exemple de données
sex = np.random.choice(['male', 'female'], size=20)
vote = np.random.choice(['agree', 'against'], size=20)
cross = pd.crosstab(index=sex, columns=vote)
print(cross)

x2, p, dof, expected = stats.chi2_contingency(cross, correction=False)
print("Valeur chi carré:", x2)
print("valeur p:", p)
print("Le degré de liberté", dof)
print(expected)

Résultat d'exécution


vote    against  agree
sex                   
female        5      5
male          6      4
Valeur chi carré: 0.20202020202020202
valeur p: 0.653095114932182
1 degré de liberté
[[5.5 4.5]
 [5.5 4.5]]

Analyse de régression multiple

#Enregistrement des données de test
import pandas as pd
import numpy as np

data = pd.DataFrame({'output': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
                     'input01': [1, 3, 5, 6, 10, 14, 8, 17, 15, 20],
                     'input02': [5, 10, 20, 30, 35, 35, 50, 70, 85, 100]},)
data.head()
#Analyse de régression simple avec input01 et output
from sklearn import linear_model
model = linear_model.LinearRegression()

#Utilisez input01 comme variable explicative
X = data.loc[:, ['input01']].values
#Utiliser la sortie comme variable objectif
Y = data['output'].values

#Créer un modèle prédictif
model.fit(X, Y)
print('Paramètres du modèle:', model.get_params())
print('Coefficient de régression:', model.coef_)
print('Section(Erreur):', model.intercept_)
print('Coefficient de décision(X,Corrélation de Y):', model.score(X, Y))
print('Formule de régression:[alcohol] = %s × [density] + %s' % (model.coef_[0], model.intercept_))

Résultat d'exécution


Paramètres du modèle: {'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'normalize': False}
Coefficient de régression: [4.45327487]
Section(Erreur): 10.912578788709233
Coefficient de décision(X,Corrélation de Y): 0.8771602016326598
Formule de régression:[alcohol] = 4.45327486982735 × [density] + 10.912578788709233
#Analyse de régression à l'aide de modèles de statistiques
import statsmodels.api as sm

model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())

Résultat d'exécution


                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.877
Model:                            OLS   Adj. R-squared:                  0.862
Method:                 Least Squares   F-statistic:                     57.13
Date:                Fri, 20 Mar 2020   Prob (F-statistic):           6.56e-05
Time:                        23:33:37   Log-Likelihood:                -37.282
No. Observations:                  10   AIC:                             78.56
Df Residuals:                       8   BIC:                             79.17
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         10.9126      6.833      1.597      0.149      -4.845      26.670
x1             4.4533      0.589      7.558      0.000       3.095       5.812
==============================================================================
Omnibus:                        5.725   Durbin-Watson:                   2.878
Prob(Omnibus):                  0.057   Jarque-Bera (JB):                2.315
Skew:                           1.150   Prob(JB):                        0.314
Kurtosis:                       3.513   Cond. No.                         22.4
==============================================================================
#Graphisme
import matplotlib.pyplot as plt
 
#Nuage de points
plt.scatter(X, Y)
 
#Retour en ligne droite
plt.plot(X, model.predict(X), color='black')
#Analyse de régression normalisée et multiple
from sklearn import linear_model
model = linear_model.LinearRegression()

#Normaliser chaque colonne du bloc de données
data2 = data.apply(lambda x: (x - np.mean(x)) / (np.max(x) - np.min(x)))
data2.head()
#Utiliser autre que la sortie comme variable explicative
data2_except_output = data2.drop("output", axis=1)
X = data2_except_output
#Utiliser la sortie comme variable objectif
Y = data2['output'].values
 
#Créer un modèle prédictif
model.fit(X, Y)
 
#Coefficient de régression partiel
print(pd.DataFrame({"name":data2_except_output.columns,
                    "result":np.abs(model.coef_)}).sort_values(by='result') )
 
print('Section(Erreur):', model.intercept_)

Résultat d'exécution


      name    result
0  input01  0.295143
1  input02  0.707205
Section(Erreur): 1.6679414843100476e-17
#Analyse de régression multiple à l'aide de modèles de statistiques
import statsmodels.api as sm

#Créer un modèle prédictif
model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())

Résultat d'exécution


                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.962
Model:                            OLS   Adj. R-squared:                  0.951
Method:                 Least Squares   F-statistic:                     87.64
Date:                Fri, 20 Mar 2020   Prob (F-statistic):           1.11e-05
Time:                        23:36:48   Log-Likelihood:                 13.530
No. Observations:                  10   AIC:                            -21.06
Df Residuals:                       7   BIC:                            -20.15
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const      -1.388e-17      0.024  -5.87e-16      1.000      -0.056       0.056
input01        0.2951      0.180      1.636      0.146      -0.132       0.722
input02        0.7072      0.180      3.923      0.006       0.281       1.133
==============================================================================
Omnibus:                        6.793   Durbin-Watson:                   1.330
Prob(Omnibus):                  0.033   Jarque-Bera (JB):                2.620
Skew:                           1.171   Prob(JB):                        0.270
Kurtosis:                       3.896   Cond. No.                         10.5
==============================================================================

Analyse de régression logistique

#Enregistrement des données de test
import pandas as pd
import numpy as np

data = pd.DataFrame({'sexe': [1, 1, 0, 1, 0, 0, 1, 1, 0, 0],
                     'étudiant': [0, 0, 0, 0, 1, 0, 0, 1, 0, 1],
                     'Rester le temps(Secondes)': [34, 28, 98, 70, 67, 23, 67, 56, 41, 90],
                     'Enregistrement de l'utilisateur': [0, 0, 1, 0, 1, 0, 1, 1, 0, 1]},)
data
#Analyse de régression logistique à l'aide de modèles de statistiques
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm

#Utiliser autre que l'enregistrement de l'utilisateur pour les variables explicatives
X = data[['sexe', 'étudiant', 'Rester le temps(Secondes)']]
#Utiliser l'enregistrement de l'utilisateur pour la variable objective
Y = data['Enregistrement de l'utilisateur'].values

model = sm.Logit(Y, sm.add_constant(X))
result = model.fit(disp=0)
print('---résumé---')
print(result.summary())

print('---Enregistrer les cotes---')
print(result.params)

print('---valeur p---')
print(result.pvalues)

print('---Quelle est la probabilité qu'un événement se produise lorsque la variable est augmentée d'une unité?%Augmentera à(Évaluation quantitative)---')
print('Rester le temps(Secondes):', 1 / (1 + np.exp(-result.params['Rester le temps(Secondes)'])))
print('Rester le temps(Secondes):', np.exp(result.params['Rester le temps(Secondes)']) / (1 + np.exp(result.params['Rester le temps(Secondes)'])))

print('---Combien de fois la probabilité qu'un événement se produise lorsque la variable devient 1 est la probabilité qu'un événement ne se produise pas(Qualification)---')
print('sexe:', np.exp(result.params['sexe']))
print('étudiant:', np.exp(result.params['étudiant']))

Résultat d'exécution


---résumé---
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:                   10
Model:                          Logit   Df Residuals:                        6
Method:                           MLE   Df Model:                            3
Date:                Fri, 20 Mar 2020   Pseudo R-squ.:                  0.7610
Time:                        10:12:42   Log-Likelihood:                -1.6565
converged:                      False   LL-Null:                       -6.9315
Covariance Type:            nonrobust   LLR p-value:                   0.01443
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const         -9.5614     10.745     -0.890      0.374     -30.622      11.499
Sexe 0.1543      5.170      0.030      0.976      -9.979      10.287
Étudiant 22.7574   3.26e+04      0.001      0.999   -6.38e+04    6.38e+04
Rester le temps(Secondes)        0.1370      0.139      0.988      0.323      -0.135       0.409
==============================================================================

Possibly complete quasi-separation: A fraction 0.30 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.
---Enregistrer les cotes---
const      -9.561361
Sexe 0.154283
Étudiant 22.757416
Rester le temps(Secondes)     0.136965
dtype: float64
---valeur p---
const      0.373568
Sexe 0.976193
Étudiant 0.999442
Rester le temps(Secondes)    0.323037
dtype: float64
---Quelle est la probabilité qu'un événement se produise lorsque la variable est augmentée d'une unité?%Augmentera à(Évaluation quantitative)---
Rester le temps(Secondes): 0.5341877701226888
Rester le temps(Secondes): 0.5341877701226888
---Combien de fois la probabilité qu'un événement se produise lorsque la variable devient 1 est la probabilité qu'un événement ne se produise pas(Qualification)---
sexe: 1.1668207000698392
étudiant: 7645749443.830123

Les références

Recommended Posts

Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Résumé des sources de données scikit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
Récapitulatif des méthodes Pandas utilisées lors de l'extraction de données [Python]
Liste du code Python utilisé dans l'analyse de Big Data
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
Résumé des méthodes fréquemment utilisées chez les pandas
Résumé des méthodes intégrées, etc. de la liste Python
Résumé du livre électronique Python utile pour l'analyse de données gratuite
Résumé des distributions de probabilité qui apparaissent souvent dans les statistiques et l'analyse des données
Fonctions pouvant être utilisées dans l'instruction for
Environnement enregistré pour l'analyse des données avec Python
Résumé des opérations Excel utilisant OpenPyXL en Python
Analyse des données de pratique Python Résumé de l'apprentissage que j'ai atteint environ 10 avec 100 coups
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Notes personnelles des opérations liées aux pandas qui peuvent être utilisées dans la pratique
Résumé des outils nécessaires pour analyser les données en Python
Algorithmes de base utilisables par les pros de la compétition
[Python] [Word] [python-docx] Analyse simple des données de diff en utilisant python
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Notes sur les connaissances Python utilisables avec AtCoder
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python
Visualisation des informations géographiques de R et Python qui peuvent être exprimées par Power BI
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Analyse de données à l'aide de pandas python
Récapitulatif du format des formats qui peuvent être sérialisés avec gensim
Résumé de base des opérations de données dans Python Pandas - Deuxième moitié: agrégation de données
traitement python3 qui semble utilisable dans paiza
Goroutine (contrôle parallèle) utilisable sur le terrain
Analyse de texte pouvant être effectuée en 5 minutes [Word Cloud]
Goroutine utilisable sur le terrain (édition errgroup.Group)
Index d'évaluation pouvant être spécifié pour GridSearchCV de sklearn
Peut être utilisé avec AtCoder! Une collection de techniques pour dessiner du code court en Python!
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
Enquête sur l'alimentation CC contrôlable par Python
Je l'ai fait parce que je veux des données JSON qui peuvent être utilisées librement dans les démos et les prototypes
33 chaînes à ne pas utiliser comme noms de variables en python
Voici un résumé des choses qui pourraient être utiles pour traiter des nombres complexes en Python
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
Recommandation d'analyse des données à l'aide de MessagePack
Une classe qui résume les méthodes fréquemment utilisées dans l'api twitter (python)
Module standard Python utilisable en ligne de commande
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
J'ai créé un modèle de projet Python générique
Résumé des problèmes d'AtCoder C qui peuvent être résolus en mathématiques au secondaire
Résumé de base du scraping avec des requêtes que les débutants peuvent absolument comprendre [Python]
Puissance des méthodes de prédiction dans l'analyse de données chronologiques Semi-optimisation (SARIMA) [Memo]
Optimisation mathématique pour un travail gratuit avec Python + PuLP
Nombre maximum de paramètres de fonction pouvant être définis dans chaque langue
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
Pratique d'utilisation de ceci en Python (mauvais)
Résumé des commandes fréquemment utilisées dans matplotlib