EDA TEST | 올림픽 데이터 분석

소리·2023년 11월 18일
0

1-2) Preprocessing: missing data 처리

  • 조건1: missing data가 있다면, 해당 row(행)를 삭제(drop)하세요
  • 조건2: Index를 초기화(reset)하고, 기존 Index는 삭제(drop)하세요.

1)

df_target.loc[df_target['City'].isnull()]
df_target.dropna(axis=0, inplace = True)

2)

df_target.dropna(axis=0, inplace=True)
df_target.reset_index()

1-3) Preprocessing: Data Type 정리

  • 조건1: float data는 int로 변경해주세요.
  • 조건2: float data외의 모든 데이터가 string 인지 확인해주세요.
df_target['Year'] = df_target['Year'].astype('int64')
df_target.info()

2-1) 2008년 대한민국 메달리스트 찾기

  • 조건1: 2008년 베이징 올림픽 양궁 종목의 금메달리스트만 있는 DataFrame을 만들어 주세요

1)

df_archery = df_target.copy()

df_archery = df_archery[
    (df_archery['Sport'] == 'Archery')&
    (df_archery['Year'] == 2008)&
    (df_archery['City'] == 'Beijing')&
    (df_archery['Medal'] == 'Gold')&
    (df_archery['Country'].str.contains('Korea'))

]

2)

df_copy = df_target.copy()
df_kor = df_copy[df_copy['Country_Code'] == 'KOR']
df_archery = df_kor[(df_kor['Year'] == 2008) & (df_kor['City'] == 'Beijing') & (df_kor['Sport'] == 'Archery') & (df_kor['Medal'] == 'Gold')]

check_02_01(df_archery)

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

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

  • 조건1: Index는 Year - Medal로 보여주세요

  • 조건2: Index에서 Year는 내림차순, Medal은 Gold-Silver-Bronze 순으로 보여주세요

# 2-2
df_target2 = df_target[df_target['Country'] == 'Korea, South'].copy()


df_target2 = df_target2.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
                                       'Event', 'Country_Code', 'Country',
                                       'Event_gender', 'Medal'])

df_kor = df_target2.pivot_table(index=['Year', 'Medal'], values = 'City', aggfunc='count')
df_kor = df_kor.reindex(['Gold', 'Silver', 'Bronze'], level=1)

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

  • 조건1: Index는 앞선 1단계에서 Preprocessing한 Data의 Index 그대로 나두어 주세요.

  • 조건2: 총 메달 개수로 오름차순 정렬 후 상위 10개 국가만 나타내는 DataFrame을 만드세요.

  • 조건3: 결과 DataFrame의 Columns은 ['Country', 'Medal'] 입니다.

df_rank = df_target.copy()
df_rank = df_rank[df_rank['Year'] == 1996]

df_rank = df_rank.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
                                       'Event', 'Country_Code', 'Country',
                                       'Event_gender', 'Medal'])

df_rank_10 = df_rank.groupby(['Country'])['Medal'].count()
df_rank_10 = pd.DataFrame(df_rank_10).reset_index()
df_rank_10.sort_values(by='Medal', ascending = False, inplace = True)
df_rank_10 = df_rank_10.head(10)

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

  • 조건1: 'Gold', 'Silver', 'Bronze' 컬럼을 만들고, 해당 Row(행)의 Medal 이 Gold면 'Gold' 컬럼에 1, Silver면 'Silver' 컬럼에 1, 'Bronze'면 'Bronze'컬럼에 1을 입력하세요
    추후 아래 예시와 같은 형태로 DataFrame을 만들기 위한 작업입니다. 적당한 순서에 맞추어 해당 작업을 하시면 되고, 혹시 이 작업이 필요 없을 경우 안하셔도 무방합니다.

  • 조건2: Index는 앞선 1단계에서 Preprocessing한 Data의 Index 그대로 나두어 주세요.

  • 조건3: 금메달 개수로 내림차순 정렬 후 상위 10개 국가만 나타내는 DataFrame을 만드세요.
    만약 금메달 개수가 같다면, 은메달 개수가 많은 국가가 더 높은 순위이며 은메달 개수도 같다면 동메달 개수가 더 많은 국가가 상위입니다.

  • 조건4: 결과 DataFrame의 Columns은 ['Country', 'Gold', 'Silver', 'Bronze'] 입니다

1)

df_rank2 = df_rank.copy()
df_rank2['Gold'] = 0
df_rank2['Silver'] = 0
df_rank2['Bronze'] = 0

for i in range(len(df_rank2)):
    if df_rank2.iloc[i, -4] == 'Gold':
        df_rank2.iloc[i, -3] += 1
    if df_rank2.iloc[i, -4] == 'Silver':
        df_rank2.iloc[i, -2] += 1
    if df_rank2.iloc[i, -4] == 'Bronze':
        df_rank2.iloc[i, -1] += 1

df_rank2 = df_rank2.pivot_table(index = 'Country', values = ['Gold', 'Silver', 'Bronze'], aggfunc = 'sum')

df_rank2.reset_index(inplace = True)

#열 순서 설정
df_rank2= df_rank2[['Country', 'Gold', 'Silver', 'Bronze']]

#정렬
df_rank2.sort_values(by=['Gold', 'Silver', 'Bronze'], ascending = False, inplace = True)

2)

# 2-4
df_copy = df_target.copy()
df_copy = df_copy[(df_copy['Year'] == 1996) & (df_copy['City'] == 'Atlanta')]
df_copy.drop_duplicates(['City', 'Year', 'Sport', 'Discipline', 'Event','Country_Code', 'Country', 'Event_gender', 'Medal'], inplace=True)

df_copy['Gold'] = (df_copy['Medal'] == 'Gold').astype(int)
df_copy['Silver'] = (df_copy['Medal'] == 'Silver').astype(int)
df_copy['Bronze'] = (df_copy['Medal'] == 'Bronze').astype(int)

df_ranked = df_copy.groupby('Country').agg({'Gold': 'sum', 'Silver': 'sum', 'Bronze': 'sum'}).reset_index()
df_ranked = df_ranked.sort_values(by=['Gold', 'Silver', 'Bronze'], ascending=False).head(10)

df_ranked = df_ranked[['Country', 'Gold', 'Silver', 'Bronze']]

✏️pivot table이 필요한 시점 잘 알아채기
피벗테이블 : 표로 정리해서 보고자 하는 관점의 축을 잡고, 표로 만들어 주는 기능(여러 데이터 중에서 자신이 원하는 데이터만을 가지고 원하는 행과 열에 데이터를 배치하여 새로운 보고서를 만드는 기능)

profile
데이터로 경로를 탐색합니다.

0개의 댓글