Zum Inhalt springen

R Programmierung: Auswertung der Titanic Daten von Kaggle

    Table of Contents

    Titanic Datensatz einlesen

    [codesyntax lang=“php“]train <- read.csv(„C:/[PFAD]/train.csv“, header = TRUE)[/codesyntax]

    Information über die Datenstruktur

    [codesyntax lang=“php“]str (train)[/codesyntax]

    Ergebnis:
    ‚train.frame‘: 891 obs. of 11 variables:
    $ survived: int 0 1 1 1 0 0 0 0 1 1 …
    $ pclass : int 3 1 3 1 3 3 1 3 3 2 …
    $ name : Factor w/ 891 levels „Abbing, Mr. Anthony“,..: 109 191 358 277 16 559 520 629 417 581 …
    $ sex : Factor w/ 2 levels „female“,“male“: 2 1 1 1 2 2 2 2 1 1 …
    $ age : num 22 38 26 35 35 NA 54 2 27 14 …
    $ sibsp : int 1 1 0 1 0 0 0 3 0 1 …
    $ parch : int 0 0 0 0 0 0 0 1 2 0 …
    $ ticket : Factor w/ 681 levels „110152“,“110413″,..: 524 597 670 50 473 276 86 396 345 133 …
    $ fare : num 7.25 71.28 7.92 53.1 8.05 …
    $ cabin : Factor w/ 148 levels „“,“A10″,“A14″,..: 1 83 1 57 1 1 131 1 1 1 …
    $ embarked: Factor w/ 4 levels „“,“C“,“Q“,“S“: 4 2 4 4 4 3 4 4 4 2 …

    Die ersten Datensätzte ink. Spaltenüberschrift anzeigen lassen

    [codesyntax lang=“php“]head (train)[/codesyntax]

    Ergebnis:
    survived pclass name sex age sibsp parch ticket fare cabin embarked
    1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.2500 S
    2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.2833 C85 C
    3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9250 S
    4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1000 C123 S
    5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.0500 S
    6 0 3 Moran, Mr. James male NA 0 0 330877 8.4583 Q

    Anzahl der Zeilen & Spalten bzw. Datensätze

    [codesyntax lang=“php“]dim(tableName)

    oder

    nrow (train)
    ncol (train)[/codesyntax]

    Ergebnis:
    891
    11

    Anzahl überlebende und verstorbene Passagiere

    [codesyntax lang=“php“]table (train$survived)x[/codesyntax]

    Ergebnis:
    342 Überlebende
    549 Verstorbene

    Darstellung:
    [codesyntax lang=“php“]pie ( table(train$survived), labels=c( paste(„Verstorbene =“, table (train$survived), „Personen“), „Überlebende“), main = „Anzahl überlebende und verstorbene Passagiere“ )[/codesyntax]

    Anzahl überlebende und verstorbene Passagiere

    # Prozentuale Auswertung
    [codesyntax lang=“php“]prop.table(table (train$survived))[/codesyntax]

    Ergebnis:
    38% Überlebende
    62% Verstorbene

    Übersicht über das Geschlecht der Reisenden

    [codesyntax lang=“php“]table (train$sex)[/codesyntax]

    Ergebnis:
    Anzahl weibliche Passagiere: 314
    Anzahl männliche Passagiere: 577

    Darstellung:
    [codesyntax lang=“php“]barplot(table (train$sex), col = c(„pink“, „blue“), ylab = „Anzahl Passagiere“, main = „Anzahl Passagiere nach Geschlecht unterteilt“, legend.text = TRUE, args.legend = list(x=0.5, y=600), ylim = c(0,600) )[/codesyntax]

    Übersicht über das Geschlecht der Reisenden

    Anzahl überlebende und verstorbene Passagiere nach Geschlecht

    [codesyntax lang=“php“]table(train$sex, train$survived)[/codesyntax]

    Ergebnis:
    Anzahl überlebende Frauen: 233
    Anzahl verstorbene Frauen: 81
    Anzahl überlebende Männer: 109
    Anzahl verstorbene Männer: 468

    Darstellung:
    [codesyntax lang=“php“]barplot(table(train$sex, train$survived), col = c(„pink“, „blue“), ylab = „Anzahl Passagiere“, xlab = „0 = verstorben | 1 = überlebt „, main = „Übersicht überlebende und verstorbene Passagiere“, legend.text = TRUE, args.legend = list(x=2.4, y=600), ylim = c(0,600) )[/codesyntax]

    Anzahl überlebende und verstorbene Passagiere nach Geschlecht

    Anzahl (prozentual) überlebende und verstorbene Passagiere nach Geschlecht (ausgehend von Gesamtzahl der Passagiere)

    [codesyntax lang=“php“]prop.table(table(train$sex, train$survived))[/codesyntax]

    Ergebnis:
    Anzahl überlebende Frauen: 26%
    Anzahl verstorbene Frauen: 9%
    Anzahl überlebende Männer: 12%
    Anzahl verstorbene Männer: 53%

    Anzahl (prozentual) überlebende und verstorbene Passagiere (geschlechtsspezifisch)

    [codesyntax lang=“php“]prop.table(table(train$sex, train$survived),1)[/codesyntax]

    Ergebnis:
    Anzahl überlebende Frauen: 26% aller Frauen
    Anzahl verstorbene Frauen: 74%
    Anzahl überlebende Männer: 19% aller Männer
    Anzahl verstorbene Männer: 81%

    Anzahl der Personen pro Klasse

    [codesyntax lang=“php“]table (train$pclass)[/codesyntax]

    Ergebnis:
    Erste Klasse: 216 Personen
    Zweite Klasse: 184 Personen
    Dritte Klasse: 491 Personen

    Anzahl der Überlebende und verstorbene pro Klasse (ausgehend von Gesamtzahl der Passagiere)

    [codesyntax lang=“php“]table(train$survived, train$pclass)[/codesyntax]

    Ergebnis:
    Erste Klasse:
    Anzahl überlebende: 136
    Anzahl verstorbene: 80

    Zweite Klasse:
    Anzahl überlebende: 87
    Anzahl verstorbene: 97

    Dritte Klasse:
    Anzahl überlebende: 119
    Anzahl verstorbene: 372

    Darstellung:
    [codesyntax lang=“php“]dotchart(table(train$survived, train$pclass), pch = 15, col=“blue“, gcolor = „red“, lcolor = „orange“, xlab = „Anzahl überlebende und verstorbene Passagiere“, ylab = „Überlebende und versorbene Passagiere nach Klassen“, main = „Auflistung aller überlebenden und verstorbenene Passagiere nach Klassen“ )[/codesyntax]

    Anzahl der Überlebende und verstorbene pro Klasse (ausgehend von Gesamtzahl der Passagiere)

    Anzahl (prozentual) der Überlebende pro Klasse (ausgehend von Gesamtzahl der Passagiere)

    [codesyntax lang=“php“]prop.table(table(train$survived, train$pclass))[/codesyntax]

    Ergebnis:
    Erste Klasse
    Anzahl überlebende: 15%
    Anzahl verstorbene: 9%

    Zweite Klasse
    Anzahl überlebende: 10%
    Anzahl verstorbene: 11%

    Dritte Klasse
    Anzahl überlebende: 13%
    Anzahl verstorbene: 42%

    Anzahl (prozentual) der überlebenden und verstorbenen Passgiere aus der ersten Klasse

    [codesyntax lang=“php“]
    100/216*136 #62.96296
    100/216*80 #37.03704[/codesyntax]

    Ergebnis:
    63% der Passagiere aus der ersten Klasse haben überlebt
    37% der Passagiere aus der ersten Klasse sind verstorben

    Ergebnis für die zweite Klasse
    47% der Passagiere aus der zweiten Klasse haben überlebt
    53% der Passagiere aus der zweiten Klasse sind verstorben

    Ergebnis für die dritte Klasse
    24% der Passagiere aus der dritten Klasse haben überlebt
    76% der Passagiere aus der dritten Klasse sind verstorben

    Anzahl überlebende Frauen und Männer aus der einzelnen Klassen

    [codesyntax lang=“php“]table(train$sex, train$survived, train$pclass)[/codesyntax]

    Ergebnis:
    Erste Klasse
    Überlebende Frauen: 91
    Verstorbene Frauen: 3
    Überlebende Männer: 45
    Verstorbene Männer: 77

    Zweite Klasse
    Überlebende Frauen: 70
    Verstorbene Frauen: 6
    Überlebende Männer: 17
    Verstorbene Männer: 91

    Dritte Klasse
    Überlebende Frauen: 72
    Verstorbene Frauen: 72
    Überlebende Männer: 47
    Verstorbene Männer: 300

    Alter der Passagiere

    [codesyntax lang=“php“]qplot(age, ylab = „Number“, main = „Alter der Passagiere“, data = train, geom = „bar“)[/codesyntax]

    Alter der Passagiere

    Durchschnittsalter der Passagiere

    [codesyntax lang=“php“]summary(train$age)[/codesyntax]

    Ergebnis:
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
    0.42 20.12 28.00 29.70 38.00 80.00 177

    Durchschnittsalter der Überlebenden Frauen aus der ersten Klasse

    [codesyntax lang=“php“]summary(train[train$survived==“1″ & train$sex==“male“ & train$pclass==“1″ ,]$age)[/codesyntax]

    Ergebnis:
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
    14.00 23.25 35.00 34.94 44.00 63.00 9

    Ergebnis für die zweite Klasse:
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
    2.00 21.75 28.00 28.08 35.25 55.00 2

    Ergebnis für die dritte Klasse:
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
    0.75 13.50 19.00 19.33 26.50 63.00 25
    Anzahl Kinder in der ersten Klasse (Annahme: Kinder sind unter 18):
    Eingabe:
    sum (table(train[train$pclass==“1″ & train$age < 18 ,]$age))

    Ergebnis:
    12

    Ergebnis für die zweite Klasse:
    23

    Ergebnis für die dritte Klasse:
    78

    Anzahl verstorbene Kinder aus der ersten Klasse

    [codesyntax lang=“php“]sum (table(train[train$survived==“0″ & train$pclass==“1″ & train$age < 18 ,]$age))[/codesyntax]

    Ergebnis:
    1

    Ergebnis für die zweite Klasse:
    2

    Ergebnis für die dritte Klasse:
    49

    Anzahl überlebende Kinder (Mädchen) aus der ersten Klasse

    [codesyntax lang=“php“]sum (table(train[train$survived==“1″ & train$sex==“female“ & train$pclass==“1″ & train$age < 18 ,]$age))[/codesyntax]

    Ergebnis:
    7

    Ergebnis für die zweite Klasse:
    12

    Ergebnis für die dritte Klasse:
    19

    Anzahl verstorbene Kinder (Mädchen) aus der ersten Klasse

    [codesyntax lang=“php“]sum (table(train[train$survived==“0″ & train$sex==“female“ & train$pclass==“1″ & train$age < 18 ,]$age))[/codesyntax]

    Ergebnis:
    1

    Ergebnis für die zweite Klasse:
    0

    Ergebnis für die dritte Klasse:
    16

    Information Gain

    Def.: Der Information Gain ermittelt das Attribut, welches den meisten Informationsgehalt bringt. Es hat das Ziel, die Tiefe des Entscheidungsbaumes zu minimieren. Quelle: [Künstliche Intelligenz: Ein moderner Ansatz]

    # Paket ‚FSelector‘ installieren und laden
    [codesyntax lang=“php“]install.packages(„FSelector“)
    library (FSelector)[/codesyntax]

    # Berechnung von ‚Information gain‘ – ‚target value‘ entspricht ‚train$survived‘.
    [codesyntax lang=“php“]information.gain(train)[/codesyntax]

    # Ergebnis:
    attr_importance
    pclass 0.053608163
    name 1.609435396
    sex 0.145685212
    age 0.008687071
    sibsp 0.000000000
    parch 0.000000000
    ticket 1.355042740
    fare 0.048528443
    cabin 0.318976005
    embarked 0.022301869

    Die wichtigsten Attribute, für das Überleben der Passagiere sind ’name‘ und ‚ticket‘.

    Feststellen, ob die Spalte ’name‘ Duplikate beinhaltet

    [codesyntax lang=“php“]anyDuplicated( as.character(train$name) )[/codesyntax]

    Ergebnis:
    0 # Keine Duplikate

    Nach (Mrs., Miss., Mr., Master.) filtern

    [codesyntax lang=“php“]titles <- NULL
    mrs <- NULL
    miss <- NULL
    mr <- NULL
    master <- NULL
    other <- NULL
    ages <- NULL

    parseTitle <- function(name) {

    name <- as.character(name)

    if (length(grep(„Mrs.“, name)) > 0) {
    mrs <<- c(mrs, name)
    return („Mrs.“)
    } else if (length(grep(„Miss.“, name)) > 0) {
    miss <<- c(miss, name)
    return („Miss.“)
    } else if (length(grep(„Mr.“, name)) > 0) {
    mr <<- c(mr, name)
    return („Mr.“)
    } else if (length(grep(„Master.“, name)) > 0) {
    master <<- c(master, name)
    return („Master.“)
    } else {
    other <<- c(other, name)
    return („Other“)
    }
    }

    for (i in 1:nrow(train)) {
    titles <- c(titles, parseTitle(train[i, „name“]))
    ages <<- c(ages, train[i,5])
    }

    table(titles)[/codesyntax]

    Ergebnis:
    Master. Miss. Mr. Mrs. Other
    40 180 518 129 24

    Anzahl überlebende und verstorbene nach Title

    [codesyntax lang=“php“]table(titles, train$survived)[/codesyntax]

    Ergebnis:
    titles 0 1
    Master. 17 23
    Miss. 54 126
    Mr. 436 82
    Mrs. 27 102
    Other 15 9

    Anzahl überlebende und verstorbene nach Title (Prozentual)

    [codesyntax lang=“php“]100/40*17 # 42,5%
    100/40*23 # 57,5%[/codesyntax]

    Ergebnis:
    titles 0 1
    Master. 42,5% 57,5%
    Miss. 30% 70%
    Mr. 84,2% 15,8%
    Mrs. 20,9% 79,1%
    Other 62,5% 37,5%

    Titel nach Klassen unterteilt

    [codesyntax lang=“php“]table(titles, train$survived, train$pclass)[/codesyntax]

    Ergebnis:
    Erste Klasse
    titles 0 1
    Master. 0 3
    Miss. 2 44
    Mr. 70 38
    Mrs. 1 43
    Other 7 8

    Zweite Klasse
    titles 0 1
    Master. 0 9
    Miss. 1 31
    Mr. 83 8
    Mrs. 5 38
    Other 8 1

    Dritte Klasse
    titles 0 1
    Master. 17 11
    Miss. 51 51
    Mr. 283 36
    Mrs. 21 21
    Other 0 0

    Alter der Passagiere innerhalb der einzelnen Klassen berechnen

    [codesyntax lang=“php“]table(titles, ages)[/codesyntax]

    Ergebnis:
    # Der älteste Master. ist 12
    # Die älteste Miss. ist 63
    # Der älteste Mr. ist 80
    # Die älteste Mrs. ist 63