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()
No description has been provided for this image

qqPlot¶

In [47]:
stats.probplot(data["value"], dist="norm", plot=plt)
plt.title("QQ-Plot")
plt.show()
No description has been provided for this image

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.