소품집

[Kaggle] 올림픽 데이터를 활용한 EDA 본문

AI

[Kaggle] 올림픽 데이터를 활용한 EDA

sodayeong 2020. 9. 8. 10:45

dplyr 패키지 연습 겸 EDA 연습 겸

 

getwd()
setwd('/Users/dayeong/Desktop/reserch/data')

library(dplyr)
library(ggplot2)

# 0. Data load 및 이전 시험 진행과정 
athlete <- read.csv('athlete_events.csv')
Region <- read.csv('noc_regions.csv')

athlete <- athlete %>% select(-ID)
Region <- Region %>% select(-notes)

athlete$Medal <- as.character(athlete$Medal)
athlete$Medal[is.na(athlete$Medal)] <- 'None'
athlete$Medal <- factor(athlete$Medal, levels = c('Gold', 'Siver', 'Bronze','None'))

# Na 결측치 제거 
athlete <- na.omit(athlete)
Region <- na.omit(Region)


# 1. ahtlete Data set에 Region data set left join
Total <- athlete %>% left_join(Region, by='NOC') # NOC를 기준으로 조인 시행 
head(Total)

# 2. 겨울에 열린 경기에서 금메달의 비율 구하기 
# Step1. Medal이 None값을 제외하고 year와 medal 별로 개수 출력
survey <- Total %>% 
  filter(Medal != "None") %>% 
  group_by( Year , Medal) %>% 
  summarise(n = n())

head(survey)

# Step2. 위의 결과물을 활용해 Year별로 Medal의 총 개수와 비율 변수 생성
survey2 <- survey %>% 
  mutate(sum_ = sum(n), ration = n/sum_)

# Step3. 위에 나온 결과물을 통해 medal이 gold이면서 season이 winter인 것만 출력
sel <- Total %>% filter(Season == "Winter") %>% arrange(Year)
winter_ <- unique(sel$Year) 
survey3 <- survey2 %>% filter(Medal == "Gold" & Year %in% winter_) 
head(survey3)

# 3. 특정조건을 만족하는 팀 뽑기 
# Step1. Team 별로 평균 Height가 180 초과이고 평균 weight이 80 이상인 팀 보이기
# - 평균 height별로 내림차순
# - 앞에서 5개만 출력
survey <- Total %>%
  group_by(Team) %>%
  summarise(mean_height = mean(Height), mean_weight = mean(Weight)) %>%
  filter(mean_height>=180 , mean_weight >=80) %>%
  arrange(desc(mean_height))

head(survey)

# Step2. 위의 나온 결과물을 활용해 해당하는 team만 뽑고, 
#        Team별로 가장 키가 큰 사람과 가장 작은 사람의 키, 두 키의 차이를 출력

team <- survey$Team

survey2 <- Total %>%
  filter(Team %in% team) %>%
  group_by(Team) %>%
  summarise(max_hei = max(Height), min_hei = min(Height),
            dif = max(Height)- min(Height))

head(survey2)

# Step3. 위의 결과물을 활용하여 다음과 같은 처리 진행. 
# - team별로 가장 키가 큰 사람과 가장 작은 사람의 차이가 30이상 나는 팀만 뽑기 
# - 차이나는 정도에 따라 내림차순으로 정렬
# - 팀의 문자열의 수가 10이상인 팀들만 뽑기

survey3 <- survey2 %>% 
  mutate(team_length = nchar(as.character(Team))) %>% 
  filter(dif>=30 & dif >=10) %>% 
  arrange(desc(dif))

# 4. Sport와 Sex별로 가장 많은 금메달을 뽑은 사람을 한 명씩 뽑기 
# Step1. Medal이 None인 사람은 제외하고 sport와 name별로 medal의 개수 카운트
survey <- Total %>% 
  filter(Medal!= 'None') %>%
  group_by(Sport, Sex) %>%
  mutate(medal_n=n())

head(survey)

# Step2. 위의 결과를 활용하여 Sport와 Sex별로 가장 많은 medal을 얻은 사람을 정렬
survey2 <- survey %>%
  group_by(Sport, Sex) %>%
  arrange(desc(medal_n)) %>%
  select(Sport, Sex, medal_n)

head(survey2)

# Step3. 위의 결과를 활용하여 Sport와 Sex별로 정렬했을 시 가장 첫번째 열만 뽑기
survey3 <- survey2 %>%
  filter(row_number() == 1L) %>%
  arrange(Sport, Sex)
  

728x90
Comments