2017/05/10
Amazonのレビュー信頼度を測ってみる
はじめに
商品によっては極端にレビュー評価が偏っていて参考にならないものもある。
そう言った「データの偏りを解決してみよう!」という投稿です。
結論を先に言ってしまうとAmazonでのスクレイピングはレキュリティ的に実現出来ませんでした。
信頼性について
★5 : 4
★4 : 3
★3 : 2
★2 : 1
★1 : 0
この時の平均は4。まあ、解ります。
偏りのある場合。
★5 : 100
★4 : 5
★3 : 0
★2 : 0
★1 : 1
この時の平均は4.915…。
この★5の信頼性があるかどうかは内容を見ないと解らないです。
RoRでスクレイピングと同時に解決が難しかったのでPythonにて検証。
R言語では以下のようなプログラムで信頼区間を算出出来ました。
1 2 | hoge = c(5, 5, 5, ...., 4, 4, 4, 4, 1) t.test(hoge) |
以下のような出力で平均と信頼区間、p値などが見えます。
1 2 3 4 5 6 7 8 | data: hoge t = 7.5794, df = 6, p-value = 0.0002742 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 2.902121 5.669308 sample estimates: mean of x 4.285714 |
上記のデータだと 2.902121 〜 5.669308 までが信頼出来るデータという内容です。
Rのインストールは
1 | yum install -y R |
で出来ます。
Pythonでスクレイピング
1 | pip install numpy, urllib2, requests, beautifulsoup4, scipy |
pipはPythonのModule管理ツールです。
Pythonのテストコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import urllib2 import requests from bs4 import BeautifulSoup from scipy import stats target = "http://test.com/product=1" r = requests.get(target) soup = BeautifulSoup(r.content, 'html.parser') ul = soup.find(id="productArea") # ulの中のliをループ ## liリンク先の評価数を統計する data = np.(評価配列データ) mean_val = np.mean(data) sem_val = stats.sem(data) # standared error of the mean ci = stats.t.interval(alpha, len(data)-1, loc=mean_val, scale=sem_val) print('mean:', mean_val) print('confidence interval:', ci) |
結局Pythonはスクレイピングが容易、統計結果を出すのがやや難、実データ取れず。
Rでの統計結果算出は容易、スクレイピングとの繋ぎ込みが難しい。
Ruby on Railsはどちらも微妙、、、で成果物ゼロという敗退結果が出ました。
現実的にはAmazonのAPIを使っPythonでデータを取得、
BeautifulSoupで整形、統計モジュールで信頼性の検証、、意外とボリュームがあったので後日再検証。
Author Profile
スターフィールド編集部
SHARE