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.
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
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.')
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.
Recommended Posts