https://www.kaggle.com/datasets/otegbolamarvellous/post-covid-video-games-worldwide-2021-2025
이거 했음.
전처리
결측값 처리
meta_df_na = meta_df.query('User_Score.isna()').index
meta_df.loc[meta_df_na]
결측값 있는 칼럼이 저기말고 없는데, 확인해보니까 그 뭐라고 해야 되지? 리뷰가 너무 적어서 평점을 모을 수 없는? 그런 게임들이었음. 그런건 tbd라고 하는데 저기다가 그거 때려박으면 평점이 문자가 돼서 문제가 터져요.
meta_df['User_Score'] = pd.to_numeric(meta_df['User_Score'], errors='coerce')
그래서 이렇게만 함. 결측값은 계산할때 뺄 예정임.
플랫폼 개수로 범주화
# 1. 콤마(,)로 나누고(split), 양쪽 공백을 제거(strip)한 리스트의 길이를 측정
meta_df['Platform_classification'] = meta_df['Platform'].apply(
lambda x: 'Singleplatform' if len(str(x).split(',')) == 1 else 'Multiplatform'
)
# 결과 확인
print(meta_df['Platform_classification'].value_counts())
게임 발매 플랫폼이 하나인거, 여러개인걸로 나눴다.
발매년도
# 일단 datetime으로 변환부터 합시다
meta_df['Release_Date'] = pd.to_datetime(meta_df['Release_Date'], dayfirst=True, errors='coerce')
meta_df['Year'] = meta_df['Release_Date'].dt.year # 응 년도 만들거야
발매일을 날짜로 변환한 다음 발매년도만 따로 뺐다. 저게 날짜 형식이 DD/MM/YYYY로 되어있어서 dayfirst 준 거임.
평점 범주화
def metascore_classificaion(score):
if score >= 90:
return 'Universal acclaim'
elif score >= 75:
return 'Generally favorable reviews'
elif score >= 50:
return 'Mixed or average reviews'
elif score >= 20:
return 'Generally unfavorable reviews'
else:
return 'Overwhelming dislike'
def userscore_classificaion(score):
if score >= 9:
return 'Universal acclaim'
elif score >= 7.5:
return 'Generally favorable reviews'
elif score >= 5:
return 'Mixed or average reviews'
elif score >= 2:
return 'Generally unfavorable reviews'
else:
return 'Overwhelming dislike'
그 메타크리틱 평점이 전문가랑 유저랑 나뉜거 아시죠? 유저 평점은 0~10이고 전문가 평점은 0~100입니다. 기준은 같은데 커트라인이 10배 줄어요 유저 점수가. 기준은 검색해서 매겼음.
meta_df['Metascore_classification'] = meta_df['Metascore'].apply(metascore_classificaion)
meta_df['Userscore_classification'] = meta_df['User_Score'].apply(userscore_classificaion)
근데 이거 만들어놓고 범주로는 한번도 뭐 한 게 없음…ㅋㅋㅋㅋ
본게임은 지금부터다
갓겜과 똥겜
평론가 평점이 90점 이상인 게임
# 일단 메타크리틱 평점이 90점 이상인 것만 따로 뻅시다.
meta_god_df = meta_df.query('Metascore >= 90')
meta_god_df
저기 엘든링 있던데?
유저 평점도 9점 이상인 게임
# 평론가와 유저가 다 만족한 게임이 있을까?
meta_god_df.query('User_Score >= 9')

대체 발더스게이트는 얼마나 갓갓겜인거임???
유저 평점은 9점 미만인 게임
# 평론가와 유저 반응이 다른 게임
meta_god_df.query('User_Score < 9')
저기서 해본건 데이브 더 다이버 말고 없는듯... 데더다도 사냥하는건 재밌는데 문제가요... 초밥 운영이... 여기 초밥 먹으려고 며칠 굶고오나 손님들 성질이 조낸 급함...
평론가 평점이 20점 미만인 게임
# DDONG게임
meta_ddong_df = meta_df.query('Metascore < 20')
meta_ddong_df
일단 평론가 평점이 20점 미만인게 없음… 제일 낮은게 31점입니다. 변수명에 똥은 뭐냐고요? 아무리 그래도 shit을 변수명으로 쓸 순 없잖아… 그래서 ddong쓴거임.
유저 평점이 2점 미만인 게임
meta_ddong_df = meta_df.query('User_Score < 2')
meta_ddong_df

