# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # UberEats店舗データ分析(武蔵中原近辺)

import pandas as pd
import datetime
import seaborn as sns
from pyproj import Geod
import japanize_matplotlib

FILE_PATH = './../data/shop_master.csv'
master = pd.read_csv(FILE_PATH, index_col='id')

len(master)

master.head(3)

df = master.assign(
    shop_position_id = master.apply(lambda x: str(x.latitude) + "-" + str(x.longitude), axis=1)).drop(["address", "url"], axis=1)

df.head(3)

# ## 最寄り駅ごとにお店を分類する

# 武蔵中原、武蔵新城、武蔵小杉、武蔵溝ノ口、その他の分類でお店を分類する。半径1km県内を最寄りと定義する。

# +
kosugi_lat, kosugi_lng = 35.5766335,139.6572773 # 武蔵小杉駅
nakahara_lat, nakahara_lng = 35.5807143,139.6399183 # 武蔵中原駅
shinjo_lat, shinjo_lng = 35.58718,139.6276537 # 武蔵新城
mizonokuchi_lat, mizonokuchi_lng = 35.5991055,139.6087969 # 武蔵溝ノ口駅

stations = [
    ["武蔵小杉", [kosugi_lat, kosugi_lng]],
    ["武蔵中原", [nakahara_lat, nakahara_lng]],
    ["武蔵新城", [shinjo_lat, shinjo_lng]],
    ["武蔵溝ノ口", [mizonokuchi_lat, mizonokuchi_lng]]
]


# +
def is_near_station(station_lat, station_lng, shop_lat, shop_lng):
    grs80 = Geod(ellps='GRS80')  # GRS80楕円体
 
    _, _, distance = grs80.inv(station_lng, station_lat, shop_lng, shop_lat)

    return distance <= 1000

def get_near_station_name(station, shop_lat, shop_lng, v):
    station_name = station[0]
    station_position = station[1]
    
    if is_near_station(station_position[0], station_position[1], shop_lat, shop_lng):
        return station_name
    else:
        if v != "その他":
            return v
        else:
            return "その他"


# +
df["near_station"] = "その他"

for station in stations:
    df["near_station"] = df.apply(lambda x: get_near_station_name(station, x.latitude, x.longitude, x.near_station), axis=1)
# -

output = pd.DataFrame(df.groupby("near_station").count()["name"])
output.index.name = "最寄り駅"
output = output.rename(columns = {"name": "店舗数"})

sns.barplot(x="最寄り駅", y="店舗数", data=output.reset_index())

# ## 店舗数の集計

output

# ## レビュー数と評価の集計

output2 = pd.DataFrame(df.groupby("near_station").sum()[["reviews", "point"]])

output2


# 小杉の方が溝の口よりも、レビュー数が少ないにも関わらず評価ポイントの合計が高いということは、溝の口よりも小杉のほうがよい店が多いということ？

# ## チェーン店の調査

# +
def is_chain(x):
    if "店" in x:
        return True
    else:
        return False

df["is_chain"] = df["name"].apply(is_chain)
# -

pd.crosstab(df['near_station'], df['is_chain'])

print("武蔵小杉: {}%".format(round((25/48)*100)))
print("武蔵溝ノ口: {}%".format(round((32/53)*100)))



StarcoderdataJupyterScriptsDedupFiltered