食べログのpythonスクレイピングと分析 #14 ランダムフォレストで学習させてわかったこと (北海道編)

スポンサーリンク
tech系(python)
スポンサーリンク

はじめに

前回、精度が大幅に良くなりました。

今回はその結果を使用してコスパの良さげなパラメータが何なのかを調べてみます。

具体的には「予測された評価値(★の値)よりも実際の評価値(★の値)が高いレストランのパラメータはどうなっているのか」を確認していきます。

つまり、予測よりも高い評価を持つお店こそパフォーマンスの高いお店であり、そのお店たちにはどんな傾向があるのかを確認するのが今回の記事の趣旨になります。

この記事でわかること

コスパの良いレストランの値はどうなっているか

今回使用するデータについて

今回使用するデータは北海道の食べログに載っていたレストランですが、データ数はランチが16563件、ディナーが13590件です。

実際は3万件以上あるのですが、ブックマーク数とレビューコメント数が載っていないお店を除くとこの件数になります。

ですので、まだ実はおいしいお店があるのかもしれないですが、精度が高い状態で分析をしたいので、このデータ数で分析を行います。

「実際の値 – 予測値」が高い値

まず「実際の値 – 予測値」が高い値がどれくらいのものなのかを求めてみます。

とりあえず、ベスト10を求めます。

0.302
0.223
0.213
0.21
0.178
0.175
0.167
0.167
0.159
0.154

(ベスト30を求めるpythonコードはこちらで記載したものとほぼ同じなので参考にしてみてください)

大きいものだと0.3程離れていますね。

予測値よりも0.3程評価が高いお店となります。

各パラメータを分析

では実際に分析をしていきます。

分析方法について

今回、分析対象となるパラメータは以下です。

  • 「料理」
  • 「ドリンク」
  • 「空間・設備」
  • 「利用シーン」
  • 「受賞アワード」
  • 「ジャンル」

これらのパラメータに対して「実際の値 – 予測値」が高い値ベスト100を求めます。

それぞれに含まれている数が全体(ブックマーク数とレビューコメント数があるもの)の割合の何パーセント含まれているかで順位付けをします。

これは実際の値がその全体の中では多く占めているものが結果的にベスト100に多く含まれてしまうことを避けるためです。(正規化のようなことをするということですね。)

(ちょっと説明が分かりにくいかもなので、実際に以下でやってみながら説明も記載していきます。)

ランチとディナーに分けて行います。

それでは分析していきましょう。

ランチ

「料理」

「料理」のところだけ丁寧に説明します。

「料理」の値のベスト100は以下のような値になっています。

[]                                                  71
[魚料理にこだわる]                                           9
[野菜料理にこだわる, 魚料理にこだわる]                                7
[野菜料理にこだわる]                                          3
[英語メニューあり]                                           2
[野菜料理にこだわる, 魚料理にこだわる, 英語メニューあり]                      2
[野菜料理にこだわる, 魚料理にこだわる, 朝食・モーニングあり]                    1
[野菜料理にこだわる, 健康・美容メニューあり]                             1
[野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり]     1
[野菜料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり]               1
[健康・美容メニューあり]                                        1
[野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり]                   1

コスパの良いお店ベスト100の内、値が入っていないお店は71件あるということですね。

残りは、上記のリストの通りです。

複数の「料理」の項目があるお店もありますね。

では実際に全体の割合に対するベスト100の中でどれが割合として大きいかベスト10を求めてみます。

以下のようになりました。

        Value     Ratio
   朝食・モーニングあり  0.017391
     魚料理にこだわる  0.013877
    野菜料理にこだわる  0.012884
 ベジタリアンメニューあり  0.008065
     英語メニューあり  0.007767
    アレルギー表示あり  0.007463
  健康・美容メニューあり  0.006289
     カロリー表示あり  0.000000
   デザート食べ放題あり  0.000000

ちなみに、割合じゃなくて個数での順位が以下です。

魚料理にこだわる        16
野菜料理にこだわる       13
英語メニューあり         4
朝食・モーニングあり       4
健康・美容メニューあり      3
ベジタリアンメニューあり     2
アレルギー表示あり        1

これからわかる通り、個数と割合の順位が等しくなるとは限りません。

単純に「魚料理にこだわる」の全体に占める割合が多ければそれに引っ張られて順位が高くなってしまいます。(北海道だから「魚料理にこだわる」お店が多いのも納得がいきます。)

ということで割合で順位を求めています。

以下で求めている項目についても同様に割合で求めていきます。

また、一応、値を求めたコードも載せておきます。

以前もコスパの良いベスト100の割合を求めるというのはコードにしていますが、この時は要素がリストではなかったので、今回は少し複雑です。

import pandas as pd
from collections import Counter

# 要素ごとに値の出現回数をカウント
counter_a = Counter(val for sublist in kouhyouka_best_100['dish'] for val in sublist)
counter_b = Counter(val for sublist in restaurant_train_data['dish'] for val in sublist)

# 値ごとの比率を計算してDataFrameに格納
ratios = {}
for value in set(counter_a.keys()).union(counter_b.keys()):
    ratio = counter_a.get(value, 0) / counter_b.get(value, 1)
    #print(ratio)
    if isinstance(value, list):
        for sub_value in value:
            ratios[sub_value] = ratio
    else:
        ratios[value] = ratio

keys = list(ratios.keys())
values = list(ratios.values())

ratios_df = pd.DataFrame({'Value': keys, 'Ratio': values})

