Umfragedaten analysieren

Survey Teil 2

Jan Kirenz

Setup

import numpy as np
import pandas as pd

Daten

Daten importieren

PATH = "../data/"
DATA = "clean_data.csv"

df = pd.read_csv(PATH + DATA)

df.head()
zeit sport fleissig entmutigen talente einkommen energie megacity geleebohnen soziale_medien ... buch__Ja buch__Nein geschlecht__Männlich geschlecht__Weiblich entmutigen_orig energie_orig sport_qm fleissig_qm talente_qm entmutigen_qm
0 2024/04/16 10:49:54 AM OEZ trifft völlig zu trifft eher zu trifft eher nicht zu trifft eher zu 80 82 3 2000.0 40 ... True False True False 2 ca. 82% 5 4 4 2
1 2024/04/16 10:50:21 AM OEZ trifft eher nicht zu trifft eher zu trifft eher nicht zu trifft überhaupt nicht zu 23 82 3 500.0 240 ... True False False True 2 ca. 82% 2 4 1 2
2 2024/04/16 10:50:22 AM OEZ teils teils trifft eher zu trifft eher zu trifft eher nicht zu 37 62 2 756.0 240 ... True False False True 4 ca. 62% 3 4 2 4
3 2024/04/16 10:50:24 AM OEZ teils teils trifft eher nicht zu teils teils teils teils 37 62 3 1.0 1000 ... False True True False 3 ca. 62% 3 2 3 3
4 2024/04/16 10:50:29 AM OEZ trifft eher zu trifft völlig zu trifft eher nicht zu trifft eher nicht zu 65 82 3 350.0 90 ... True False False True 2 ca. 82% 4 5 2 2

5 rows × 24 columns

Variablen-Liste für Bereinigung

# Liste mit den noch enthaltenen Original-Spalten erstellen
list_drop = df.filter(like='_orig', axis=1).columns.tolist()

list_drop
['entmutigen_orig', 'energie_orig']
list_drop.append('zeit')

list_drop
['entmutigen_orig', 'energie_orig', 'zeit']

Variablen löschen

# Wir entfernen die Original-Spalten und die Variable zeit
df = df.drop(columns=list_drop)

df.head()
sport fleissig entmutigen talente einkommen energie megacity geleebohnen soziale_medien studium ... alter geschlecht buch__Ja buch__Nein geschlecht__Männlich geschlecht__Weiblich sport_qm fleissig_qm talente_qm entmutigen_qm
0 trifft völlig zu trifft eher zu trifft eher nicht zu trifft eher zu 80 82 3 2000.0 40 3 ... 21 Männlich True False True False 5 4 4 2
1 trifft eher nicht zu trifft eher zu trifft eher nicht zu trifft überhaupt nicht zu 23 82 3 500.0 240 120 ... 24 Weiblich True False False True 2 4 1 2
2 teils teils trifft eher zu trifft eher zu trifft eher nicht zu 37 62 2 756.0 240 30 ... 19 Weiblich True False False True 3 4 2 4
3 teils teils trifft eher nicht zu teils teils teils teils 37 62 3 1.0 1000 60 ... 20 Männlich False True True False 3 2 3 3
4 trifft eher zu trifft völlig zu trifft eher nicht zu trifft eher nicht zu 65 82 3 350.0 90 2 ... 22 Weiblich True False False True 4 5 2 2

5 rows × 21 columns

Liste mit Dummy-Variablen

# Liste mit Dummy-Variablen erstellen
list_dummy = df.filter(like='__', axis=1).columns

list_dummy
Index(['buch__Ja', 'buch__Nein', 'geschlecht__Männlich',
       'geschlecht__Weiblich'],
      dtype='object')

Dummy-Variablen anpassen

# Dummy-Variablen als Objekt-Daten speichern
for i in list_dummy:
    df[i] = df[i].astype("object")

Liste mit numerischen Variablen

# Liste für metrische Daten
list_metric = df.select_dtypes(include=[np.number]).columns.tolist()

