Beschreibende Statistiken und Schätzungsstatistiken werden häufig in der Datenanalyse verwendet, um die Daten zu verstehen, bevor ein Modell für maschinelles Lernen erstellt wird. Dieses Mal habe ich, um die Daten zu verstehen, die CSV-Daten mit dem Datenrahmen von Pandas gelesen und den Quellcode erstellt, um einfach beschreibende Statistiken und Schätzungsstatistiken anzuwenden.
Erstellen Sie CSV-Daten als Eingabe. Die zum Erstellen des Quellcodes verwendeten Daten werden unten angezeigt.
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
Der modularisierte Quellcode wird unten gezeigt.
class StatisticalTests():
def __init__(self):
pass
@classmethod
def basic_info(cls, df):
print('Grundlegende Statistiken------------------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('Bevölkerungsdurchschnitt 95%Konfidenzintervall-------------------start')
for column_name, s in df.iteritems():
u2 = s.var(ddof=1) #Populationsvarianzschätzung (unvoreingenommene Varianz)
m = s.mean() #Stichprobenmittelwert
n = len(s)-1 #Freiheitsgrad
se = math.sqrt(u2/len(s)) #Standart Fehler
ci1, ci2 = st.t.interval(alpha=0.95, loc=m, scale=se, df=n)
print(f'Spaltenname= {column_name} //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= '
f'[{ci1:.2f} , {ci2:.2f}] //Stichprobenmittelwert[{m}]')
@classmethod
def shapiro(cls, df):
print('Shapiro Wilk Test(Test der Normalität)------------------start')
for column_name, s in df.iteritems():
_, p = st.shapiro(s)
if p >= 0.05:
print(f'Spaltenname= {column_name} //p-Wert= {p:.3f} '
f'//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass es keine Normalität gibt')
else:
print(f'Spaltenname= {column_name} //p-Wert= {p:.3f} '
f'//Testergebnis:Ablehnung der Nullhypothese, keine Normalität')
@classmethod
def levene(cls, xa, xb):
print('Zwischen 2 Gruppen:Bevölkerungsdurchschnitt 95%Test der Isodispersität durch Rubean-Test-------------------start')
_, p = st.levene(xa, xb, center='mean')
if p >= 0.05:
print(f'p-Wert= {p:.3f} //Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass die beiden Stichproben nicht gleich weit voneinander entfernt sind.')
else:
print(f'p-Wert= {p:.3f} //Testergebnis:Wenn Sie die Nullhypothese ablehnen, sind die beiden Stichproben nicht äquidistant')
@classmethod
def ttest_rel(cls, xa, xb):
print('Zwischen 2 Gruppen:Entsprechender t-Test-------------------start')
#Die Nullhypothese lautet, dass es keinen signifikanten Unterschied zwischen den Mittelwerten der beiden Proben gibt.
#Wenn es eine Antwort gibt, überprüfen Sie vor und nach der Verabreichung des Arzneimittels dieselbe Person wie Herr A und Herr 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'p-Wert={p:.3f} //t Wert= {t:.2f}')
print(f'//Differenz im Durchschnittswert= {mu:.2f} //Standardfehler der Differenz= {se:.2f}')
print(f'//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [{ci1:.2f} , {ci2:.2f}]')
print('//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass zwischen den Durchschnittswerten der beiden Stichproben ein signifikanter Unterschied besteht.')
else:
print(f'p-Wert={p:.3f} //t Wert= {t:.2f}')
print(f'//Differenz im Durchschnittswert= {mu:.2f} //Standardfehler der Differenz= {se:.2f}')
print(f'//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [{ci1:.2f} , {ci2:.2f}]')
print(f'//Testergebnis:Wenn man die Nullhypothese ablehnt, gibt es einen signifikanten Unterschied im Mittelwert der beiden Stichproben')
@classmethod
def ttest_ind_equal_var_true(cls, xa, xb):
print('Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性あり)t testen-------------------start')
#Die Nullhypothese lautet, dass es keinen signifikanten Unterschied zwischen den Mittelwerten der beiden Proben gibt.
#Überprüfen Sie ohne Korrespondenz nicht dieselbe Person vor und nach der Verabreichung des Arzneimittels wie Herr A und Herr 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('Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性なし)t testen-------------------start')
#Die Nullhypothese lautet, dass es keinen signifikanten Unterschied zwischen den Mittelwerten der beiden Proben gibt.
#Überprüfen Sie ohne Korrespondenz nicht dieselbe Person vor und nach der Verabreichung des Arzneimittels wie Herr A und Herr 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'p-Wert={p:.3f} //t Wert= {t:.2f}')
print(f'//Differenz im Durchschnittswert= {mu:.2f} //Standardfehler der Differenz= {se:.2f}')
print(f'//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [{ci1:.2f} , {ci2:.2f}]')
print('//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass zwischen den Durchschnittswerten der beiden Stichproben ein signifikanter Unterschied besteht.')
else:
print(f'p-Wert={p:.3f} //t Wert= {t:.2f}')
print(f'//Differenz im Durchschnittswert= {mu:.2f} //Standardfehler der Differenz= {se:.2f}')
print(f'//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [{ci1:.2f} , {ci2:.2f}]')
print(f'//Testergebnis:Wenn man die Nullhypothese ablehnt, gibt es einen signifikanten Unterschied im Mittelwert der beiden Stichproben')
@classmethod
def chisquare(cls, sample, answer):
print('Eignungsprüfung-------------------start')
#Oppositionshypothese: Die erhaltenen Daten passen nicht zur theoretischen Verteilung.
sample = sample.tolist()
answer = answer.tolist()
p = st.chisquare(sample, f_exp=answer)[1]
if p >= 0.05:
print(f'p-Wert= {p:.3f} //Testergebnis:Es kann nicht geschlossen werden, dass die Nullhypothese nicht zur theoretischen Verteilung passt.')
else:
print(f'p-Wert= {p:.3f} //Testergebnis:Wir lehnen die Nullhypothese ab und schließen daraus, dass sie nicht zur theoretischen Verteilung passt.')
@classmethod
def chi2_contingency(cls, df):
print('Test der Unabhängigkeit-------------------start')
# Usage)
#Anzahl der Krebsarten Anzahl der Nichtkrebsarten
#Rauchergruppe 30 70
#Nichtrauchergruppe 20 80
# print(st.chi2_contingency(x))
p = st.chi2_contingency(df.values)[1]
if p >= 0.05:
print(f'p-Wert= {p:.3f} //Testergebnis:Wenn wir die Nullhypothese annehmen, können wir nicht schließen, dass die beiden Variablen nicht unabhängig sind.')
else:
print(f'p-Wert= {p:.3f} //Testergebnis:Wir lehnen die Nullhypothese ab und schließen daraus, dass die beiden Variablen nicht unabhängig sind.')
@classmethod
def pearsonr(cls, xa, xb):
print('Korrelationskoeffiziententest-------------------start')
#Machen Sie eine Nullhypothese und eine alternative Hypothese:Die Nullhypothese ist ρ=0, dh Populationskorrelation=0
#Die alternative Hypothese lautet "ρ ≠ 0", dh Populationskorrelation ≠ 0
x1 = xa.values
x2 = xb.values
s = st.pearsonr(x1, x2)
if s[1] >= 0.05:
print(f'Korrelationskoeffizient= {s[0]:.3f} //p-Wert= {s[1]:.3f} //Testergebnis:Nehmen Sie die Nullhypothese an. Es kann nicht gesagt werden, dass es eine Korrelation gibt.')
else:
print(f'Korrelationskoeffizient= {s[0]:.3f} //p-Wert= {s[1]:.3f} //Testergebnis:Lehnen Sie die Nullhypothese ab. Es besteht eine Korrelation.')
Ein Ausführungsbeispiel des obigen modularisierten Quellcodes ist unten gezeigt. Sie können sehen, dass Sie die CSV-Daten verstehen können.
Grundlegende Statistiken------------------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
Bevölkerungsdurchschnitt 95%Konfidenzintervall-------------------start
Spaltenname= x1 //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= [1.93 , 4.07] //Stichprobenmittelwert[3.0]
Spaltenname= x2 //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= [47.70 , 164.30] //Stichprobenmittelwert[106.0]
Spaltenname= x3 //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= [0.87 , 1.33] //Stichprobenmittelwert[1.1]
Spaltenname= x4 //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= [0.87 , 1.33] //Stichprobenmittelwert[1.1]
Spaltenname= x5 //Bevölkerungsdurchschnitt 95%Konfidenzintervall CI= [2.12 , 4.08] //Stichprobenmittelwert[3.1]
Shapiro Wilk Test(Test der Normalität)------------------start
Spaltenname= x1 //p-Wert= 0.341 //Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass es keine Normalität gibt
Spaltenname= x2 //p-Wert= 0.004 //Testergebnis:Ablehnung der Nullhypothese, keine Normalität
Spaltenname= x3 //p-Wert= 0.000 //Testergebnis:Ablehnung der Nullhypothese, keine Normalität
Spaltenname= x4 //p-Wert= 0.000 //Testergebnis:Ablehnung der Nullhypothese, keine Normalität
Spaltenname= x5 //p-Wert= 0.410 //Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass es keine Normalität gibt
Zwischen 2 Gruppen:Bevölkerungsdurchschnitt 95%Test der Isodispersität durch Rubean-Test-------------------start
p-Wert= 0.000 //Testergebnis:Wenn Sie die Nullhypothese ablehnen, sind die beiden Stichproben nicht äquidistant
Zwischen 2 Gruppen:Bevölkerungsdurchschnitt 95%Test der Isodispersität durch Rubean-Test-------------------start
p-Wert= 0.813 //Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass die beiden Stichproben nicht gleich weit voneinander entfernt sind.
Zwischen 2 Gruppen:Entsprechender t-Test-------------------start
p-Wert=0.003 //t Wert= 4.01
//Differenz im Durchschnittswert= 103.00 //Standardfehler der Differenz= 25.70
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [49.01 , 156.99]
//Testergebnis:Wenn man die Nullhypothese ablehnt, gibt es einen signifikanten Unterschied im Mittelwert der beiden Stichproben
Zwischen 2 Gruppen:Entsprechender t-Test-------------------start
p-Wert=0.343 //t Wert= 1.00
//Differenz im Durchschnittswert= 0.10 //Standardfehler der Differenz= 0.10
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [-0.11 , 0.31]
//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass zwischen den Durchschnittswerten der beiden Stichproben ein signifikanter Unterschied besteht.
Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性あり)t testen-------------------start
p-Wert=0.001 //t Wert= 4.00
//Differenz im Durchschnittswert= 103.00 //Standardfehler der Differenz= 25.77
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [48.85 , 157.15]
//Testergebnis:Wenn man die Nullhypothese ablehnt, gibt es einen signifikanten Unterschied im Mittelwert der beiden Stichproben
Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性あり)t testen-------------------start
p-Wert=0.878 //t Wert= 0.16
//Differenz im Durchschnittswert= 0.10 //Standardfehler der Differenz= 0.64
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [-1.25 , 1.45]
//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass zwischen den Durchschnittswerten der beiden Stichproben ein signifikanter Unterschied besteht.
Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性なし)t testen-------------------start
p-Wert=0.003 //t Wert= 4.00
//Differenz im Durchschnittswert= 103.00 //Standardfehler der Differenz= 25.77
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [48.85 , 157.15]
//Testergebnis:Wenn man die Nullhypothese ablehnt, gibt es einen signifikanten Unterschied im Mittelwert der beiden Stichproben
Zwischen 2 Gruppen:Keine Unterstützung(Zwischen 2 Gruppenに等分散性なし)t testen-------------------start
p-Wert=0.878 //t Wert= 0.16
//Differenz im Durchschnittswert= 0.10 //Standardfehler der Differenz= 0.64
//95 der durchschnittlichen Differenz%Konfidenzintervall CI= [-1.25 , 1.45]
//Testergebnis:Bei Annahme der Nullhypothese kann nicht gesagt werden, dass zwischen den Durchschnittswerten der beiden Stichproben ein signifikanter Unterschied besteht.
Eignungsprüfung-------------------start
p-Wert= 0.000 //Testergebnis:Wir lehnen die Nullhypothese ab und schließen daraus, dass sie nicht zur theoretischen Verteilung passt.
Eignungsprüfung-------------------start
p-Wert= 1.000 //Testergebnis:Es kann nicht geschlossen werden, dass die Nullhypothese nicht zur theoretischen Verteilung passt.
Test der Unabhängigkeit-------------------start
p-Wert= 0.142 //Testergebnis:Wenn wir die Nullhypothese annehmen, können wir nicht schließen, dass die beiden Variablen nicht unabhängig sind.
Test der Unabhängigkeit-------------------start
p-Wert= 0.000 //Testergebnis:Wir lehnen die Nullhypothese ab und schließen daraus, dass die beiden Variablen nicht unabhängig sind.
Test der Unabhängigkeit-------------------start
p-Wert= 1.000 //Testergebnis:Wenn wir die Nullhypothese annehmen, können wir nicht schließen, dass die beiden Variablen nicht unabhängig sind.
Korrelationskoeffiziententest-------------------start
Korrelationskoeffizient= 0.165 //p-Wert= 0.649 //Testergebnis:Nehmen Sie die Nullhypothese an. Es kann nicht gesagt werden, dass es eine Korrelation gibt.
Korrelationskoeffiziententest-------------------start
Korrelationskoeffizient= 0.979 //p-Wert= 0.000 //Testergebnis:Lehnen Sie die Nullhypothese ab. Es besteht eine Korrelation.
Recommended Posts