Kaggle 올림픽 데이터를 활용한 EDA 1번째

2019. 3. 16. 17:39분석 R/EDA

728x90
2018-11-05 TEST2-Solution

html이나 rmd가 필요하다면 댓글에 글 남겨주세요.

  • 관련 파일 : athlete_events.csv , noc_regions.csv
  • 필요 패키지 :tidyverse



0. Package

library(tidyverse)



Problem

1. 데이터 불러오기

  • Kaggle 120 years of Olympic history: athletes and results에서 압축 파일을 다운 받은 후에 압축을 해제하시오
  • 사용할 데이터 : athlete_events.csv , noc_regions.csv
    • 위 데이터를 read.csv를 이용하여 불러와 athlete , Region 라는 이름의 data frame을 생성
  • 앞에서 3개씩만 추출
athlete <- read.csv("./olympic_data/athlete_events.csv")
Region <- read.csv("./olympic_data/noc_regions.csv")
head(athlete ,3 )
##   ID                Name Sex Age Height Weight    Team NOC       Games
## 1  1           A Dijiang   M  24    180     80   China CHN 1992 Summer
## 2  2            A Lamusi   M  23    170     60   China CHN 2012 Summer
## 3  3 Gunnar Nielsen Aaby   M  24     NA     NA Denmark DEN 1920 Summer
##   Year Season      City      Sport                        Event Medal
## 1 1992 Summer Barcelona Basketball  Basketball Men's Basketball  <NA>
## 2 2012 Summer    London       Judo Judo Men's Extra-Lightweight  <NA>
## 3 1920 Summer Antwerpen   Football      Football Men's Football  <NA>
head(Region ,3 )
##   NOC      region                notes
## 1 AFG Afghanistan                     
## 2 AHO     Curacao Netherlands Antilles
## 3 ALB     Albania



2. Data Preprocessing

2.1 Variable Selection

2.1.1 athelte 데이터셋 Variable Selection
  • athlete : ID , Games , Season , City , Sport ,Event 제외
  • 전처리된 테이블의 객체명은 전처리 되기 전 테이블과 동일하게 지정
  • 선택된 변수명와 앞에서 3개씩만 추출
athlete <- athlete %>% select(-c(ID , Games , Season , City , Sport ,Event))
Region <- Region %>% select(-notes )
colnames(athlete)
## [1] "Name"   "Sex"    "Age"    "Height" "Weight" "Team"   "NOC"    "Year"  
## [9] "Medal"
head(athlete , 3 )
##                  Name Sex Age Height Weight    Team NOC Year Medal
## 1           A Dijiang   M  24    180     80   China CHN 1992  <NA>
## 2            A Lamusi   M  23    170     60   China CHN 2012  <NA>
## 3 Gunnar Nielsen Aaby   M  24     NA     NA Denmark DEN 1920  <NA>



2.1.2 Region 데이터셋 Variable Selection
  • Region : notes 제외
  • 전처리된 테이블의 객체명은 전처리 되기 전 테이블과 동일하게 지정
  • 선택된 변수명와 앞에서 3개씩만 추출
colnames(Region)
## [1] "NOC"    "region"
head(Region , 3 )
##   NOC      region
## 1 AFG Afghanistan
## 2 AHO     Curacao
## 3 ALB     Albania



2.2 Variabe attribute Change

  • Medal에 있는 ‘NA’ 값을 None로 변경
  • levels 의 순서는 1.Gold , 2.Silver 3.Bronze , 4.None 로 변경
  • Medals 변수의 level 출력.
athlete$Medal <- as.character(athlete$Medal)
athlete$Medal[is.na(athlete$Medal)] <- "None"
athlete$Medal <- factor(athlete$Medal, levels = c("Gold", "Silver", "Bronze" , "None"))
levels(athlete$Medal)
## [1] "Gold"   "Silver" "Bronze" "None"