list_metric
['energie',
 'megacity',
 'geleebohnen',
 'soziale_medien',
 'studium',
 'alter',
 'sport_qm',
 'fleissig_qm',
 'talente_qm',
 'entmutigen_qm']

Liste mit kategorialen Variablen

# Liste für kategoriale Daten
list_cat = df.select_dtypes(include=['object']).columns.tolist()

list_cat
['sport',
 'fleissig',
 'entmutigen',
 'talente',
 'einkommen',
 'buch',
 'geschlecht',
 'buch__Ja',
 'buch__Nein',
 'geschlecht__Männlich',
 'geschlecht__Weiblich']

Kategoriale Variablen anpassen

# Kategoriale Daten formatieren
for i in list_cat:
    df[i] = df[i].astype("category")

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 31 entries, 0 to 30
Data columns (total 21 columns):
 #   Column                Non-Null Count  Dtype   
---  ------                --------------  -----   
 0   sport                 31 non-null     category
 1   fleissig              31 non-null     category
 2   entmutigen            31 non-null     category
 3   talente               31 non-null     category
 4   einkommen             31 non-null     category
 5   energie               31 non-null     int64   
 6   megacity              31 non-null     int64   
 7   geleebohnen           31 non-null     float64 
 8   soziale_medien        31 non-null     int64   
 9   studium               31 non-null     int64   
 10  buch                  31 non-null     category
 11  alter                 31 non-null     int64   
 12  geschlecht            31 non-null     category
 13  buch__Ja              31 non-null     category
 14  buch__Nein            31 non-null     category
 15  geschlecht__Männlich  31 non-null     category
 16  geschlecht__Weiblich  31 non-null     category
 17  sport_qm              31 non-null     int64   
 18  fleissig_qm           31 non-null     int64   
 19  talente_qm            31 non-null     int64   
 20  entmutigen_qm         31 non-null     int64   
dtypes: category(11), float64(1), int64(9)
memory usage: 4.9 KB

Datenüberblick

