파이썬으로 구글 플레이 스토어 리뷰 크롤링 / 감성 분석하기
여러분 안녕하세요? 오늘은 파이썬을 활용해 실제 앱 리뷰 데이터에 대한 감성분석을 해보겠습니다. 구글 플레이스토어에서 제공하는 앱 리뷰 데이터를 활용할 텐데요. 이런 감성분석은 고객의 의견을 실시간으로 파악하여 제품/서비스 개선에 활용할 수 있습니다.
이 포스팅에서는 다음 내용을 다룰 예정입니다:
1. 데이터 수집 및 전처리
2. TextBlob 라이브러리를 이용한 감성 점수 계산
3. 결과 시각화
4. 개선 방안 제시
## 1. 데이터 수집 및 전처리
먼저 구글 플레이 스토어 API를 통해 특정 앱의 리뷰 데이터를 수집합니다.
from google_play_scraper import Sort, reviews_all
# 크롤링 대상 앱 정보
app_name = "com.whatsapp"
app_operation = reviews_all(
app_name,
sleep_milliseconds=0, # defaults to 20
country="us", # defaults to 'us'
sort=Sort.NEWEST, # defaults to Sort.MOST_RELEVANT
)
reviews_list = []
# 리뷰 데이터 수집
for review in app_operation:
review_dict = {
'review_id': review['review_id'],
'review': review['content'],
'score': review['score'],
'thumbs_up_count': review['thumbsUpCount']
}
reviews_list.append(review_dict)
# pandas DataFrame으로 변환
import pandas as pd
reviews_df = pd.DataFrame(reviews_list)
위 코드에서는 google-play-scraper 라이브러리를 활용하여 WhatsApp 앱의 최신 리뷰 데이터를 크롤링하고 있습니다.
`reviews_all()` 함수를 호출하면서 앱 패키지 이름(app_name), 크롤링 딜레이(sleep_milliseconds), 국가 코드(country), 정렬 기준(sort) 등의 파라미터를 지정할 수 있습니다.
크롤링된 리뷰는 딕셔너리 형태로 저장되며, 'review_id', 'content', 'score', 'thumbsUpCount' 등의 정보를 포함합니다.
마지막으로 리뷰 딕셔너리 목록을 Pandas DataFrame으로 변환하여 이후 전처리 및 분석에 활용할 수 있습니다.
수집한 데이터에서 리뷰 텍스트만 추출하고 전처리를 수행합니다.
import re
import nltk
from nltk.corpus import stopwords
# 텍스트 정제 함수
def preprocess(text):
text = re.sub('[^a-zA-Z]', ' ', text) # 특수문자 제거
text = text.lower() # 소문자 변환
text = text.split() # 단어 토큰화
text = [w for w in text if w not in stopwords.words('english')] # stopwords 제거
text = ' '.join(text) # 텍스트 병합
return text
reviews['review'] = reviews['review'].apply(preprocess)
TextBlob 라이브러리 감성 분석
TextBlob은 파이썬 NLTK 라이브러리를 기반으로 텍스트 데이터 처리에 특화된 라이브러리입니다. 각 리뷰에 대해 -1부터 1 사이의 극성(polarity) 점수를 계산합니다.
TextBlob은 영문 자연어 처리에 적합하므로 한글 감성 분석을 위해서는 이전 글에서 소개한 구글 번역기능이나 KoNLPy 라이브러리를 사용해야 합니다.
from textblob import TextBlob
reviews['polarity'] = reviews['review'].apply(lambda x: TextBlob(x).sentiment.polarity)
reviews.head()
## 3. 결과 시각화
리뷰별 극성 점수 분포를 봅시다. 0에 가까울수록 중립적인 의견이고, 1에 가까울수록 긍정, -1에 가까울수록 부정 리뷰입니다.
import matplotlib.pyplot as plt
%matplotlib inline
plt.hist(reviews['polarity'], bins=20)
plt.title('Review Polarity Histogram')
plt.show()
개선 방안
TextBlob 라이브러리는 일반적인 감성분석 태스크에서 적절한 성능을 내지만, 도메인 지식이 포함된 특정 용어에 대해서는 감성 인식이 취약할 수 있습니다. 예를 들어 "버그"라는 단어는 부정적 극성을 갖지만, 실제로는 제품의 기술적 문제를 지칭하므로 부정 리뷰라고 단정할 수 없습니다.
이를 개선하기 위해서는 사전학습된 워드 임베딩이나 Transfer Learning 등의 기법을 활용하여 도메인 지식을 반영한 모델을 학습시키는 것이 좋습니다. 또한 앱 리뷰 외에도 별점, 앱 카테고리 등의 정보를 모델에 추가로 반영하면 분석 성능이 더 좋아질 수 있습니다.
'데이터 분석 > 데이터 분석 방법' 카테고리의 다른 글
Pandas와 Polars 비교: 장단점 분석 (0) | 2025.01.08 |
---|---|
효율적인 웹 크롤링을 위한 파이썬 requests & BeautifulSoup 활용 (0) | 2024.05.10 |
판다스(Pandas) 데이터프레임 비교하기 - 데이터 일치 여부 확인 꿀팁! (0) | 2024.05.10 |
소프트웨어 엔지니어가 알아야 할 로그에 대한 모든 것 | Apache Kafka 탄생 배경 (66) | 2023.09.14 |
소프트웨어 엔지니어가 알아야 할 로그에 대한 모든 것 | Apache Kafka 탄생 배경 (0) | 2023.09.06 |