はじめに
前回は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
食べログのページはこちら