Kaggle 올림픽 데이터를 활용한 EDA 1번째
2019. 3. 16. 17:39ㆍ분석 R/EDA
html이나 rmd가 필요하다면 댓글에 글 남겨주세요.
- 관련 파일 :
athlete_events.csv
,noc_regions.csv
- 필요 패키지 :
tidyverse
0. Package
library(tidyverse)
Problem
1. 데이터 불러오기
Kaggle 120 years of Olympic history: athletes and results
에서 압축 파일을 다운 받은 후에 압축을 해제하시오- Kaggle site에 login 후 download 가능.
- URL : https://www.kaggle.com/heesoo37/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 |