wordcloud를 사용하여 앱 리뷰 시각화

앱을 다운로드할 때 먼저 해당 앱에 게시된 리뷰를 참고하는 사람이 많다고 생각합니다.
하지만 리뷰는 수가 많아 전부 보는 것은 어렵지요.
그래서 이번에는 wordcloud라는 표현으로 앱의 리뷰를 한눈에 알 수 있도록 시각화하고 싶습니다.

wordcloud란?



한 문서 중 출현하는 단어를 다양한 크기, 색상으로 표현하여 문서의 특징을 한 장의 이미지로 시각화 한 것입니다.

리뷰 데이터 수집



App Store의 앱 리뷰는 아래 URL에 해당하는 앱의 ID를 넣으면 JSON 형식으로 얻을 수 있습니다.
https://itunes.apple.com/ko/rss/customerreviews/id=(앱 ID)/page=1/json
이번에는 Twitter 앱을 대상으로합니다. ID는 333903271입니다.
page=의 뒤의 숫자를 바꾸는 것으로, 10 페이지분까지 취득할 수 있습니다.

아래 스크립트에서 앱 리뷰 데이터를 가져옵니다.
import pandas as pd
import requests
import json

rss_url = 'https://itunes.apple.com/jp/rss/customerreviews/id={}/sortBy=mostRecent/page={}/json'
app_id = '333903271'

def get_reviews(url):
    """ 
    iOSレビュー取得のAPIレスポンスから[点数、タイトル、文章、名前]のリストを取得する
    """
    response = requests.get(url, timeout=3.5)
    response_json = json.loads(response.text)
    reviews = [[int(entry['im:rating']['label']), entry['title']['label'], entry['content']['label'], entry['author']['name']['label']]\
               for entry in response_json['feed']['entry']]
    return reviews    

review_list = []
# 1~10ページ分のレビューを収集
for i in range(1, 11): 
    page_url = rss_url.format(app_id, i)
    reviews = get_reviews(page_url)
    review_list += reviews

review_df = pd.DataFrame(review_list, columns=['point', 'title', 'review', 'name'])![twitter_wordcloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501910/8c3531e3-7cde-a60f-8d5d-d8acd8594c6b.png)


수집한 데이터는 이런 느낌.



WordCloud 만들기



수집한 리뷰 데이터를 바탕으로 wordcloud 이미지를 만듭니다.
먼저 형태소 분석을 위해 MeCab을 설치합니다.
$ brew install mecab
$ brew install mecab-ipadic

그런 다음 파이썬에서 wordcloud 라이브러리를 설치합니다.
$ pip install wordcloud

아래 스크립트에서 wordcloud를 만들 수 있습니다.
일본어 입력을 위해 실행 환경에서 일본어 글꼴 파일의 경로를 지정합니다.
# 日本語用のフォントが格納されているパスを指定
FONT_PATH = '/System/Library/Fonts//ヒラギノ角ゴシック W3.ttc'

def prepare_word_list(words):
    """
    wodcloudに入力用の文字列を作成する

    Args:
        words([str]): 文章のリスト

    Retruns:
        str: 全単語から指定した品詞のみを抽出し、スペース区切りで結合した文字列
    """
    m = MeCab.Tagger('')
    parsed_words = []
    for word in words:
        items = [x.split('\t') for x in m.parse(word).splitlines()]
        for item in items:
            if item[0] == 'EOS' or item[0] == '':
                pass
            elif item[1].split(',')[0] in ["名詞", "形容詞", "動詞"]:
                parsed_words.append(item[0]) 

    return ' '.join(parsed_words)


def make_wordcloud(words, file_name):
    """
    入力した文章から、wordcloud画像ファイルを作成する。

    Args:
        words(str): スペース区切りで単語を結合した文字列
        file_name(str): 画像ファイル出力先のパス

    Returns:
        なし
    """
    parsed_words = prepare_word_list(words)
    wordc = wordcloud.WordCloud(
        font_path = FONT_PATH,
        background_color='white',
        contour_width=2,
        width=800,
        height=600,
    ).generate(parsed_words)

    wordc.to_file(file_name)


make_wordcloud(review_df['review'], './image/twitter_wordcloud.png')

완성된 wordcloud 이미지가 여기!


Twitter, 계정, 동결, 팔로우, 타임라인, 등 twitter다운 워드가 줄지어 있네요.

요약



ios 앱 리뷰를 시각화할 수 있었습니다.
대량의 문서의 이미지를 퀵에 포착하고 싶을 때에 wordcloud는 좋을지도 모르겠네요.

좋은 웹페이지 즐겨찾기