LoginSignup
6
6

More than 3 years have passed since last update.

テキストマイニングのサンプルデータを自力で準備する

Last updated at Posted at 2020-06-24

※実際に試した方から「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/のまま登録できた)。
image.png

レビューの取得

ここからは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というファイルができるので、後は好きな方法で分析できる。とりあえずスプレッドシートで開いて確認するとこんな感じ。意外と商品そのものより、配送についてのレビューが多い印象。高評価・低評価のレビューを比較して分析するのもおもしろそう。
image.png

これでやっとテキストマイニングの勉強ができる...


  1. とりあえずはバーコードの番号だと思って差し支えないはず。 

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6