Sie sind auf Seite 1von 8

L4_Statistik-Refresher

April 25, 2020

1 Statistik Refresher

Florian Wahl
Technische Hochschule Deggendorf
Zentrum für Akademische Weiterbildung
Hochschulzertifikatskurs Data Analytics mit Python

2 Verschiedene Variablentypen

Wie in der Vorlesungseinführung erwähnt gibt es verschiedene Datentypen. Hier nochmals eine
kurze Zusammenfassung: - Kategorische Variablen beschreiben Merkmale deren Ausprägungen
harte Grenzen haben. Dabei gibt es 2 Untergruppen: - Bei nominalen Variablen gibt es keine
Ordnung oder Rangfolge zwischen den Werten (z.B. Blutgruppe, Religion, Ort, PLZ) - Bei ordi-
nalen Variablen gibt es eine Ordnung (z.B. Energieeffizienzklasse, Noten, Ticketklasse) - Kardinale
Variablen beschreiben Zahlenwerte, bei denen die Abstände (Differenzen zwischen 2 Werten) Sinn
ergeben (z.B. Abstand, Preis, Temperatur)
Wichtig ist hierbei, dass sich alle Variablentypen in einer Zahl abbilden lassen, dies macht jedoch
Differenzen zwischen zwei Werten nicht automatisch sinnvoll. Bevor arithmetische Berechnungen
angestellt werden, sollte immer hinterfragt werden, ob es sinnvoll ist dies zu tun.

3 Statistische Maße

3.1 Lagemaße

3.1.1 Mittelwert

Lagemaße beschreiben wo die Daten “liegen”. Das bekannteste Lagemaß ist der Mittelwert. Dieser
berechnet sich wiefolgt:
x1 + x2 + x2 + . . . + xn ∑ xi
n
x̄ = = . (1)
n n
i=1

Leider ist der Mittelwert nur für kardinale Variablen geeignet, und auch nur dann, wenn die Daten
nicht zu sehr Streuen.

1
[1]: import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

ds1 = np.random.normal(0, 1, 100)


ds2 = np.random.normal(3, 2, 100)
ds3 = np.hstack([np.random.normal(-3, 1, 50), np.random.normal(5, 1, 50)])

[2]: f, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True)

sns.stripplot(ds1, ax=ax1)
sns.stripplot(ds2, ax=ax2)
sns.stripplot(ds3, ax=ax3)

ax1.axvline(np.mean(ds1), c="r", label="Mittelwert")


ax2.axvline(np.mean(ds2), c="r")
ax3.axvline(np.mean(ds3), c="r")

ax3.set_xlabel("Wert")
ax1.legend()

[2]: <matplotlib.legend.Legend at 0x11acfd310>

2
3.1.2 Median

Ein weiteres beliebtes Lagemaß ist der Median. Er teilt die Daten so, dass die Hälfte der Daten
größer oder gleich, und die andere Hälfte der Daten kleiner oder gleich des Medians sind. Dies kann
man durch Sortieren erreichen.
[3]: daten = [2, 9, 3, 5, 7, 4, 2]
print("Länge der Daten ist {}.".format(len(daten)))
daten.sort()
print(daten)
print("Der Median ist {}.".format(daten[3]))
print("Kontrolle: Der Median ist {}".format(np.median(daten)))

Länge der Daten ist 7.


[2, 2, 3, 4, 5, 7, 9]
Der Median ist 4.
Kontrolle: Der Median ist 4.0

3.1.3 Häufigkeitstabellen

Da der Mittelwert nur bei kardinalen und der Median nur bei kardinalen und ordinalen Variablen
Sinn ergibt, wird für nominale Variablen oftmals eine Häufigkeitstabelle in absoluter oder relativer
Form erstellt. Pandas kann dies mit der Methode count_values().
[4]: import pandas as pd
df = sns.load_dataset("titanic")

df.head()

[4]: survived pclass sex age sibsp parch fare embarked class \
0 0 3 male 22.0 1 0 7.2500 S Third
1 1 1 female 38.0 1 0 71.2833 C First
2 1 3 female 26.0 0 0 7.9250 S Third
3 1 1 female 35.0 1 0 53.1000 S First
4 0 3 male 35.0 0 0 8.0500 S Third

who adult_male deck embark_town alive alone


0 man True NaN Southampton no False
1 woman False C Cherbourg yes False
2 woman False NaN Southampton yes True
3 woman False C Southampton yes False
4 man True NaN Southampton no True

[5]: df.survived.value_counts()

[5]: 0 549
1 342

3
Name: survived, dtype: int64

[6]: df.survived.value_counts(normalize=True)

[6]: 0 0.616162
1 0.383838
Name: survived, dtype: float64