2.3 Missing value handling

  • 변경 이후 2개의 테이블에서 결측치 전부 제거
  • 전처리된 테이블의 객체명은 전처리 되기 전 테이블과 동일하게 지정
  • 2개의 테이블 각각 na가 몇개인지 출력.
athlete <- na.omit(athlete)
Region  <- na.omit(Region)
colSums(is.na(athlete))
##   Name    Sex    Age Height Weight   Team    NOC   Year  Medal 
##      0      0      0      0      0      0      0      0      0
colSums(is.na(Region))
##    NOC region 
##      0      0



3. 올림픽에 6번 이상 참가한 사람을 추출.

  • 앞에서 5개만 추출
count <- athlete %>% group_by(Name) %>% summarise( n=n() ) %>% filter( n > 5)
head(count,5)
## # A tibble: 5 x 2
##   Name                    n
##   <fct>               <int>
## 1 " Th Ngn Thng"          7
## 2 Aaron Wells Peirsol     7
## 3 Abdon Pamich            6
## 4 Abdul Aziz Zakari       6
## 5 Abdul Khaliq            6



4. Data Processing

4.1 전처리된 athlete 테이블을 ‘NOC’ 기준으로 전처리된 Region 테이블과 left join 한 테이블 생성

  • 새로 만든 객체는 Total 이름의 data.frame을 생성
  • 앞에서 5개만 추출
athlete$NOC <- as.character(athlete$NOC)
Region$NOC <- as.character(Region$NOC)
Total <- athlete %>% left_join( Region , by = "NOC")
head(Total)
##                       Name Sex Age Height Weight        Team NOC Year
## 1                A Dijiang   M  24    180     80       China CHN 1992
## 2                 A Lamusi   M  23    170     60       China CHN 2012
## 3 Christine Jacoba Aaftink   F  21    185     82 Netherlands NED 1988
## 4 Christine Jacoba Aaftink   F  21    185     82 Netherlands NED 1988
## 5 Christine Jacoba Aaftink   F  25    185     82 Netherlands NED 1992
## 6 Christine Jacoba Aaftink   F  25    185     82 Netherlands NED 1992
##   Medal      region
## 1  None       China
## 2  None       China
## 3  None Netherlands
## 4  None Netherlands
## 5  None Netherlands
## 6  None Netherlands



4.2 Medal 별로 평균 Age , 평균 Height , 평균 Weight 테이블 생성

  • Output에 보이는 것과 동일하게 출력.
Total %>% group_by(Medal) %>% summarise(mean_age = mean(Age) , mean_height = mean(Height) , mean_weight = mean(Weight))
## # A tibble: 4 x 4
##   Medal  mean_age mean_height mean_weight
##   <fct>     <dbl>       <dbl>       <dbl>
## 1 Gold       25.3        178.        74.1
## 2 Silver     25.5        178.        73.6
## 3 Bronze     25.5        177.        73.5
## 4 None       25.0        175.        70.2



4.3 Total 이라는 데이터셋에서 Team에 따른 Medal의 비율을 Percent 변수로 생성

  • 소수점 2자리까지만 보이기.
  • Total2 라는 이름의 객체를 생성.
  • 앞에서 5개만 추출
Total2 <- Total %>% group_by(Team , Medal) %>% summarise( percent = round((n()/nrow(Total))*100,2) )
head(Total2, 5)
## # A tibble: 5 x 3
## # Groups:   Team [4]
##   Team        Medal  percent
##   <fct>       <fct>    <dbl>
## 1 30. Februar None      0   
## 2 Acipactli   None      0   
## 3 Afghanistan Bronze    0   
## 4 Afghanistan None      0.03
## 5 Akatonbo    None      0





728x90

'분석 R > EDA' 카테고리의 다른 글

Data Handling Practice  (0) 2019.04.18
Tidyverse (ggplot)  (0) 2019.03.19
Kaggle BlackFriday 데이터를 활용한 EDA  (0) 2019.03.16
Kaggle 올림픽 데이터를 활용한 EDA 2번째  (0) 2019.03.16