실전#4 오늘 밤 유럽 축구, 어디가 이길까(2)
데이터셋 준비 후 EDA 과정!
이번 주제에서 진행하는 EDA 과정이 지금까지 들었던 주제들 중에 가장 실제 분석 환경과 유사했던 것 같아
좀 더 집중해서 들을 수 있었다. (하나씩 과정을 밟아가는건 다 똑같구나 하는 생각과 함께...)
일단 테이블별 정리를 해보자
df_country
: 각 id별 해당 국가가 매칭된 테이블
df_league
: 각 id별 country_id와 해당 리그명(name)이 매칭된 테이블
id와 country_id는 동일하게 관리되고 있는 정보인지 확인해보자 (이런걸 확인하지 않고 그냥 넘어가면 큰일!)
다행히 추가적인 작업이 필요하지는 않는다(다행)
df_match
화면에는 다 담아내지 못했지만, 115개의 굉장히 많은 컬럼을 보유한 테이블이다.
컬럼이 많은 만큼 가장 EDA를 세심하게 본 테이블이 df_match였는데
예시를 통한 코드는 아래와 같다.
# 예시1 >> season 값들에 대한 확인
df_match['season'].unique()
# 예시2 >> 컬럼들 중 null값이 존재하는 컬럼 존재 유무 확인
for c, num in zip(df_match.columns, df_match.isna().sum()):
print(c, num)
# 예시3 >> 컬럼들 중 분석 목적의 컬럼에 적합하지 않는 컬럼 제외
df_match.drop(df_match.columns[-38:], axis = 1, inplace = True)
## goal 이후 정보들과 배팅 관련 정보들은 모두 대상에서 제외한다
goal 이후 결과 정보들 및 배팅 관련 정보들은 분석 목적의 컬럼으로 보기에 적절치 않아 제외하였고,
drop을 통해 갈무리된 df_match 테이블은 아래처럼 정리된다.
여기에 추가적으로 null이 존재하는 컬럼들은 해당 데이터열 자체를 drop하는 식으로 진행할 예정이다.
전체 데이터가 2만개가 넘어가는 데이터이고, 남은 컬럼들 중 null이 가장 많은 컬럼이 1,839개인 점을 고려하면
전체적인 데이터에 큰 영향을 주진 않을 것이라 판단되어 drop으로 처리해도 문제되진 않을 것 같다.
만약, null의 비중이 높은 컬럼이 있다면 해당 컬럼을 제외하거나, 제외하기에는 중요한 컬럼이라면 다른 적절한 값으로 대체하는 등의 전처리 과정도 필요하다.
df_player
: 선수별 id 및 이름, fifa api id와 생년월일, 키(cm), 몸무게(파운드)
df_player_att
: id별 해당 날짜에 수집된 fifa 향 능력치 정보들
df_team
: 팀 기본 정보들
df_team_att
: 팀에 대한 fifa 향 능력치 정보들
df_match와 유사하게 다른 테이블에 대해서도 전처리가 필요해보인다.
또한, 수치형과 범주형 데이터도 혼재되어 있어 컬럼별 관리 또한 중요한 작업이 될 것 같다.
위 예시에서는 극히 일부의 케이스에 대한 EDA 및 추가 처리 과정을 정리하였는데
평상시의 데이터 모델링 업무에서는 활용할 데이터 테이블 내 변수 각각에 대한 고민이 정말 중요하다.
물론 최초 변수 선정 시 이러한 부분들을 고려하여 적용하는것이 가장 바람직할 수 있겠지만,
실제 현실에서 그렇지 않는 경우들도 왕왕 발생하기에 모델링의 목적과 주어진 데이터 상황을 고려하여
어느정도까지 변수로서 활용할 것인지 판단 또한 중요한 과정이 될 것으로 보인다.
http://bit.ly/3Y34pE0
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.