[7]: df.embark_town.value_counts(normalize=True)

[7]: Southampton 0.724409


Cherbourg 0.188976
Queenstown 0.086614
Name: embark_town, dtype: float64

3.1.4 Quantile

Das x% Quantil teilt die Daten so auf, dass x% der Daten darunter und der Rest darüber liegen.
Ein besonderer Fall der Quantile ist der Median, welcher das 50% Quantil ist. Das 25% und 75%
Quantil sind im Boxplot eingezeichnet. In pandas lassen sich Quantile mit der quantile Methode
berechnen.
[8]: df.age.quantile(.25)

[8]: 20.125

3.1.5 Maxima und minima

Selbsterklärend. In pandas mit den Methoden max und min abrufbar.


[9]: df.age.max()

[9]: 80.0

[10]: df.age.min()

[10]: 0.42

3.2 Streumaße

Streumaße geben an wie sich die Daten verteilen. Sind die Daten weit gestreut, oder liegen alle
Punkte nah beieinander?
[11]: ds1 = np.random.normal(0, 1, 100)
ds2 = np.random.normal(0, 2, 100)

4
ds3 = np.random.normal(0, 4, 100)

f, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True)

sns.stripplot(ds1, ax=ax1)
sns.stripplot(ds2, ax=ax2)
sns.stripplot(ds3, ax=ax3)

ax3.set_xlabel("Wert")

[11]: Text(0.5, 0, 'Wert')

3.2.1 Standardabweichung und Varianz

Die Standardabweichung ist das wichtigste Streumaß. Sie berechnet sich wie folgt:

(x1 − x̄)2 + (x2 − x̄)2 + (x3 − x̄)2 + . . . + (xn x̄)2
σ= (2)
n−1

Die Varianz ist das Quadrat der Standardabweichung. In pandas kann die Standardabweichung
mit der Method std und die Varianz mit der Methode var berechnet werden.
Bei Normalverteilten Daten gilt, dass ca. 68% innerhalb einer Standardabweichung vom Mittel-
wert liegen, ca. 95% innerhalb 2 Standardabweichungen und ca. 99.7% der Werte innerhalb 3
Standardabweichungen.

5
[12]: df.age.std()

[12]: 14.526497332334042

[13]: df.age.var()

[13]: 211.01912474630802

[14]: nd = pd.Series(np.random.normal(loc=0, scale=2, size=200))


f, ax = plt.subplots(1)

sns.stripplot(nd, ax=ax)
ax.axvline(nd.mean(), lw=2, ls="--", c="r", label="$\mu{}$")

ax.axvline(nd.mean() + 2*nd.std(), lw=2, ls="-.", c="g")


ax.axvline(nd.mean() - 2*nd.std(), lw=2, ls="-.", c="g",␣
,→label="$\mu{}\pm{}2\sigma$")

ax.legend()

[14]: <matplotlib.legend.Legend at 0x11afa2b90>

[15]: 192/200

[15]: 0.96

6
3.2.2 Interquartilsabstand

Ein weiteres Streumaß ist der Interquartilsabstand. Er ist definiert als der Bereich vom 25% bis
75% Quantils. Interquartilsabstand und Median haben den Vorteil, dass sie weniger stark von
Ausreißern verfälscht werden.
[16]: df.age.quantile(.75) - df.age.quantile(.25)

[16]: 17.875

[17]: f, ax = plt.subplots(1)

sns.stripplot(nd, ax=ax)
ax.axvline(nd.median(), lw=2, ls="--", c="r", label="Median")
ax.axvline(nd.quantile(.75), lw=2, ls="-", c="g", label="75% Quantil")
ax.axvline(nd.quantile(.25), lw=2, ls="-", c="g", label="25% Quantil")

ax.legend()

[17]: <matplotlib.legend.Legend at 0x11b0b2810>

3.3 Überblick gewinnen mit describe

Die describe Methode bei pandas bietet einen schnellen Überblick über die wichtigsten Kenn-
zahlen.

7
[18]: df.age.describe()

[18]: count 714.000000


mean 29.699118
std 14.526497
min 0.420000
25% 20.125000
50% 28.000000
75% 38.000000
max 80.000000
Name: age, dtype: float64

3.4 Revisit: Boxplot

[19]: df.age.plot.box()

[19]: <matplotlib.axes._subplots.AxesSubplot at 0x11b11e510>

• Grüne linie: Median


• Box: oben 75% Quantil, unten 25% Quantil
• Whiskers: Quartile + bzw. - 1.5x Interquartilsabstand
• Punkte: Aussreisser, welcher ausserhalb der Whiskers liegen

Das könnte Ihnen auch gefallen