콩코드 유명하지... 지들이 왜 개쳐망했는지는 알까?
전문가 평점 50점 미만+유저 평점 2점 미만
# 50점 미만은 꽤 있다.
meta_ddong_df = meta_df.query('Metascore < 50')
meta_ddong_df
meta_ddong_df.query('User_Score < 2')
이게 전문가 평점이랑 유저 평점이랑 엇갈리는 경우도 있고 아닌경우도 있긴 있습니다. 근데 여기서는 공통분모가 없음.
플랫폼이 하나인가? 여러개인가?+PC에서도 발매됐는가?
meta_df.groupby(['Platform_classification','PC_included']).size()
Platform_classification PC_included
Multiplatform PC_included 1579
PC_unincluded 71
Singleplatform PC_included 179
PC_unincluded 177
dtype: int64
멀티플랫폼인 경우 대부분 PC도 포함한다. 그리고 플랫폼이 하나인 경우에는 PC판만 내거나, 콘솔 독점이거나… 요즘 근데 닌텐도 말고는 독점으로 잘 안 내지 않나?
sns.countplot(data=meta_df, x='Platform_classification', hue='PC_included', palette="icefire")
plt.legend(['PC판 미발매', 'PC판 발매'])
plt.xlabel('단일 플랫폼 여부 및 PC판 발매 여부')
plt.ylabel('발매 게임 수')
plt.title('단일 플랫폼 여부 및 PC판 발매여부에 따른 게임 수', fontsize=20)
plt.show()

요즘 스팀이나 에픽에서도 뭐 많이 할 수 있으니께... 게임패드요? PC에 연결 되는것도 많다. 가끔 스팀 맞춤 대기열 보면 원래 모바일게임으로 나왔던 게 갑자기 스팀으로 나오는 경우도 있다. 명조도 스팀으로 나왔고.
meta_df.groupby(['Year','Platform_classification','PC_included']).size()
Year Platform_classification PC_included
2021 Multiplatform PC_included 334
PC_unincluded 18
Singleplatform PC_included 20
PC_unincluded 36
2022 Multiplatform PC_included 366
PC_unincluded 17
Singleplatform PC_included 41
PC_unincluded 37
2023 Multiplatform PC_included 382
PC_unincluded 23
Singleplatform PC_included 26
PC_unincluded 49
2024 Multiplatform PC_included 359
PC_unincluded 10
Singleplatform PC_included 62
PC_unincluded 34
2025 Multiplatform PC_included 138
PC_unincluded 3
Singleplatform PC_included 30
PC_unincluded 21
dtype: int64
년도별로는 이렇게 된다. 멀티플랫폼인 게임은 23년도에, 싱글플랫폼인 게임은 24년도에 많이 발매됐다.
닌텐도도 멀티플랫폼이 있나요?
결론부터 말하자면 있긴 있다. 근데 자사 퍼스트파티나 세컨드파티가 멀티플랫폼으로 나오는 건 아니고... 얘네들 그런쪽으로 문호개방 안함... 대신 다른 게임사에서 저희 스위치로도 게임 내고 싶습니다! 하면 그건 웰컴이다. 가끔 모바일로 나오는건 중국산 짝퉁게임이거나 공식에서 내는 외전이거나.
nintendo_df = meta_df.query("Publisher.str.contains('Nintendo')", engine='python')
nintendo_df

어우 진여생 어우
sns.countplot(nintendo_df, x = 'Platform_classification', hue='Platform_classification', palette="icefire", legend=True)
plt.title('닌텐도도 멀티플랫폼이 있나요?', fontsize=20)
plt.xlabel('멀티플랫폼 여부')
plt.ylabel('발매 게임 수')
plt.legend()
plt.show()

퍼블리셔가 닌텐도면서 멀티플랫폼인 건 찐 극소수다.
년도별 갓겜/똥겜
년도별 갓겜
meta_god_loc = meta_df.groupby('Year')['Metascore'].idxmax()
meta_df.loc[meta_god_loc][['Title', 'Metascore', 'User_Score']].reset_index(drop=True)

아스트로봇 유명하데… 난 안해봤지만.
meta_god_loc = meta_df.groupby('Year')['User_Score'].idxmax()
meta_df.loc[meta_god_loc][['Title', 'Metascore', 'User_Score']].reset_index(drop=True)

