Help us understand the problem. What is going on with this article?

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

概要

最近テキストマイニングの勉強を始めたのだが、いい感じのサンプルデータが手に入らず苦労した。自分と同じ悩みを抱えている人もいるかもしれないので、自力でサンプルデータを準備するまでの試行錯誤を記事にする。

なお、私は職場でアンケートの自由記述(感想とか要望とか)を分析することが多いので、なるべく似た形式のデータを手に入れるのが目標。

手段の検討

青空文庫

テキストマイニングの本でもよく見かける青空文庫は、著作権の消滅した文学作品などを掲載した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. とりあえずはバーコードの番号だと思って差し支えないはず。 

dr666m1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした