티스토리 뷰

데이터 R지?

13주차_대면수업

jsBae 2022. 5. 25. 18:08

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

train.csv
0.06MB

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
반응형