Data
참고사항: 해당 데이터 분석시 한계점
해당 데이터는 공식 데이터와 차이가 있음.
대한민국 데이터 누락
복식/단체 종목의 경우 한 종목에서 여러명이 메달을 획득하지만, 국가 순위 집계시 1개로 집계됨
동일 종목인 경우 1개로 계산하는 것이 용이
단, 3,4위 모두에 동메달을 주는 경우 한 나라에서 동메달 2개 획득시 문제 발생
대한민국 사례: 1992년 바르셀로나 올림픽 실제 탁구 남성복식 2팀 준결승 진출로 및 패배로 동메달 2개 획득
당시 준결승 진출시 동메달 수여, 총 4명
➣ 이 자료에서는 누가 누구와 복식조를 이뤘는지 구분할 수 없으며 동일종목이므로 이 자료로 국가 순위 집계시 문제 발생
이러한 이유로 해당 자료 자체만으로 Test 진행 할 예정이며, 국가별 메달 집계시 동일종목당 1개의 메달로 계산
import pandas as pd
import numpy as np
DataLoad
encoding = utf-8
로 Load 시 문제 발생df_target = pd.read_csv('datas/Summer-Olympic-medals-1976-to-2008.csv', encoding = 'latin-1')
df_target
# condition 1
df_target.info() # NaN 여부 확인
df_target.dropna(axis = 0, inplace = True)
df_target.info()
# Condition 2
df_target = df_target.reset_index() # 인덱스 초기화
df_target.drop('index', axis = 1, inplace = True) # 기존 index column 삭제
df_target
df_target.info()
Year
colunm 데이터 타입을 int로 변경object
이기 때문에 처음부터 string
형을 띄움df_target['Year'] = df_target['Year'].astype(int)
df_target.info()
import copy
df = df_target.copy()
df_archery = df[(df['Year'] == 2008) & (df['Sport'] == 'Archery') & (df['Medal'] == 'Gold') & (df['Country_Code'] == 'KOR')]
df_archery
df_kor = df_target.copy()
df_kor = df_target[df_target['Country_Code'] == 'KOR']
df_kor = df_kor.drop_duplicates(subset = ['City', 'Year', 'Discipline', 'Event', 'Country_Code', 'Country', 'Event_gender','Medal'])
df_kor
Year
, Medal
을 기준으로 pivot_table
Year
를 내림차순, Medal
을 Gold-Silver-Bronze 순으로 정렬하려하였으나, Medal
정렬이 되지 않음df_gold = pd.pivot_table(
df_kor,
index = ['Year','Medal'],
values= ['City'],
aggfunc = 'count'
)
df_gold
sort_index
custom_key = np.vectorize(lambda x: {"Gold": 0, "Silver": 1, "Bronze": 2}[x] if type(x) == str else x)
df_gold.sort_index(axis = 0, level = [0, 1], key=custom_key, inplace=True)
df_gold
Before | After |
---|---|
df_rank = df_target.copy()
df_rank = df_rank[df['Year'] == 1996]
df_rank = df_rank.drop_duplicates(subset = ['City','Year', 'Discipline', 'Event', 'Country_Code', 'Country', 'Event_gender','Medal'])
df_rank = pd.pivot_table(
df_rank,
index = 'Country',
values= ['Medal'],
aggfunc = 'count'
)
df_rank = df_rank.reset_index()
df_rank.sort_values('Medal', ascending = False, inplace = True)
df_rank_10 = df_rank.head(10)
df_rank_10
gold
. silver
. bronze
column 생성 후, Medal
column의 입력 내용에 따라 0과 1 입력df_gold_rank = df_target.copy()
df_gold_rank[['Gold','Silver','Bronze']] = 0
df_gold_rank = df_gold_rank[df_gold_rank['Year'] == 1996]
df_gold_rank = df_gold_rank.drop_duplicates(subset = ['City', 'Year', 'Discipline', 'Event', 'Country_Code', 'Country', 'Event_gender', 'Medal'])
df_gold_rank = df_gold_rank.reset_index()
df_gold_rank.drop('index', axis = 1, inplace = True)
for idx in range(0, len(df_gold_rank)):
if df_gold_rank['Medal'].loc[idx] == 'Gold':
df_gold_rank['Gold'].loc[idx] = 1
elif df_gold_rank['Medal'].loc[idx] == 'Silver':
df_gold_rank['Silver'].loc[idx] = 1
elif df_gold_rank['Medal'].loc[idx] == 'Bronze':
df_gold_rank['Bronze'].loc[idx] = 1
df_gold_rank
df_gold_rank_10 = pd.pivot_table(
df_gold_rank,
index = 'Country',
values= ['Gold', 'Silver', 'Bronze'],
aggfunc = 'sum'
)
df_gold_rank_10 = df_gold_rank_10.reset_index()
df_gold_rank_10.sort_values(['Gold', 'Silver', 'Bronze'], ascending = False, inplace = True)
df_rank10 = df_gold_rank_10[['Country', 'Gold', 'Silver', 'Bronze']]
df_rank10 = df_rank10.head(10)
df_rank10