R Programmierung: Auswertung der Titanic Daten von Kaggle

Contents

Titanic Datensatz einlesen

train <- read.csv("C:/[PFAD]/train.csv", header = TRUE)

Information über die Datenstruktur

str (train)

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

head (train)

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

dim(tableName)
oder
nrow (train)
ncol (train)

Ergebnis:
891
11

Anzahl überlebende und verstorbene Passagiere

table (train$survived)x

Ergebnis:
342 Überlebende
549 Verstorbene

Darstellung:

pie ( table(train$survived), labels=c( paste("Verstorbene =", table (train$survived), "Personen"), "Überlebende"), main = "Anzahl überlebende und verstorbene Passagiere" )

Anzahl überlebende und verstorbene Passagiere

# Prozentuale Auswertung

prop.table(table (train$survived))

Ergebnis:
38% Überlebende
62% Verstorbene

Übersicht über das Geschlecht der Reisenden

table (train$sex)

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

Darstellung:

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) )

Übersicht über das Geschlecht der Reisenden

Anzahl überlebende und verstorbene Passagiere nach Geschlecht

table(train$sex, train$survived)

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

Darstellung:

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) )

Anzahl überlebende und verstorbene Passagiere nach Geschlecht

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

prop.table(table(train$sex, train$survived))

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)

prop.table(table(train$sex, train$survived),1)

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

table (train$pclass)

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)

table(train$survived, train$pclass)

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:

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" )

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

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

prop.table(table(train$survived, train$pclass))

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

100/216*136 #62.96296
100/216*80 #37.03704

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

table(train$sex, train$survived, train$pclass)

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

qplot(age, ylab = "Number", main = "Alter der Passagiere", data = train, geom = "bar")

Alter der Passagiere

Durchschnittsalter der Passagiere

summary(train$age)

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

summary(train[train$survived=="1" & train$sex=="male" & train$pclass=="1" ,]$age)

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

sum (table(train[train$survived=="0" & train$pclass=="1" & train$age < 18 ,]$age))

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

sum (table(train[train$survived=="1" & train$sex=="female" & train$pclass=="1" & train$age < 18 ,]$age))

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

sum (table(train[train$survived=="0" & train$sex=="female" & train$pclass=="1" & train$age < 18 ,]$age))

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

install.packages("FSelector")
library (FSelector)

# Berechnung von ‚Information gain‘ – ‚target value‘ entspricht ‚train$survived‘.

information.gain(train)

# 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

anyDuplicated( as.character(train$name) )

Ergebnis:
0 # Keine Duplikate

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

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)

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

Anzahl überlebende und verstorbene nach Title

table(titles, train$survived)

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)

100/40*17 # 42,5%
100/40*23 # 57,5%

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

table(titles, train$survived, train$pclass)

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

table(titles, ages)

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.