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", 
    na_values="none"
)
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
Email28740549362270188200776184516517336155392717015069392474
None3952119212680446941013154174021154544422842904
All32692668572538192669817194831919076176543171419297435378

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.8791140.8216940.8944090.9517750.9498160.9347250.9087860.8801970.8567190.7808990.901456
None0.1208860.1783060.1055910.0482250.0501840.0652750.0912140.1198030.1432810.2191010.098544

Von den Nutzern zwischen 0 und 9 Jahren möchten 88% (0.879114 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.0732280.1399740.0578410.2247280.1977660.1150780.0441710.0395920.0692280.038395
None0.0921130.2778530.0624650.1041630.0955850.0735130.0405560.0492960.1059110.098546
All0.0750890.1535610.0582960.2128470.1876970.1109820.0438150.0405490.0728420.044322

Von den Kunden, die per Mail informiert werden möchtem befinden sich ca. 12% (0.115078 von 1) in der Altersgruppe 45 bis 54 Jahre.