데이터 분석/데이터 분석 방법

파이썬으로 구글 플레이 스토어 리뷰 크롤링 / 감성 분석하기

Family in August 2024. 5. 13. 06:53
반응형

파이썬으로 구글 플레이 스토어 리뷰 크롤링 / 감성 분석하기


여러분 안녕하세요? 오늘은 파이썬을 활용해 실제 앱 리뷰 데이터에 대한 감성분석을 해보겠습니다. 구글 플레이스토어에서 제공하는 앱 리뷰 데이터를 활용할 텐데요. 이런 감성분석은 고객의 의견을 실시간으로 파악하여 제품/서비스 개선에 활용할 수 있습니다.

이 포스팅에서는 다음 내용을 다룰 예정입니다:
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 등의 기법을 활용하여 도메인 지식을 반영한 모델을 학습시키는 것이 좋습니다. 또한 앱 리뷰 외에도 별점, 앱 카테고리 등의 정보를 모델에 추가로 반영하면 분석 성능이 더 좋아질 수 있습니다.

반응형