Kreuztabellen

Um zwei ordinale oder nominale Variablen miteinander zu vergleichen, eignen sich Kreuztabellen. Jeder Wert in der Kreuztabelle entspricht der Anzahl der Beobachtungen im Datensatz mit genau dieser Kombination an Merkmalsausprägungen.

Hier ein Beispiel (mit dem Argument na_values="none" markiert pandas die "none" Einträge in der Spalte 'Notice Preference Definition' als fehlende Werte):

import pandas as pd

df = pd.read_csv(
    "../data/Library_Usage.csv", 
    low_memory=False,
    na_values="Null"
)
pd.crosstab(
    df['Notice Preference Definition'],
    df['Age Range'],
    margins=True
)
Age Range0 to 9 years10 to 19 years20 to 24 years25 to 34 years35 to 44 years45 to 54 years55 to 59 years60 to 64 years65 to 74 years75 years and overAll
Notice Preference Definition
Email30075561152454490890816004679718086160912798716437408622
Phone1580104942150267524522122126115773700367631687
Print103062826310009685962792996275426232
All32685672372695794565850204951519626179673231420655446541

Eine Kreuztabelle mit absoluten Werten ist häufig schwer zu interpretieren, wenn die Randverteilungen ungleich verteilt sind. Deswegen sollten die Werte entweder Spaltenweise oder Zeilenweise normalisiert werden:

pd.crosstab(
    df['Notice Preference Definition'],
    df['Age Range'],
    margins=True, normalize=1
)

Ergibt eine Normalisierung der Spalten, sodass sich diese jeweils zu 100% aufaddieren:

Age Range0 to 9 years10 to 19 years20 to 24 years25 to 34 years35 to 44 years45 to 54 years55 to 59 years60 to 64 years65 to 74 years75 years and overAll
Notice Preference Definition
Email0.9201470.8345850.9104870.9611380.9597740.9451080.9215330.8955860.8660950.7957880.915083
Phone0.0483400.1560750.0797570.0282870.0288400.0428560.0642520.0877720.1145010.1779710.070961
Print0.0315130.0093400.0097560.0105750.01.20370.0142160.0166420.0194030.0262410.013956

Von den Nutzern zwischen 0 und 9 Jahren möchten 92% (0.920147 von 1) per Mail informiert werden.

Wird das Argument normalize=0 verwendet, so werden die Zeilen der Tabelle normalisiert. Entsprecht ändern sich die Interpretation:

Age Range0 to 9 years10 to 19 years20 to 24 years25 to 34 years35 to 44 years45 to 54 years55 to 59 years60 to 64 years65 to 74 years75 years and over
Notice Preference Definition
Email0.0736010.1373270.0600650.2224310.1996960.1145240.0442610.0393790.0684910.040225
Phone0.0498630.3311770.0678510.0844190.0773820.0669680.0397950.0497680.1167670.116010
Print0.1652760.1007700.0422020.1604620.1553270.0956350.0447690.0479780.1006100.086970

Von den Kunden, die per Mail informiert werden möchtem befinden sich ca. 22% (0.222431 von 1) in der Altersgruppe 25 bis 34 Jahre.