※実際に試した方から「Yahoo!ショッピングの商品レビューが全て取得できているわけではないらしい」「期待したよりも取得できるデータが少ない」といった感想をもらっています。きちんと確認できていませんが、APIの仕様なのかもしれません。(2020/10/24追記)
概要
最近テキストマイニングの勉強を始めたのだが、いい感じのサンプルデータが手に入らず苦労した。自分と同じ悩みを抱えている人もいるかもしれないので、自力でサンプルデータを準備するまでの試行錯誤を記事にする。
なお、私は職場で**アンケートの自由記述(感想とか要望とか)**を分析することが多いので、なるべく似た形式のデータを手に入れるのが目標。
手段の検討
青空文庫
テキストマイニングの本でもよく見かける青空文庫は、著作権の消滅した文学作品などを掲載したWebサイト。ただ、アンケートデータには似ていないので今回は見送り。
- メリット
- 簡単にかなりの分量のテキストが手に入る。
- 読んだことのある作品は、事前知識もあって分析しやすい。
- デメリット
- アンケートデータとは形式が全く異なる。
スクレイピング
例えばOpenWorkや転職会議のような会社の評価が集まるサイトをスクレイピングすることを考える。非常におもしろそうだが、今回はデメリットが大きいと判断して見送り。
- メリット
- 自分の会社に限定すれば、事前知識もあって分析しやすい。
- 中途or新卒採用のような回答者の属性も充実しており、深堀りしやすい。
- デメリット
- 記事の確認にログインが必要など、若干スクレイピングの難易度が高い。
- サイトの利用規約に違反していたら、この記事を書いた自分が叩かれそう。
TwitterのAPI
企業が行っている感想投稿キャンペーンを利用すれば、アンケートの自由記述に似たデータが手に入りそう(例えばスターウォーズとかでもやっていた)。ただ、実際に見てみるとTwitterのクセがかなり強いのでこれも見送り。
- メリット
- APIが整備されているため、利用しやすい。
- デメリット
- 画像ありきの投稿もあったり、URLやハッシュタグが多かったりと、Twitter独自のクセが強い。
ECサイトのAPI
特定の商品のレビューを抽出できたら、アンケートの自由記述に似たデータが手に入りそう。Amazon、楽天市場、Yahoo!ショッピングなどいろいろあるが、Yahoo!ショッピングの商品レビュー検索APIならJANコード1を指定してレビューを取得できそう!明確なデメリットも思い浮かばないので、今回はこのAPIを利用します。
- メリット
- APIが整備されているため、利用しやすい。
- 興味のある商品のレビューに限定すれば、事前知識もあって分析しやすい。
Yahoo!ショッピングWeb APIを叩く
アプリケーションIDの取得
ここを参考に、アプリケーションIDを取得する。この記事を再現するだけなら、設定は以下のままいじらなくてよさそう(サイトURLもhttp://example.com/
のまま登録できた)。
レビューの取得
ここからはPythonで実行する。appid
は先ほど取得したアプリケーションIDに置き換えること(管理画面ではClient Idと記載されているかもしれない)。以下ではとりあえず商品の評価(rate
)とレビューの本文(description
)のみ取得しているが、その気になればもっといろいろな情報がとれる(詳細は公式ドキュメントを確認)。一度に50件までしか取得できないが、それ以上必要な場合もstart
を50ずつずらして繰り返せばいけそう。
import requests
import json
import pandas as pd
url = "https://shopping.yahooapis.jp/ShoppingWebService/V1/json/reviewSearch"
payload = {
"appid": "XXXXXXXXXX",
"jan": "4902777323176", # ザバスのプロテイン
"results": 50, # default... 10, max... 50
# "start": 1
}
res = json.loads(requests.get(url, params=payload).text)["ResultSet"]["Result"]
rate = [x["Ratings"]["Rate"] for x in res if x["Description"] != ""] # 評価
description = [x["Description"] for x in res if x["Description"] != ""] # レビュー
df = pd.DataFrame({
"rate": rate,
"description": description,
})
df.to_csv("review.csv", header=True, index=False)
確認
上のコードを実行すると、review.csv
というファイルができるので、後は好きな方法で分析できる。とりあえずスプレッドシートで開いて確認するとこんな感じ。意外と商品そのものより、配送についてのレビューが多い印象。高評価・低評価のレビューを比較して分析するのもおもしろそう。
これでやっとテキストマイニングの勉強ができる...
-
とりあえずはバーコードの番号だと思って差し支えないはず。 ↩