# 比率でランキングを計算して表示
ranked_ratios = ratios_df.sort_values(by='Ratio', ascending=False)
print(ranked_ratios)

kouhyouka_best_100はコスパのよいお店ベスト100のdataframe、

restaurant_train_dataは全部のレストランのデータdataframe

です。

‘dish’は「料理」のデータが入ったカラムを示しています。

「ドリンク」

ここから以下は、データをポンポンと載せていきます。

ランチの「ドリンク」は以下。

     Value     Ratio  
 ワインにこだわる  0.025276
  日本酒にこだわる  0.017408
     ワインあり  0.010235
    カクテルあり  0.009447
     日本酒あり  0.007407
      焼酎あり  0.007001
   焼酎にこだわる  0.006494
 カクテルにこだわる  0.005587

「空間・設備」

     Value     Ratio
    バリアフリー  0.012676
   車椅子で入店可  0.012146
      席が広い  0.011280
   掘りごたつあり  0.010435
   オシャレな空間  0.010273
      電源あり  0.008016
 無料Wi-Fiあり  0.007671
   落ち着いた空間  0.007650
  カウンター席あり  0.006324
   ソファー席あり  0.003854

「利用シーン」

    Value     Ratio
      デート  0.041096
       接待  0.036364
   家族・子供と  0.007900
   知人・友人と  0.005112
 一人で入りやすい  0.005040
      女子会  0.000000
   大人数の宴会  0.000000
      合コン  0.000000

「受賞アワード」

 The Tabelog Award 2022 Silver 受賞店  1.000000
 The Tabelog Award 2023 Silver 受賞店  1.000000
 The Tabelog Award 2022 Bronze 受賞店  0.500000
 The Tabelog Award 2019 Bronze 受賞店  0.500000
 The Tabelog Award 2021 Silver 受賞店  0.500000
 The Tabelog Award 2023 Bronze 受賞店  0.400000
       食べログ 日本料理 EAST 百名店 2023 選出店  0.333333
 The Tabelog Award 2021 Bronze 受賞店  0.333333
       食べログ 日本料理 EAST 百名店 2021 選出店  0.333333
      食べログ イタリアン EAST 百名店 2021 選出店  0.285714

「The Tabelog Award 2022 Silver 受賞店」と「The Tabelog Award 2023 Silver 受賞店」は確実にコスパの良いお店として入っていますね。

母数が少なければこういうことも起きますね。

「ジャンル」

   Value     Ratio
     タコス  1.000000
  メキシコ料理  0.250000
 イノベーティブ  0.166667
  オーベルジュ  0.105263
  ビアガーデン  0.090909
     串焼き  0.083333
   ろばた焼き  0.047619
   惣菜・デリ  0.040000
    タイ料理  0.040000
  スペイン料理  0.034483

ディナー

「料理」

        Value     Ratio
    野菜料理にこだわる  0.017115
 ベジタリアンメニューあり  0.016598
  健康・美容メニューあり  0.014768
     魚料理にこだわる  0.013896
     英語メニューあり  0.008982
   朝食・モーニングあり  0.004630
     カロリー表示あり  0.000000
   デザート食べ放題あり  0.000000
    アレルギー表示あり  0.000000

「ドリンク」

     Value     Ratio
  ワインにこだわる  0.019946
  日本酒にこだわる  0.013049
 カクテルにこだわる  0.011928
     ワインあり  0.010608
   焼酎にこだわる  0.009000
      焼酎あり  0.007833
     日本酒あり  0.007794
    カクテルあり  0.007549

「空間・設備」

     Value     Ratio
      電源あり  0.012821
   オシャレな空間  0.012014
   落ち着いた空間  0.010733
 ライブ・生演奏あり  0.009901
   スポーツ観戦可  0.009554
   車椅子で入店可  0.008696
      席が広い  0.008008
  カウンター席あり  0.007928
 無料Wi-Fiあり  0.007752
 カップルシートあり  0.006369

「利用シーン」

    Value     Ratio
      デート  0.037190
      女子会  0.013333
       接待  0.008811
   知人・友人と  0.006329
   家族・子供と  0.005665
 一人で入りやすい  0.005510
   大人数の宴会  0.005181
      合コン  0.000000

「受賞アワード」

                             Value     Ratio
   The Tabelog Award 2018 Gold 受賞店  1.000000
   The Tabelog Award 2021 Gold 受賞店  1.000000
   The Tabelog Award 2022 Gold 受賞店  1.000000
 The Tabelog Award 2020 Silver 受賞店  1.000000
   The Tabelog Award 2019 Gold 受賞店  1.000000
 The Tabelog Award 2017 Silver 受賞店  0.500000
 The Tabelog Award 2023 Silver 受賞店  0.500000
 The Tabelog Award 2021 Silver 受賞店  0.500000
 The Tabelog Award 2023 Bronze 受賞店  0.181818

「ジャンル」

   Value     Ratio
   くじら料理  0.333333
 東南アジア料理  0.125000
   チーズ料理  0.111111
    豚しゃぶ  0.100000
    タイ料理  0.050000
 イノベーティブ  0.050000
   惣菜・デリ  0.043478
   インド料理  0.038462
    フレンチ  0.037736
    コロッケ  0.034483

まとめ

今度、北海道に行くときは

ランチで、タコス料理

ディナーで、くじら料理

の店も候補に入れて探して食べてみようと思います。

以上!!

今回はここまで。ではまた。👋👋👋

この記事、需要あるかな…。


タイトルとURLをコピーしました