python初心者が食べログをスクレイピングして駅からの距離と評価の関係を調べてみた
目的
スクレイピングをしてみたくてなんとなく思い浮かんだ食べログをスクレイピングしてみます。
仮説として、駅からの距離が近い店は家賃が高いからそれだけ人気を維持しなければいけないから評価が高い店が多いのではないかと思いました。
駅からの距離と評価を抽出して関係を調べてみます。
環境構築
windows8
anacondaをインストール
python3.7.5
ソース
食べログの東京にある店でMAXの60ページ分をスクレイピングで取得しています。
1ページに20件の店なので1200件分のお店ですね。
すべての店には駅からの距離が記載されているのですが、1つだけ世田谷とだけしか書かれていない店があったため処理をスキップしています。
import requests
import csv
from bs4 import BeautifulSoup
import re
import matplotlib.pyplot as plt
root_url = 'https://tabelog.com/tokyo/' # 食べログURL
max_page = 60 # 最大表示ページ
url = root_url # スクレイピングしていくURL
x = [] # x軸 駅までの距離
y = [] # y軸 評価
# 最大ページまで繰り返し
for page in range(2, max_page, 1):
res = requests.get(url)
# HTMLパーサーでHTMLを扱いやすいようなデータに変換する
soup = BeautifulSoup(res.content, 'html.parser')
# 駅からの距離を配列で取得
distance = soup.find_all('div' , class_='list-rst__area-genre cpy-area-genre')
rate = soup.find_all('span', class_='c-rating__val c-rating__val--strong list-rst__rating-val')
# スペースと"/"以降の文字を削除する(駅までの距離を取得)
for (distance,rate) in zip(distance,rate):
# 1つだけフォーマットが異なるデータがあったのでスキップする
if '世田谷区' in re.sub('.*駅', '', re.sub('/[^/]*$', '', distance.text)).strip().replace('m', ''):
continue
# 距離の数字以外の文字を省いてx軸に加える
x.append(int(re.sub('.*駅', '', re.sub('/[^/]*$', '', distance.text)).strip().replace('m', '')))
# 評価をy軸に加える
y.append(float(rate.text))
# 次のページのURLを取得
url = root_url + 'rstLst/RC/' + str(page) + '/'
# 散布図
plt.scatter(x, y)
# グラフの可視化
plt.show()
githubにも上げてみました
https://github.com/mimicman/tabeAnalysis
実行結果
実行結果は下記のグラフになります。
横軸が駅からの距離で縦軸が評価です。
評価
駅からの距離が近いと評価も高くなるんじゃないかとおも思いましたが、そうでもないようです。
むしろ予測とは逆に駅から遠いほうが評価の高い店があるようにも見えます。
これだけじゃわかりませんのでもっと統計時な処理が必要なのだと思います。
Author And Source
この問題について(python初心者が食べログをスクレイピングして駅からの距離と評価の関係を調べてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/gts/items/250dd12df65cc04da4dd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .