In [44]:
# Pakete importieren
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
import seaborn as sns
from scipy.stats import shapiro
from scipy.stats import kstest
In [45]:
np.random.seed(1)
data = pd.DataFrame({
"value": np.random.normal(loc=8, scale=7, size=1000)
})
print(data.head(5))
value 0 19.370418 1 3.717705 2 4.302798 3 0.489220 4 14.057853
Histogramm¶
In [46]:
plt.hist(data["value"], bins=45)
plt.title("Histogramm der Werte")
plt.xlabel("Wert")
plt.ylabel("Häufigkeit")
plt.show()
qqPlot¶
In [47]:
stats.probplot(data["value"], dist="norm", plot=plt)
plt.title("QQ-Plot")
plt.show()
Shapiro-Wilk-Test¶
In [48]:
stat, p = shapiro(data["value"])
print(f"Shapiro-Wilk-Test: p-Wert = {p:.5f}")
Shapiro-Wilk-Test: p-Wert = 0.24964
Es liegt eine Normalverteilung vorliegt.
Kolmogorow-Smirnow-Test (KS-Test)¶
In [49]:
# Normalisieren (mit den geschätzten Parametern der Stichprobe)
mean = data["value"].mean()
std = data["value"].std()
stat, p = kstest(data["value"], "norm", args=(mean, std))
print(f"KS-Test: p-Wert = {p:.5f}")
KS-Test: p-Wert = 0.90243
Es liegt eine Normalverteilung vor (p = 0.9 > 0.05).
Der p-value muss größer als 0.05 sein, damit von einer Normalverteilung gesprochen werden kann. Manche Testverfahren sind jedoch unsicher bei großen Datensätzen (n > 50), daher empfiehlt es sich ein Histogramm oder ein QQPlot zur Prüfung der Normalverteilung heranzuziehen.