df
sport fleissig entmutigen talente einkommen energie megacity geleebohnen soziale_medien studium ... alter geschlecht buch__Ja buch__Nein geschlecht__Männlich geschlecht__Weiblich sport_qm fleissig_qm talente_qm entmutigen_qm
0 trifft völlig zu trifft eher zu trifft eher nicht zu trifft eher zu 80 82 3 2000.0 40 3 ... 21 Männlich True False True False 5 4 4 2
1 trifft eher nicht zu trifft eher zu trifft eher nicht zu trifft überhaupt nicht zu 23 82 3 500.0 240 120 ... 24 Weiblich True False False True 2 4 1 2
2 teils teils trifft eher zu trifft eher zu trifft eher nicht zu 37 62 2 756.0 240 30 ... 19 Weiblich True False False True 3 4 2 4
3 teils teils trifft eher nicht zu teils teils teils teils 37 62 3 1.0 1000 60 ... 20 Männlich False True True False 3 2 3 3
4 trifft eher zu trifft völlig zu trifft eher nicht zu trifft eher nicht zu 65 82 3 350.0 90 2 ... 22 Weiblich True False False True 4 5 2 2
5 trifft eher nicht zu trifft völlig zu trifft eher zu teils teils 61 62 4 7832.0 180 40 ... 20 Weiblich True False False True 2 5 3 4
6 trifft eher zu trifft eher zu trifft völlig zu trifft eher nicht zu 65 62 2 800.0 130 30 ... 27 Männlich False True True False 4 4 2 5
7 trifft eher zu trifft eher zu teils teils trifft eher nicht zu 50 82 4 1000.0 60 120 ... 19 Weiblich True False False True 4 4 2 3
8 teils teils trifft eher zu trifft eher nicht zu trifft überhaupt nicht zu 70 62 3 20000.0 120 60 ... 21 Weiblich True False False True 3 4 1 2
9 trifft völlig zu teils teils trifft eher zu trifft eher nicht zu 70 82 3 254.0 60 100 ... 20 Männlich False True True False 5 3 2 4
10 trifft eher zu trifft eher zu teils teils trifft überhaupt nicht zu 40 82 3 900.0 100 40 ... 21 Männlich False True True False 4 4 1 3
11 trifft eher nicht zu teils teils trifft eher zu trifft überhaupt nicht zu 31 82 2 5843.0 187 60 ... 21 Männlich False True True False 2 3 1 4
12 trifft eher nicht zu trifft völlig zu teils teils teils teils 65 62 2 1152.0 240 30 ... 20 Weiblich False True False True 2 5 3 3
13 trifft eher nicht zu trifft eher zu teils teils trifft eher nicht zu 9 82 4 500.0 250 100 ... 20 Weiblich True False False True 2 4 2 3
14 trifft völlig zu trifft völlig zu trifft eher zu trifft eher zu 61 62 3 400.0 3 2 ... 26 Männlich False True True False 5 5 4 4
15 trifft eher zu trifft völlig zu trifft völlig zu trifft eher nicht zu 37 62 3 1120.0 120 100 ... 24 Weiblich True False False True 4 5 2 5
16 trifft eher zu teils teils trifft eher zu trifft überhaupt nicht zu 64 62 3 850.0 280 30 ... 22 Männlich False True True False 4 3 1 4
17 trifft völlig zu trifft völlig zu trifft eher zu trifft eher nicht zu 48 62 1 260.0 5 20 ... 20 Männlich True False True False 5 5 2 4
18 trifft eher zu trifft eher zu trifft eher zu trifft eher nicht zu 65 82 3 500.0 120 100 ... 19 Weiblich True False False True 4 4 2 4
19 trifft völlig zu teils teils trifft eher zu teils teils 61 82 2 1500.0 100 100 ... 20 Männlich False True True False 5 3 3 4
20 trifft eher zu trifft eher nicht zu trifft eher zu trifft überhaupt nicht zu 62 82 3 2024.0 60 90 ... 21 Weiblich False True False True 4 2 1 4
21 trifft völlig zu trifft völlig zu teils teils teils teils 30 82 4 1000.0 90 90 ... 21 Weiblich True False False True 5 5 3 3
22 trifft eher zu trifft völlig zu trifft eher nicht zu trifft eher nicht zu 65 62 4 350.0 90 120 ... 22 Weiblich True False False True 4 5 2 2
23 trifft völlig zu trifft eher nicht zu teils teils trifft eher nicht zu 60 62 3 1000.0 60 60 ... 21 Weiblich True False False True 5 2 2 3
24 trifft völlig zu trifft eher zu teils teils trifft eher nicht zu 75 62 2 50.0 90 2 ... 22 Männlich False True True False 5 4 2 3
25 trifft völlig zu trifft eher zu trifft eher zu teils teils 55 62 3 87.0 120 120 ... 22 Weiblich False True False True 5 4 3 4
26 teils teils teils teils trifft eher zu trifft eher nicht zu 9 82 3 1000.0 180 180 ... 21 Weiblich False True False True 3 3 2 4
27 trifft eher zu trifft eher zu trifft eher zu trifft eher nicht zu 48% 42 3 108.0 240 120 ... 20 Weiblich False True False True 4 4 2 4
28 trifft völlig zu teils teils trifft eher zu trifft eher nicht zu 65 82 3 600.0 120 240 ... 27 Männlich False True True False 5 3 2 4
29 trifft eher zu teils teils teils teils trifft eher nicht zu 48 62 3 2000.0 600 120 ... 22 Weiblich False True False True 4 3 2 3
30 teils teils trifft eher zu teils teils teils teils 50 62 2 1000.0 90 90 ... 23 Weiblich True False False True 3 4 3 3

31 rows × 21 columns

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 31 entries, 0 to 30
Data columns (total 21 columns):
 #   Column                Non-Null Count  Dtype   
