大黒天物産の店舗をスクレイピング・集計・グラフ化・foliumで地図にプロット

dev.classmethod.jp

imabari.hateblo.jp

import pandas as pd

# スクレイピング
df = pd.read_csv(
    "http://www.dkt-s.com/common/data/data_convert.php?name=d_store",
    sep="\t",
    index_col=0,
)

# ブランド仕分け
df["ブランド"] = df["店舗名"].str.extract(
    "^(ラ・ムー|ディオ(マート)?|ら・む〜マート|バリュー100|ザ・大黒天|マツサカ|生鮮食品おだ|マミーズ|西源).+"
)[0]
import matplotlib.pyplot as plt
import japanize_matplotlib

df["ブランド"].value_counts().plot.barh()

f:id:imabari_ehime:20200129231454p:plain

!pip install japanmap
from japanmap import pref_names

df["都道府県"] = df["都道府県コード"].apply(lambda x: pref_names[x])

pd.crosstab(df["都道府県"], df["ブランド"]).plot.barh(stacked=True, figsize=(5, 10))

f:id:imabari_ehime:20200129231504p:plain

コロプレス図

pref = df["都道府県コード"].value_counts()

from japanmap import picture, get_data, pref_map
from matplotlib.colors import rgb2hex

norm = plt.Normalize(vmin=pref.min(), vmax=pref.max())
cmap = plt.get_cmap("bwr")

c = pref.apply(lambda x: cmap(norm(x)))

cols = [rgb2hex(i) for i in c]

svg = pref_map(pref.index, cols=cols, width=3)

svg

f:id:imabari_ehime:20200129231638p:plain

plt.figure(figsize=(2, 2), dpi=200)
plt.imshow(picture(c, 255))

# plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
plt.tick_params(
    bottom=False,
    top=False,
    left=False,
    right=False,
    labelbottom=False,
    labeltop=False,
    labelleft=False,
    labelright=False,
)
plt.savefig("japan.png")

f:id:imabari_ehime:20200129232020p:plain

地図

import folium

daikoku_map = folium.Map(location=[34.06604300, 132.99765800], zoom_start=9)

for i, r in df.iterrows():
    if r["ブランド"] == "ラ・ムー":
        icon_color = "red"
    elif r["ブランド"] == "ディオ":
        icon_color = "blue"
    elif r["ブランド"] == "ディオマート":
        icon_color = "lightblue"
    elif r["ブランド"] == "ら・む〜マート":
        icon_color = "green"
    elif r["ブランド"] == "バリュー100":
        icon_color = "lightgreen"
    elif r["ブランド"] == "ザ・大黒天":
        icon_color = "lightgray"
    else:
        icon_color = "pink"
    folium.Marker(
        location=[r["緯度"], r["経度"]], popup=r["店舗名"], icon=folium.Icon(color=icon_color)
    ).add_to(daikoku_map)

daikoku_map