공통분모 발더스게이트.. 대체 이 게임은 어떤 게임이길래 평론가와 유저들이 갓겜을 연호한것이냐... (안해봄)
년도별 똥겜
meta_ddong_loc = meta_df.groupby('Year')['Metascore'].idxmin()
meta_df.loc[meta_ddong_loc][['Title', 'Metascore', 'User_Score']].reset_index(drop=True)

? 저거 주술회전 전화항명인가?
meta_ddong_loc = meta_df.groupby('Year')['User_Score'].idxmin()
meta_df.loc[meta_ddong_loc][['Title', 'Metascore', 'User_Score']].reset_index(drop=True)

문명 7은 대체 무슨 일이 있었던것이며...
장르별 점수(내림차순)
meta_genre_loc = meta_df.groupby('Genre')['Metascore'].idxmax()
meta_df.loc[meta_genre_loc][['Genre', 'Title', 'Metascore', 'User_Score']].reset_index(drop=True).sort_values('Metascore', ascending=False)

장르별로 놓고 봤을때 왕눈하고 엘든링, 발더스게이트, 파타 모르가…저거 뭐임? 쟈들이 공통 1위다. 그 중에서도 발더스게이트는 유저 스코어도 9점을 넘겼다. 당신들 대체 뭘 만든겁니까.
best_idx = meta_df.dropna(subset=['User_Score']).groupby('Genre')['User_Score'].idxmax()
best_genre_df = meta_df.loc[best_idx]
best_genre_df[['Genre', 'Title', 'Metascore', 'User_Score']].reset_index(drop=True).sort_values('User_Score', ascending=False)

33원정대도 갓겜이라고 하더군요... (안해봄)
장르별 점수(오름차순)
meta_genre_loc = meta_df.groupby('Genre')['Metascore'].idxmin()
meta_df.loc[meta_genre_loc][['Genre', 'Title', 'Metascore', 'User_Score']].reset_index(drop=True).sort_values('Metascore')

best_idx = meta_df.dropna(subset=['User_Score']).groupby('Genre')['User_Score'].idxmin()
best_genre_df = meta_df.loc[best_idx]
best_genre_df[['Genre', 'Title', 'Metascore', 'User_Score']].reset_index(drop=True).sort_values('User_Score')

0.5점은 대체...
리뷰 많은 순
most_review = meta_df.sort_values('Critic_Review_Count', ascending=False)
most_review[['Title', 'Critic_Review_Count', 'User_Review_Count', 'Metascore', 'User_Score']]

일단 비평가 리뷰는 왕눈이 제일 많다. 여기서 유저 리뷰도 5000개 이상인 게임들만 묶어서 보면
# 유저 리뷰가 5000개 이상인 게임들만 골라봤음
most_review = meta_df.sort_values('Critic_Review_Count', ascending=False)
most_review.query('User_Review_Count >= 5000')[['Title', 'Critic_Review_Count', 'User_Review_Count', 'Metascore', 'User_Score']]

그래도 왕눈이 제일 많다. 제작진이 과학상자를 던져준 탓에 구하라는 하이랄은 안 구하고 과학상자 갖고 노는 게임… ㅋㅋㅋㅋ 누가 그걸로 고질라 만들었더만.
most_review = meta_df.sort_values('User_Review_Count', ascending=False)
most_review[['Title', 'Critic_Review_Count', 'User_Review_Count', 'Metascore', 'User_Score']]

넥슨이 공들여서 만들었는데 카잔도 리뷰좀 해줘라... 유저 리뷰는 33원정대, 엘든링, 발더스게이트 3 셋 다 2만개를 넘어갔다. 이 중에서도 비평가 리뷰가 100개 이상인 게임들만 보면
# 비평가 리뷰가 100개 이상인 게임
most_review = meta_df.sort_values('User_Review_Count', ascending=False)
most_review.query('Critic_Review_Count >= 100')[['Title', 'Critic_Review_Count', 'User_Review_Count', 'Metascore', 'User_Score']]

메트로이드 프라임은 왜 리뷰가 없는겨…
'Coding > EDA' 카테고리의 다른 글
| 얘! clinvar도 EDA가 된단다! (1) (0) | 2026.02.15 |
|---|---|
| Ramen ratings (0) | 2026.02.11 |
| 또 ChEMBL을 털어보았다 (0) | 2026.01.28 |
| 캐글 EDA-마! 서퍼티파이! (2) (0) | 2026.01.20 |
| 캐글 EDA-마! 서퍼티파이! (0) | 2026.01.19 |