AI/Data Science

[Data Science] 월드컵 출전선수 골기록 데이터

Linuxias 2023. 2. 7. 00:52
반응형

 

데이터과학에서 python을 도구로 사용할 시 pandas, numpy 등의 라이브러리를 떨어질 수 없는 관계이다. 해당 연습을 위해 DataMinim 님의 데이터를 활용하여 연습하고, 결과를 공유하려 한다.

 

작업 1유형 — DataManim

Question 15 각 비디오는 10분 간격으로 구독자수, 좋아요, 싫어요수, 댓글수가 수집된것으로 알려졌다. 공범 EP1의 비디오정보 데이터중 수집간격이 5분 이하, 20분이상인 데이터 구간( 해당 시점 전,

www.datamanim.com

 

데이터 다운받기

사용하는 데이터는 DataMinim 님이 정제해둔 데이터이다. 아래와 같이 다운로드 한다.

import pandas as pd

df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/worldcup/worldcupgoals.csv')
df.head()

 

 

 

문제 1. 주어진 전체 기간의 각 나라별 골득점수 상위 5개 국가와 그 득점수를 데이터프레임형태로 출력하라

df_sub = df.groupby('Country').sum().sort_values('Goals', ascending=False)
df_sub.head(5)

 

문제 2. 주어진 전체기간동안 골득점을 한 선수가 가장 많은 나라 상위 5개 국가와 그 선수 숫자를 데이터 프레임 형식으로 출력하라

df_sub = df.groupby(['Country']).size().sort_values(ascending=False).head(5)
df_sub
Country
Brazil       81
Germany      78
Italy        60
Argentina    59
France       58
dtype: int64

 

 

문제 3. Years 컬럼은 년도 -년도 형식으로 구성되어있고, 각 년도는 4자리 숫자이다. 년도 표기가 4자리 숫자로 안된 케이스가 존재한다. 해당 건은 몇건인지 출력하라

df_years = df.Years.str.split('-')

def check_num(x):
    for n in x:
        if len(str(n)) != 4:
            return False
    return True

(df_years.apply(check_num) == False).sum()

답 : 45

 

문제 4. Q3에서 발생한 예외 케이스를 제외한 데이터프레임을 df2라고 정의하고 데이터의 행의 숫자를 출력하라 (아래 문제부터는 df2로 풀이하겠습니다) 

df_years = df.Years.str.split('-')

def check_num(x):
    for n in x:
        if len(str(n)) != 4:
            return False
    return True

df['check_years'] = df_years.apply(check_num)
df2 = df[df.check_years == True].reset_index(drop=True)
df2.shape[0]

답 : 1250

 

문제 5. 월드컵 출전횟수를 나타내는 ‘LenCup’ 컬럼을 추가하고 4회 출전한 선수의 숫자를 구하여라.

df2['PlayerYears'] = df2.Years.str.split('-')
df2['LenCup'] = df2.PlayerYears.apply(lambda x : len(x))
df2[df2.LenCup == 4].shape[0]

 

문제 6. Yugoslavia 국가의 월드컵 출전횟수가 2회인 선수들의 숫자를 구하여라

len((df2.LenCup == 2) & (df2.Country == 'Yugoslavia'))

 

문제 7. 2002년도에 출전한 전체 선수는 몇명인가?

df2.PlayerYears.apply(lambda x : True if '2002' in x else False).sum()

또는

len(df2[df2.Years.str.contains('2002')])
반응형