[EDA test] 03. 올림픽 데이터

svenskpotatis·2023년 10월 11일
0

Data 원본 출처

Target Data(CSV): 역대(1976-2008) 하계 올림픽 메달리스트에 대한 정보

1단계: Load Data & Preprocessing


문제 1-1) Target Data 가져오기 (10점)

  • 위에 제시된 링크 혹은 datas 폴더에 있는 데이터(Summer-Olympic-medals-1976-to-2008.csv)를 Pandas DataFrame으로 읽어 오세요.
df_target = pd.read_csv('./datas/Summer-Olympic-medals-1976-to-2008.csv', encoding='latin1')
df_target.head()
  • encoding='latin1'

문제 1-2) Preprocessing: missing data 처리 (10점)

  • 1-1에서 읽은 Data에는 missing data가 있습니다. missing data를 확인하고 처리하세요.
    • 조건1: missing data가 있다면, 해당 row(행)를 삭제(drop)하세요
    • 조건2: Index를 초기화(reset)하고, 기존 Index는 삭제(drop)하세요.
df_clean = df_target.dropna()
df_clean.reset_index(inplace=True)
df_clean.drop('index', axis=1, inplace=True)

문제 1-3) Preprocessing: Data Type 정리 (10점)

  • 1-2에서 만든 DataFrame을 아래의 조건에 따라 데이터의 타입을 확인하고 변경해주세요.
    • 조건1: float data는 int로 변경해주세요.
    • 조건2: float data외의 모든 데이터가 string 인지 확인해주세요.
df_clean['Year'] = df_clean['Year'].astype(int)

2단계: 원하는 Data로 가공하기


문제 2-1) 2008년 대한민국 메달리스트 찾기 (15점)

  • 문제 1에서 만든 DataFrame을 이용하여 2008년 베이징 올림픽 양궁 종목에서 금메달을 획득한 선수들을 찾아보세요.
    • 조건1: 2008년 베이징 올림픽 양궁 종목의 금메달리스트만 있는 DataFrame을 만들어 주세요
import copy
df_copy = copy.deepcopy(df_clean)
df_archery = df_copy

df_archery = df_archery[(df_copy['Year'] == 2008) & 
                        (df_copy['Sport'] == 'Archery') & 
                        (df_copy['Medal'] == 'Gold') & 
                        (df_copy['Country_Code'] == 'KOR')
                        ]

문제 2-2) 대한민국 역대(1976-2008) 하계 올림픽 메달 획득 내역 확인(15점)

  • 문제 1에서 만든 DataFrame과 Pandas 기능을 활용하여 아래 예시와 같은 형태의 대한민국 역대 메달 획득 내역을 만들어주세요.

    • 조건1: Index는 Year - Medal로 보여주세요(아래 예시 참고)

    • 조건2: Index에서 Year는 내림차순, Medal은 Gold-Silver-Bronze 순으로 보여주세요(아래 예시 참고)

df_kor = df_clean[(df_clean['Country_Code'] == 'KOR')]

medalCol = ['Gold', 'Silver', 'Bronze']
medalYear = [1976, 1984, 1988, 1992, 1996, 2000, 2004, 2008]
count = ((df_kor['Medal'] == 'Gold') & (df_kor['Year'] == 1984)).sum()
df_kor.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
                                       'Event', 'Country_Code', 'Country',
                                       'Event_gender', 'Medal'], inplace=True)
                                       
from pandas.api.types import CategoricalDtype
medalCat = CategoricalDtype(categories=medalCol, ordered=True)
df_kor['Medal'] = df_kor['Medal'].astype(medalCat) 
df_kor = pd.pivot_table(df_kor,              
                     index = ['Year', 'Medal'],    
                     values = 'City',      
                     aggfunc=len
) 
df_kor = pd.DataFrame(df_kor)

문제 2-3) 1996년 애틀란타 올림픽 총 메달 개수 기준 상위 10개 국가 확인하기(20점)

df_1996 = df_clean[df_clean['Year'] == 1996]
df_1996_copy = copy.deepcopy(df_1996)
df_1996_copy.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
                                       'Event', 'Country_Code', 'Country',
                                       'Event_gender', 'Medal'], inplace=True)
df_1996_cnt = df_1996_copy.groupby(['Country'])['Medal'].count().reset_index(name='Medal')

df_1996_cnt = df_1996_cnt.sort_values(by='Medal', ascending=False)

df_1996_cnt = df_1996_cnt.head(10)

문제 2-4) 1996년 애틀란타 올림픽 금매달 개수 기준 상위 10개 국가 확인하기(20점)

df_1996.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
                                       'Event', 'Country_Code', 'Country',
                                       'Event_gender', 'Medal'], inplace=True)
df_1996['Medal'] = df_1996['Medal'].astype(medalCat)
df_rank = df_1996.groupby(['Country', 'Medal']).count()
df_rank = df_rank.sort_values(by=['Country', 'Medal']).reset_index()
df_rank = df_rank.pivot(index='Country', 
                        columns='Medal',
                        values='City')
df_rank = df_rank.reset_index()
df_rank = df_rank.sort_values(by=['Gold', 'Silver', 'Bronze'], ascending=False).head(10)
df_rank = df_rank.rename_axis(index=None, columns=None)

0개의 댓글