---  ------                --------------  -----   
 0   sport                 31 non-null     category
 1   fleissig              31 non-null     category
 2   entmutigen            31 non-null     category
 3   talente               31 non-null     category
 4   einkommen             31 non-null     category
 5   energie               31 non-null     int64   
 6   megacity              31 non-null     int64   
 7   geleebohnen           31 non-null     float64 
 8   soziale_medien        31 non-null     int64   
 9   studium               31 non-null     int64   
 10  buch                  31 non-null     category
 11  alter                 31 non-null     int64   
 12  geschlecht            31 non-null     category
 13  buch__Ja              31 non-null     category
 14  buch__Nein            31 non-null     category
 15  geschlecht__Männlich  31 non-null     category
 16  geschlecht__Weiblich  31 non-null     category
 17  sport_qm              31 non-null     int64   
 18  fleissig_qm           31 non-null     int64   
 19  talente_qm            31 non-null     int64   
 20  entmutigen_qm         31 non-null     int64   
dtypes: category(11), float64(1), int64(9)
memory usage: 4.9 KB

Deskriptive Analyse

Statistische Daten für kategoriale Variablen

df[list_cat].describe().T
count unique top freq
sport 31 4 trifft eher zu 11
fleissig 31 4 trifft eher zu 13
entmutigen 31 4 trifft eher zu 14
talente 31 4 trifft eher nicht zu 16
einkommen 31 18 65 6
buch 31 2 Nein 16
geschlecht 31 2 Weiblich 19
buch__Ja 31 2 False 16
buch__Nein 31 2 True 16
geschlecht__Männlich 31 2 False 19
geschlecht__Weiblich 31 2 True 19

Anzahl der Ausprägungen

for i in list_cat:
    print("-"*30)
    print(i, "\n", df[i].value_counts())
------------------------------
sport 
 sport
trifft eher zu          11
trifft völlig zu        10
teils teils              5
trifft eher nicht zu     5
Name: count, dtype: int64
------------------------------
fleissig 
 fleissig
trifft eher zu          13
trifft völlig zu         8
teils teils              7
trifft eher nicht zu     3
Name: count, dtype: int64
------------------------------
entmutigen 
 entmutigen
trifft eher zu          14
teils teils             10
trifft eher nicht zu     5
trifft völlig zu         2
Name: count, dtype: int64
------------------------------
talente 
 talente
trifft eher nicht zu         16
teils teils                   7
trifft überhaupt nicht zu     6
trifft eher zu                2
Name: count, dtype: int64
------------------------------
einkommen 
 einkommen
65     6
37     3
61     3
9      2
48     2
70     2
50     2
62     1
80     1
75     1
64     1
23     1
30     1
55     1
48%    1
40     1
31     1
60     1
Name: count, dtype: int64
------------------------------
buch 
 buch
Nein    16
Ja      15
Name: count, dtype: int64
------------------------------
geschlecht 
 geschlecht
Weiblich    19
Männlich    12
Name: count, dtype: int64
------------------------------
buch__Ja 
 buch__Ja
False    16
True     15
Name: count, dtype: int64
------------------------------
buch__Nein 
 buch__Nein
True     16
False    15
Name: count, dtype: int64
------------------------------
geschlecht__Männlich 
 geschlecht__Männlich
False    19
True     12
Name: count, dtype: int64
------------------------------
geschlecht__Weiblich 
 geschlecht__Weiblich
True     19
False    12
Name: count, dtype: int64

Numerische Variablen

df[list_metric].describe().round(2).T
count mean std min 25% 50% 75% max
energie 31.0 70.39 11.28 42.0 62.0 62.0 82.0 82.0
megacity 31.0 2.87 0.72 1.0 2.5 3.0 3.0 4.0
geleebohnen 31.0 1797.97 3748.82 1.0 375.0 850.0 1136.0 20000.0
soziale_medien 31.0 171.13 190.50 3.0 90.0 120.0 213.5 1000.0
studium 31.0 76.74 54.70 2.0 30.0 90.0 110.0 240.0
alter 31.0 21.55 2.13 19.0 20.0 21.0 22.0 27.0
sport_qm 31.0 3.84 1.07 2.0 3.0 4.0 5.0 5.0
fleissig_qm 31.0 3.84 0.93 2.0 3.0 4.0 4.5 5.0
talente_qm 31.0 2.16 0.82 1.0 2.0 2.0 3.0 4.0
entmutigen_qm 31.0 3.42 0.85 2.0 3.0 4.0 4.0 5.0