참고
해당 데이터는 공식 데이터(국제스포츠정보센터)와 차이가 있음.
복식/단체 종목의 경우 한 종목에서 여러명이 메달을 획득하지만, 국가 순위 집계시 1개로 집계됨
올림픽 메달 취소 등 반영 안되어있음
복식/단체 종목의 선수 수, 당시 메달 수여 룰, 메달 취소 및 승격/승계 등의 실제 메타데이터가 없이는 확인 어려움
이러한 이유로 해당 자료 자체만으로 진행 할 예정이며, 국가별 메달 집계시 동일종목당 1개의 메달로 계산하고자 함
1) Target data 가져오기
# Load DataFrame
import pandas as pd
df_target = pd.read_csv('./datas/Summer-Olympic-medals-1976-to-2008.csv', encoding = 'ISO-8859-1')
df_target.head()
2) Preprocessing: missing data 처리
# 컬럼별 Missing data 확인
df_target.isnull().sum()
# Missing이 있는 행 삭제
df_target = df_target.dropna(axis = 0)
# index 초기화, 기존 index 삭제
df_target = df_target.reset_index(drop = True)
df_target.head(2)
3) Preprocessing: Data type 정리
df_target.info()
# float data를 int로 변경
df_target = df_target.astype({'Year' : int})
df_target.dtypes
1) 2008년 대한민국 메달리스트 찾기
df_target.head(2)
df_target['City'].unique()
df_target['Sport'].unique()
df_2008_Archery_GoldMedal = df_target[(df_target['City'] == 'Beijing') &
(df_target['Year'] == 2008) &
(df_target['Sport'] == 'Archery') &
(df_target['Medal'] == 'Gold') &
(df_target['Country_Code'] == 'KOR')]
df_2008_Archery_GoldMedal.head(2)
2) 대한민국 역대(1976-2008) 하계 올림픽 메달 획득 내역 확인
df_KOR_Medal = df_target[df_target['Country_Code'] == 'KOR']
df_KOR_Medal.head(2)
# 내용 일치 데이터 삭제 - 선수명(Athlete)과 성별(Gender)를 제외한 내용이 일치할 경우 같은 경기에서 획득한 메달로 간주
df_KOR_Medal.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
'Event', 'Country_Code', 'Country',
'Event_gender', 'Medal'])
from pandas.api.types import CategoricalDtype
cat_sort_medal = CategoricalDtype(['Gold', 'Silver', 'Bronze'], ordered=True)
df_KOR_Medal['Medal'] = df_KOR_Medal['Medal'].astype(cat_sort_medal)
df_KOR_Medal['Medal']
pivot1 = df_KOR_Medal.pivot_table(index = ['Year', 'Medal'],
values = ['City'],
aggfunc = len,
)
pivot1 = pd.DataFrame(pivot1)
pivot1
3) 1996년 애틀란타 올림픽 총 메달 개수 기준 상위 10개 국가 확인
df_1996_Atlanta = df_target[df_target['Year'] == 1996]
df_1996_Atlanta.head(2)
# 내용 일치 데이터 삭제 - 선수명(Athlete)과 성별(Gender)를 제외한 내용이 일치할 경우 같은 경기에서 획득한 메달로 간주
df_1996_Atlanta.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
'Event', 'Country_Code', 'Country',
'Event_gender', 'Medal'])
Atlanta_medal_cnt = df_1996_Atlanta.groupby(['Country'])['Medal'].count().reset_index(name = 'Medal')
Atlanta_medal_cnt = Atlanta_medal_cnt.sort_values(by = 'Medal', ascending = False)
Atlanta_medal_cnt.head(10)
4) 1996년 애틀란타 올림픽 금매달 개수 기준 상위 10개 국가 확인
df_1996_Atlanta.head(2)
from pandas.api.types import CategoricalDtype
cat_sort_medal = CategoricalDtype(['Gold', 'Silver', 'Bronze'], ordered=True)
df_1996_Atlanta['Medal'] = df_1996_Atlanta['Medal'].astype(cat_sort_medal)
df_1996_Atlanta['Medal']
Atlanta_medal_cnt2 = df_1996_Atlanta.groupby(['Country', 'Medal']).count()
Atlanta_medal_cnt2
Atlanta_medal_cnt2 = Atlanta_medal_cnt2.reset_index()
Atlanta_medal_cnt2
Atlanta_medal_cnt2.drop(['Year', 'Sport', 'Discipline', 'Event',
'Athlete', 'Gender', 'Country_Code', 'Event_gender'],
axis = 1,
inplace = True)
Atlanta_medal_cnt2.head()
Atlanta_medal_cnt2 = Atlanta_medal_cnt2.pivot(index = 'Country', columns = 'Medal', values = 'City')
Atlanta_medal_cnt2.head()
Atlanta_medal_cnt2.info()
Atlanta_medal_cnt2 = Atlanta_medal_cnt2.reset_index()
Atlanta_medal_cnt2.head()
Atlanta_medal_cnt2 = Atlanta_medal_cnt2.sort_values(by = 'Gold', ascending = False)
Atlanta_medal_cnt2.head()