API 로 데이터 수집 2
1. Steamreviews 설치
!pip install steamreviews -q
import steamreviews
print("steamreviews 설치 완료!")
2. 리뷰 수집하기
app_id = '2072450'
# 리뷰 수집 ( 시간이 좀 걸릴 수 있음 )
# query_count=1로 설정하여 API 호출 횟수를 1회로 제한, 약 100개의 리뷰 수집
review_dict, query_count = steamreviews.download_reviews_for_app_id(
app_id,
chosen_request_params={'language': 'korean'},
query_count=1 # API 호출 횟수를 1회로 제한
)
# 수집된 리뷰가 100개가 넘을 경우, 처음 100개만 사용하도록 제한 (query_count=1 일 경우 불필요할 수 있으나 안전장치)
if len(review_dict['reviews']) > 100:
limited_reviews = {}
for i, (review_id, review_data) in enumerate(review_dict['reviews'].items()):
if i >= 100:
break
limited_reviews[review_id] = review_data
review_dict['reviews'] = limited_reviews
print(f"수집된 리뷰 수: {len(review_dict['reviews'])}")
print(f"API 요청 횟수: {query_count}")
[appID = 2072450] expected #reviews = 1702
수집된 리뷰 수: 100
API 요청 횟수: 19
3. 데이터 구조 살펴보기
# 첫 번째 리뷰 하나만 확인
first_review_id = list(review_dict['reviews'].keys())[0]
first_review = review_dict['reviews'][first_review_id]
print("리뷰 데이터에 포함된 키(필드):")
print(list(first_review.keys()))
리뷰 데이터에 포함된 키(필드):
['recommendationid', 'author', 'language', 'review', 'timestamp_created', 'timestamp_updated', 'voted_up', 'votes_up', 'votes_funny', 'weighted_vote_score', 'comment_count', 'steam_purchase', 'received_for_free', 'written_during_early_access', 'primarily_steam_deck']
import pandas as pd
# 첫 번째 리뷰 내용 확인
print("=" * 50)
print("첫 번째 리뷰 샘플")
print("=" * 50)
print(f"리뷰 ID: {first_review_id}")
print(f"추천 여부: {'추천' if first_review['voted_up'] else '비추천'}")
print(f"플레이 시간: {first_review['author']['playtime_forever'] / 60:.1f}시간")
print(f"\n리뷰 내용:\n{first_review['review'][:300]}...")
==================================================
첫 번째 리뷰 샘플
==================================================
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_3610/3500839989.py in <cell line: 0>()
5 print("첫 번째 리뷰 샘플")
6 print("=" * 50)
----> 7 print(f"리뷰 ID: {first_review_id}")
8 print(f"추천 여부: {'추천' if first_review['voted_up'] else '비추천'}")
9 print(f"플레이 시간: {first_review['author']['playtime_forever'] / 60:.1f}시간")
NameError: name 'first_review_id' is not defined
4. DataFrame 으로 변환
import pandas as pd
# 리뷰 데이터를 리스트로 변환
reviews_list = []
for review_id, review_data in review_dict['reviews'].items():
reviews_list.append({
'review_id': review_id,
'review': review_data['review'],
'voted_up': review_data['voted_up'],
'playtime_hours': review_data['author']['playtime_forever'] / 60, # 분→시간
'timestamp': review_data['timestamp_created']
})
# DataFrame 생성
df = pd.DataFrame(reviews_list)
print(f"DataFrame 크기: {df.shape[0]}행 x {df.shape[1]}열")
print("\n처음 5개 행:")
df.head()
DataFrame 크기: 100행 x 5열
처음 5개 행:
review_id review voted_up playtime_hours timestamp01234
| 223505597 | 항상 좋은 키류~ | True | 34.466667 | 1776490181 |
| 223376670 | 왠만하면 아니요 잘 안누르는데\r\n7과 비교해서 너무 실망이다.\r\n개연성 부족... | False | 65.616667 | 1776351246 |
| 223360010 | 일본 RPG는 끊임없이 진화합니다. 이 게임은 그 증명입니다. | True | 67.583333 | 1776329476 |
| 223267485 | 용과같이8에는 리스펙이 존재한다. | True | 82.783333 | 1776198907 |
| 223182042 | 우선 7,8편이 1~2부 나눈것처럼 스토리가 이어지므로 가능하면 7편부터 하고 8편... | True | 72.150000 | 1776091471 |
5. 수집 데이터 탐색
# 기본 정보
print("=" * 50)
print("수집 데이터 요약")
print("=" * 50)
print(f"총 리뷰 수: {len(df)}개")
print(f"추천 비율: {df['voted_up'].mean() * 100:.1f}%")
print(f"평균 플레이 시간: {df['playtime_hours'].mean():.1f}시간")
print(f"최대 플레이 시간: {df['playtime_hours'].max():.1f}시간")
==================================================
수집 데이터 요약
==================================================
총 리뷰 수: 100개
추천 비율: 84.0%
평균 플레이 시간: 94.0시간
최대 플레이 시간: 406.7시간
# 리뷰 샘플 확인
print("\n--- 리뷰 샘플 (처음 3개) ---")
for i in range(min(3, len(df))):
print(f"\n[{i+1}] {'추천' if df.iloc[i]['voted_up'] else '비추천'} | {df.iloc[i]['playtime_hours']:.1f}시간")
print(df.iloc[i]['review'][:150] + "...")
--- 리뷰 샘플 (처음 3개) ---
[1] 추천 | 34.5시간
항상 좋은 키류~...
[2] 비추천 | 65.6시간
왠만하면 아니요 잘 안누르는데
7과 비교해서 너무 실망이다.
개연성 부족, 억지로 끼워 맞춘 스토리, 전투도 너무 늘어진다.
그냥 팬심으로 했지.. 겜으로 따지면... 처참하다......
[3] 추천 | 67.6시간
일본 RPG는 끊임없이 진화합니다. 이 게임은 그 증명입니다....
6. CSV 로 저장
# CSV 파일로 저장
filename = f"reviews_{app_id}.csv"
df.to_csv(filename, index=False, encoding='utf-8-sig')
print(f"'{filename}' 저장 완료!")
print(f"파일 크기: {len(df)}행 x {len(df.columns)}열")
'reviews_2072450.csv' 저장 완료!
파일 크기: 100행 x 5열
7. 파일 다운로드
# ( Colab 전용 ) 파일 다운로드
try:
from google.colab import files
files.download(filename)
print("다운로드 시작")
except:
print("로컬 환경에서 실행 중 - 파일이 현재 디렉토리에 저장")'🤖AI Tools > AI 리뷰 분석' 카테고리의 다른 글
| Hades 리뷰 분석 (0) | 2026.04.22 |
|---|---|
| API 로 데이터 수집하기 (0) | 2026.04.22 |
| 데이터 수집 방법 (0) | 2026.04.21 |
| Python 정리 (0) | 2026.04.21 |
| 텍스트 리뷰 분석 (0) | 2026.04.14 |