■食べログのpythonスクレイピングと分析 #9 「Streamlitを使ったマッピング(マッピングまで)/ジャンル別コスパの高いお店を(少し)載せる」

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

はじめに

前回はfoliumを使って地図上にコスパの良いお店をマッピングしました。

こちらはjupyter notebookを使用しての実装になっていました。

今回はSteamlitを使用してマッピングしたものをデプロイするところを実装しようと思います。

「デプロイを試してみたい」というのが動機になります。

Steamlitとは

Steamlitとは簡単にpythonでwebアプリケーションを作成するためのフレームワークです。

そして、デプロイも簡単にできるところも特徴です。

とりあえずアプリが動くかを確認するときに使えると思います。

Steamlitの導入について

今回はwindowsでSteamlitを導入します。

個人的にはLinuxで作業する方がやりやすい + 勉強になると思うので、WSL × Visual Studio Codeの導入をお勧めします。

WSL × Visual Studio Codeの導入に関してはこちらの記事で記載しています。

今後、開発をしていくうえでもやりやすくなるかと思うのでそういう意味でもお勧めします。

実装

まずはstremlit-foliumをインストールします。

$ pip3 install streamlit-folium

今回のファイル構成は以下のような感じ。

$ ls
app.py  cospa_map_df_2022-10-11.csv

app.pyの中身は以下のような感じ。

import streamlit as st
from streamlit_folium import st_folium
import folium
import pandas as pd
import codecs
import re

st.set_page_config(
    page_title="コスパマッピング",
    layout="wide"
)

with codecs.open("./cospa_map_df_2022-10-11.csv", "r", "Shift-JIS", "ignore") as file:
    df_tokyo_for_mapping = pd.read_table(file, delimiter=",",index_col=0).transpose()
    
df_tokyo_for_mapping = df_tokyo_for_mapping.rename(columns={'lat': 'longitude', 'lon': 'latitude'})

cospa_map = folium.Map(
                   location=[35.6895014, 139.6917337],
                   zoom_start=12,
                   tiles='Stamen Terrain'
                   )

tooltip = 'Click me!'

for index, row in df_tokyo_for_mapping.iterrows():
    if (row['longitude'] != "-" and row['latitude'] != "-"):
        if float(row['cospa']) <= 0:
            if re.match(".*_1",index):
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="yellow", color="black", icon="glyphicon glyphicon-star"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
            else:
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="white", color="black", icon="glyphicon glyphicon-cutlery"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
        elif (0 < float(row['cospa'])) and (float(row['cospa']) <= 10):
            if re.match(".*_1",index):
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="yellow", color="blue", icon="glyphicon glyphicon-star"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
            else:
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="black", color="blue", icon="glyphicon glyphicon-cutlery"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
        elif (10 < float(row['cospa'])) and (float(row['cospa']) <= 20):
            if re.match(".*_1",index):
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="yellow", color="green", icon="glyphicon glyphicon-star"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
            else:
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="black", color="green", icon="glyphicon glyphicon-cutlery"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
        elif 30 < float(row['cospa']):
            if re.match(".*_1",index):
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="yellow", color="red", icon="glyphicon glyphicon-star"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)
            else:
                folium.Marker([row['longitude'], row['latitude']], 
                              icon=folium.Icon(icon_color="black", color="red", icon="glyphicon glyphicon-cutlery"), 
                              popup='<i>' + index + ' , ' + row['store_name'] + ' , ' + row['cost_hensa'] + '</i>',
                              tooltip=tooltip).add_to(cospa_map)

st_data = st_folium(cospa_map, width=1200, height=800)

streamlitを実行して見ましょう。

$ streamlit run app.py

ブラウザが立ち上がり、以下のようにマップが表示されました。とても素敵ですね。💖

ジャンル別コスパの高いお店(一部)載せる

毎度おなじみになりましたが、ジャンル別のコスパ指数の高いお店を一部載せます。(コスパ指数の定義はこちらの記事で記載しています。)

3つのジャンルのランチとディナーにおけるランキングBest 5を載せます。

データは2022年8月に収集したものになります。

①かき氷

ランチ

1 位: 竹むら(たけむら)

評価値の偏差値: 66.9828 (評価値: 3.74 )

価格帯の偏差値: 38.3814 (価格帯: ~¥999 )

コスパ指数: 28.6014

食べログのページはこちら


2 位: ジャパニーズアイス櫻花(JAPANESEICEOUCA)

評価値の偏差値: 66.1515 (評価値: 3.72 )

価格帯の偏差値: 38.3814 (価格帯: ~¥999 )

コスパ指数: 27.7701

食べログのページはこちら


3 位: 芋甚(いもじん)

評価値の偏差値: 64.4888 (評価値: 3.68 )

価格帯の偏差値: 38.3814 (価格帯: ~¥999 )

コスパ指数: 26.1074

食べログのページはこちら


4 位: あんや

評価値の偏差値: 64.0731 (評価値: 3.67 )

価格帯の偏差値: 38.3814 (価格帯: ~¥999 )

コスパ指数: 25.6917

食べログのページはこちら


5 位: みはし上野本店

評価値の偏差値: 63.2417 (評価値: 3.65 )

価格帯の偏差値: 38.3814 (価格帯: ~¥999 )

コスパ指数: 24.8603

食べログのページはこちら

ディナー

1 位: 北斎茶房(ほくさいさぼう)

評価値の偏差値: 66.6941 (評価値: 3.75 )

価格帯の偏差値: 43.7139 (価格帯: ~¥999 )

コスパ指数: 22.9803

食べログのページはこちら


