오늘은 Steam 게임 리뷰 데이터를 직접 수집하고, 이를 정리해서 간단한 분석까지 진행해보았다.
대상 게임은 이터널리턴이었고, 리뷰 데이터를 통해 유저 반응을 수치로 확인하는 과정을 연습했다.
이번 작업의 흐름은 크게 다음과 같았다.
import steamreviews
import pandas as pd
request = steamreviews.download_reviews_for_app_id(
batch_size=100,
app_id=1049590,
chosen_request_params={'language': 'all'}
)
reviews_dict = request["reviews"]
review_list = []
for review_id, review_data in reviews_dict.items():
review_list.append({
"review_id": review_id,
"review_text": review_data.get("review", ""),
"recommended": review_data.get("voted_up", False),
"playtime_hours": review_data.get("author", {}).get("playtime_forever", 0) / 60,
"language": review_data.get("language", "unknown"),
"helpful": review_data.get("votes_up", 0),
"funny": review_data.get("votes_funny", 0),
"date": review_data.get("timestamp_created", 0)
})
df = pd.DataFrame(review_list)
df.head()
처음에는 데이터를 가져오는 것 자체가 가장 중요한 단계라고 생각했지만, 실제로 해보니 그보다 더 중요한 것은 분석하기 좋은 형태로 정리하는 과정이었다.
원본 리뷰 데이터는 바로 보기 좋은 표 구조가 아니라, 여러 정보가 나뉘어 들어 있는 형태였다. 그래서 내가 실제로 보고 싶은 값들만 따로 꺼내서 정리하는 작업이 필요했다.
이번 작업에서는 리뷰 본문, 추천 여부, 플레이 시간, 언어, 도움이 됨 수, 웃김 수, 작성 날짜 같은 항목을 중심으로 데이터를 구성했다.
이 과정을 통해 원본 데이터를 그대로 사용하는 것이 아니라, 목적에 맞게 가공하는 능력이 중요하다는 점을 느꼈다.
복잡한 모델이나 고급 분석 기법을 쓰지 않더라도, 기본적인 통계만으로도 꽤 많은 정보를 얻을 수 있었다.
추천 비율, 리뷰 언어 분포, 평균 플레이 시간 같은 값만 보더라도 게임에 대한 전체적인 반응과 이용자 특성을 어느 정도 파악할 수 있었다.
특히 언어 분포를 확인했을 때 한국어 리뷰 비중이 매우 높게 나타났는데, 이를 통해 현재 수집된 데이터가 어떤 이용자층의 의견을 많이 반영하고 있는지 알 수 있었다.
이처럼 단순한 집계 결과도 데이터 해석의 중요한 출발점이 된다는 점이 인상적이었다.
recommend_ratio = df["recommended"].value_counts(normalize=True) * 100
print(recommend_ratio)
language_counts = df["language"].value_counts()
print(language_counts.head(10))
플레이 시간과 추천 여부를 함께 비교해보는 과정도 흥미로웠다.
처음에는 오래 플레이한 유저일수록 게임에 만족해서 추천 비율도 높을 것이라고 생각했는데, 실제 데이터에서는 꼭 그렇게 단순하게 볼 수만은 없다는 점을 느꼈다.
오히려 오래 플레이한 유저일수록 게임의 장점뿐 아니라 단점도 더 많이 경험했을 가능성이 있다.
이런 점을 보면 데이터 분석은 단순히 숫자를 확인하는 데서 끝나는 것이 아니라, 왜 이런 결과가 나왔는지 해석하는 과정까지 함께 가야 한다는 것을 배울 수 있었다.
playtime_by_recommend = df.groupby("recommended")["playtime_hours"].mean()
print(playtime_by_recommend)
이번 작업을 하면서 몇 가지 아쉬운 점도 있었다.
우선 리뷰를 수집하고 기본 통계를 확인하는 단계까지는 진행했지만, 아직 리뷰 내용 자체를 깊게 분석하는 단계까지는 나아가지 못했다.
예를 들어 추천 리뷰와 비추천 리뷰에서 어떤 단어가 자주 등장하는지, 특정 언어권 유저들은 어떤 부분에 더 민감하게 반응하는지 같은 내용은 앞으로 더 살펴볼 필요가 있다.
또 데이터를 시각화하는 과정에서는 한글 폰트 관련 문제도 확인했다.
분석 자체뿐 아니라, 결과를 보기 좋고 정확하게 표현하기 위한 환경 설정도 중요하다는 점을 느꼈다.
이번 작업을 통해 가장 크게 느낀 점은 두 가지다.
첫째, 데이터 수집은 단순히 가져오는 것으로 끝나는 것이 아니라 정리와 가공까지 포함된 작업이라는 점이다.
둘째, 복잡한 분석이 아니어도 기본적인 수치 정리만으로 유저 반응의 특징을 어느 정도 파악할 수 있다는 점이다.
특히 이번에는 리뷰 데이터를 직접 다뤄보면서, 내가 궁금했던 내용을 숫자로 확인해볼 수 있다는 점이 재미있었다.
막연하게 “유저 반응이 어떨까?”라고 생각하는 것보다, 실제 데이터를 바탕으로 확인하는 과정이 훨씬 설득력 있다는 것도 느꼈다.
다음에는 여기서 한 단계 더 나아가서 리뷰 텍스트 자체를 분석해보고 싶다.
예를 들어 다음과 같은 방향으로 확장해볼 수 있을 것 같다.
처음에 이터널리턴을 선택한 이유도 유저들이 왜 흥미를 잃었는지 확인해보고 싶었기 때문이라, 다음 단계에서는 단순 통계를 넘어서 실제 리뷰 내용 속 불만 포인트를 찾아보는 것을 목표로 해보고 싶다.
df["review_length"] = df["review_text"].apply(len)
df[["review_text", "review_length"]].head()
Steam 리뷰 데이터를 직접 수집하고 정리해보면서, 데이터는 가져오는 것보다 분석하기 좋은 형태로 가공하는 과정이 더 중요하다는 점을 배웠다.