티스토리 뷰
Chapter11. 누가 생존 했을까?
1. Titanic Dataset
2. 데이터 수집
3. 데이터 살펴보기
4. 데이터 정제하기
5. 데이터 시각화하기
1. Titanic Dataset
타이타닉 데이터셋 사이트 주소 : https://www.Kaggle.com/c/titanic/data
Titanic - Machine Learning from Disaster | Kaggle
www.Kaggle.com
2. 데이터 불러오기
data <- read.csv("train.csv", stringsAsFactors = FALSE)
stringsAsFactors = FALSE :
문자형태의 데이터를 문자 그대로 가져옴.
> str(data)
'data.frame': 891 obs. of 12 variables:
$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
$ 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 : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
$ Sex : chr "male" "female" "female" "female" ...
$ 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 : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
$ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
$ Cabin : chr "" "C85" "" "C123" ...
$ Embarked : chr "S" "C" "S" "S" ...
> head(data)
PassengerId Survived Pclass Name Sex Age SibSp Parch
1 1 0 3 Braund, Mr. Owen Harris male 22 1 0
2 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0
3 3 1 3 Heikkinen, Miss. Laina female 26 0 0
4 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0
5 5 0 3 Allen, Mr. William Henry male 35 0 0
6 6 0 3 Moran, Mr. James male NA 0 0
Ticket Fare Cabin Embarked
1 A/5 21171 7.2500 S
2 PC 17599 71.2833 C85 C
3 STON/O2. 3101282 7.9250 S
4 113803 53.1000 C123 S
5 373450 8.0500 S
6 330877 8.4583 Q
3. 데이터 살펴보기
head(data)
tail(data)
nrow(data)
dim(data)
colnames(data)
str(data)
summary(data)
> summary(data)
PassengerId Survived Pclass Name Sex Age
Min. : 1.0 Min. :0.0000 Min. :1.000 Length:891 Length:891 Min. : 0.42
1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000 Class :character Class :character 1st Qu.:20.12
Median :446.0 Median :0.0000 Median :3.000 Mode :character Mode :character Median :28.00
Mean :446.0 Mean :0.3838 Mean :2.309 Mean :29.70
3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000 3rd Qu.:38.00
Max. :891.0 Max. :1.0000 Max. :3.000 Max. :80.00
NA's :177
SibSp Parch Ticket Fare Cabin
Min. :0.000 Min. :0.0000 Length:891 Min. : 0.00 Length:891
1st Qu.:0.000 1st Qu.:0.0000 Class :character 1st Qu.: 7.91 Class :character
Median :0.000 Median :0.0000 Mode :character Median : 14.45 Mode :character
Mean :0.523 Mean :0.3816 Mean : 32.20
3rd Qu.:1.000 3rd Qu.:0.0000 3rd Qu.: 31.00
Max. :8.000 Max. :6.0000 Max. :512.33
Embarked
Length:891
Class :character
Mode :character
4. 데이터 정제하기
#변수 형 변환
data$Survived <- as.factor(data$Survived)
data$Pclass <- as.factor(data$Pclass)
data$Sex <- as.factor(data$Sex)
data$Embarked <- as.factor(data$Embarked)
또는 lapply() 이용
> data[c("Survived","Pclass","Sex", "Embarked")] <- lapply(data[c("Survived","Pclass","Sex", "Embarked")], as.factor)
> str(data)
'data.frame': 891 obs. of 12 variables:
$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
$ Survived : Factor w/ 2 levels "0","1": 1 2 2 2 1 1 1 1 2 2 ...
$ Pclass : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ...
$ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
$ 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 : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
$ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
$ Cabin : chr "" "C85" "" "C123" ...
$ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
#결측치 제거
anyNA(data)
is.na(data)
table(is.na(data))
> colSums(is.na(data))
PassengerId Survived Pclass Name Sex Age SibSp Parch
0 0 0 0 0 177 0 0
Ticket Fare Cabin Embarked
0 0 0 0
data <- data[!is.na(data$Age),]
또는
data1 <- na.omit(data)
#행이 공백으로 되어 있는 행의 개수 출력
> nrow(data[data$Cabin=="",])
[1] 529
공백 데이터가 너무 많아서 열을 삭제 함.
> data <- data[-11]
> dim(data)
[1] 714 11
> colnames(data)
[1] "PassengerId" "Survived" "Pclass" "Name" "Sex" "Age" "SibSp"
[8] "Parch" "Ticket" "Fare" "Embarked"
> nrow(data[data$Embarked=="",])
[1] 2
> data <- data[data$Embarked!="",]
> dim(data)
[1] 712 11
5. 데이터 시각화하기
library(ggplot2)
#생존자의 남녀 비율
ggplot(data, aes(Survived, fill=Sex))+
geom_bar()+
labs(title = "Titanic Survived by Sex")

ggplot(data, aes(Survived, fill=Sex))+
geom_bar(position = "fill")+
labs(title = "Titanic Survived by Sex", y="Proportion")

ggplot(data, aes(Survived, fill=Pclass))+
geom_bar(position = "fill")+
labs(title = "Titanic Survived by Sex", y="Proportion")

#Pclass에 따른 생존 여부 (dodge) #옆으로 나란히 표시
ggplot(data, aes(Survived, fill=Pclass))+
geom_bar(position = "dodge")+
labs(title = "Titanic Survived by Sex", y="Proportion")

* stat = count * 해당 값의 빈도를 나타냄
* stat = identity * aes(x,y) x에 해당하는 y값
geom_bar() 옵션
| 옵션 | 설명 |
| alpha | bar 투명도 |
| color | bar 테두리 색상 |
| fill | bar 내부 색상 |
| group | 그룹지정 |
| linetype | bar 모양 |
| size | bar 크기 |
| show.legend | 범주 여부 |
여기서 잠깐!

히스토그램(histogram)은 표로 되어 있는 도수 분포를 정보 그림 으로 나타낸 것이다.
보통 히스토그램에서는 가로축이 계급 , 세로축이 도수를 뜻하는데, 때때로 반대로 그리기도 한다.
계급은 보통 변수의 구간 이고, 서로 겹치지 않는다. 그림에서 계급(막대기)끼리는 서로 붙어 있어야 한다.
히스토그램은 일반 막대그래프 와는 다르다. 막대그래프 는 계급 즉 가로를 생각하지 않고 세로의 높이로만 나타내지만 히스토그램은 가로와 세로를 함께 생각해야 한다

집단간 비교를 위한 면 분할
facet_grid() 함수와 facet_wrap() 함수를 사용
ggplot(data, aes(Age, fill=Survived))+
geom_histogram()+
labs(title = "titanic age histogram")+
facet_grid(rows=vars(Sex),cols = vars(Pclass))
ggplot(data, aes(Age, fill=Survived))+
geom_histogram()+
labs(title = "titanic age histogram")+
facet_grid(Sex~Pclass)

728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
반응형