2 位: ジャパニーズアイス櫻花(JAPANESEICEOUCA)

評価値の偏差値: 65.4276 (評価値: 3.72 )

価格帯の偏差値: 43.7139 (価格帯: ~¥999 )

コスパ指数: 21.7137

食べログのページはこちら


3 位: フルーツパーラーゴトー

評価値の偏差値: 67.5385 (評価値: 3.77 )

価格帯の偏差値: 48.5457 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.9927

食べログのページはこちら


4 位: 目白志むら(しむら)

評価値の偏差値: 67.1163 (評価値: 3.76 )

価格帯の偏差値: 48.5457 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.5705

食べログのページはこちら


5 位: 竹むら(たけむら)

評価値の偏差値: 66.2720 (評価値: 3.74 )

価格帯の偏差値: 48.5457 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 17.7262

食べログのページはこちら

②日本茶専門店

ランチ

1 位: 一芯二葉(きっさこいっしんによう)

評価値の偏差値: 72.5170 (評価値: 3.65 )

価格帯の偏差値: 46.3046 (価格帯: ~¥999 )

コスパ指数: 26.2123

食べログのページはこちら


2 位: 森乃園(モリノエン)

評価値の偏差値: 72.5170 (評価値: 3.65 )

価格帯の偏差値: 49.1514 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 23.3655

食べログのページはこちら


3 位: 壽々喜園浅草本店

評価値の偏差値: 69.3821 (評価値: 3.59 )

価格帯の偏差値: 46.3046 (価格帯: ~¥999 )

コスパ指数: 23.0774

食べログのページはこちら


4 位: 中村藤吉本店銀座店(ナカムラトウキチホンテン)

評価値の偏差値: 67.8146 (評価値: 3.56 )

価格帯の偏差値: 49.1514 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.6632

食べログのページはこちら


4 位: 茶々工房

評価値の偏差値: 67.8146 (評価値: 3.56 )

価格帯の偏差値: 49.1514 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.6632

食べログのページはこちら

ディナー

1 位: 一芯二葉(きっさこいっしんによう)

評価値の偏差値: 71.0611 (評価値: 3.65 )

価格帯の偏差値: 45.3267 (価格帯: ~¥999 )

コスパ指数: 25.7344

食べログのページはこちら


2 位: 森乃園(モリノエン)

評価値の偏差値: 71.0611 (評価値: 3.65 )

価格帯の偏差値: 48.0836 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 22.9775

食べログのページはこちら


3 位: 中村藤吉本店銀座店(ナカムラトウキチホンテン)

評価値の偏差値: 66.6679 (評価値: 3.56 )

価格帯の偏差値: 48.0836 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.5843

食べログのページはこちら


3 位: 茶々工房

評価値の偏差値: 66.6679 (評価値: 3.56 )

価格帯の偏差値: 48.0836 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 18.5843

食べログのページはこちら


5 位: 林屋茶園目黒セントラルスクエア店

評価値の偏差値: 65.2035 (評価値: 3.53 )

価格帯の偏差値: 48.0836 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 17.1199

食べログのページはこちら

③居酒屋

ランチ

1 位: 中華そばムタヒロ1号店

評価値の偏差値: 81.2954 (評価値: 3.73 )

価格帯の偏差値: 43.5381 (価格帯: ~¥999 )

コスパ指数: 37.7573

食べログのページはこちら


2 位: 麺やまらぁ

評価値の偏差値: 80.6593 (評価値: 3.72 )

価格帯の偏差値: 43.5381 (価格帯: ~¥999 )

コスパ指数: 37.1212

食べログのページはこちら


2 位: 麺酒処ぶらり

評価値の偏差値: 80.6593 (評価値: 3.72 )

価格帯の偏差値: 43.5381 (価格帯: ~¥999 )

コスパ指数: 37.1212

食べログのページはこちら


4 位: 豚小家(ぶたごや)

評価値の偏差値: 80.0232 (評価値: 3.71 )

価格帯の偏差値: 43.5381 (価格帯: ~¥999 )

コスパ指数: 36.4851

食べログのページはこちら


4 位: ホットスプーン(HotSpoon)

評価値の偏差値: 80.0232 (評価値: 3.71 )

価格帯の偏差値: 43.5381 (価格帯: ~¥999 )

コスパ指数: 36.4851

食べログのページはこちら

ディナー

1 位: 中華そばムタヒロ1号店

評価値の偏差値: 82.4032 (評価値: 3.73 )

価格帯の偏差値: 35.8170 (価格帯: ~¥999 )

コスパ指数: 46.5862

食べログのページはこちら


2 位: 麺やまらぁ

評価値の偏差値: 81.7871 (評価値: 3.72 )

価格帯の偏差値: 35.8170 (価格帯: ~¥999 )

コスパ指数: 45.9701

食べログのページはこちら


2 位: 麺酒処ぶらり

評価値の偏差値: 81.7871 (評価値: 3.72 )

価格帯の偏差値: 35.8170 (価格帯: ~¥999 )

コスパ指数: 45.9701

食べログのページはこちら


4 位: ホットスプーン(HotSpoon)

評価値の偏差値: 81.1710 (評価値: 3.71 )

価格帯の偏差値: 35.8170 (価格帯: ~¥999 )

コスパ指数: 45.3540

食べログのページはこちら


5 位: CURRYSHOPくじら高円寺

評価値の偏差値: 83.6353 (評価値: 3.75 )

価格帯の偏差値: 39.9944 (価格帯: ¥1,000~¥1,999 )

コスパ指数: 43.6410

食べログのページはこちら


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