PR

ラーメンは関東が安い!?

ラーメンは関東が安い?

政府統計の総合窓口

データを見るのは好きなので、e-Statに定期的にアクセスしています。以前もこの一年の値上がり、値下がりランキングを作ってみました。

e-Statは色々データがありますが、DBで見たりグラフ化するのはいまひとつ

昔は政府のデータといえばPDFでおいてあるだけで、再利用性がなく残念な感じでした。それがe-statになってCSVでダウンロードできるようになったのは嬉しい限りです。API活用とかも良いと思うのですが、DB機能とグラフ機能はなんだか開いてみるものの、使う機会は少ないです。だって見にくいですもの

グラフ機能

 コシヒカリの物価推移をDBでみてグラフで見ると以下のようになります。かえって見にくいので、結局CSVダウンロードにだよっちゃいますね。

グラフはAIに書いてもらうのがよいかと

ということで今回はラーメン(中華そば外食)のデータをダウンロードしました。

2022年の地域ごとの小売物価を貼り付けてコードを書いてもらいました。

市区町村ごとのラーメンの価格データがあります。地図に色でプロットするPythonコードを書いてください。価格の高い地域は赤色、安い地域は青色でお願いします。

地域	ラーメン価格
札幌	700
函館	637
旭川	600
青森	561
八戸	549
盛岡	596
仙台	511
秋田	599
山形	723
福島	555
郡山	579
水戸	453
日立	526
宇都宮	473
小山	609
前橋	556
さいたま	421
熊谷	570
川口	634
所沢	503
千葉	482
佐倉	597
浦安	675
東京都区部	543
八王子	716
立川	708
府中	682
横浜	563
川崎	618
相模原	561
横須賀	462
新潟	675
長岡	619
富山	678
金沢	564
福井	683
甲府	629
長野	608
松本	567
岐阜	561
静岡	602
浜松	714
富士	559
名古屋	565
岡崎	713
津	659
松阪	679
大津	587
京都	669
大阪	647
堺	751
枚方	557
東大阪	567
神戸	584
姫路	677
西宮	647
伊丹	685
奈良	580
和歌山	641
鳥取	685
松江	658
岡山	668
広島	777
福山	657
山口	650
宇部	597
徳島	622
高松	653
松山	597
今治	590
高知	682
福岡	570
北九州	671
佐賀	659
長崎	720
佐世保	712
熊本	669
大分	753
宮崎	680
鹿児島	569
那覇	673

ChatGPTで生成されたコード

!pip install folium geopy matplotlib

import folium
import matplotlib.cm as cm
import matplotlib.colors as colors
import pandas as pd
from geopy.geocoders import Nominatim
import time

# ---- データの準備 ----
data = [
    ("札幌", 700), ("函館", 637), ("旭川", 600), ("青森", 561), ("八戸", 549), ("盛岡", 596), 
    ("仙台", 511), ("秋田", 599), ("山形", 723), ("福島", 555), ("郡山", 579), ("水戸", 453),
    ("日立", 526), ("宇都宮", 473), ("小山", 609), ("前橋", 556), ("さいたま", 421), ("熊谷", 570),
    ("川口", 634), ("所沢", 503), ("千葉", 482), ("佐倉", 597), ("浦安", 675), ("東京都区部", 543),
    ("八王子", 716), ("立川", 708), ("府中", 682), ("横浜", 563), ("川崎", 618), ("相模原", 561),
    ("横須賀", 462), ("新潟", 675), ("長岡", 619), ("富山", 678), ("金沢", 564), ("福井", 683),
    ("甲府", 629), ("長野", 608), ("松本", 567), ("岐阜", 561), ("静岡", 602), ("浜松", 714),
    ("富士", 559), ("名古屋", 565), ("岡崎", 713), ("津", 659), ("松阪", 679), ("大津", 587),
    ("京都", 669), ("大阪", 647), ("堺", 751), ("枚方", 557), ("東大阪", 567), ("神戸", 584),
    ("姫路", 677), ("西宮", 647), ("伊丹", 685), ("奈良", 580), ("和歌山", 641), ("鳥取", 685),
    ("松江", 658), ("岡山", 668), ("広島", 777), ("福山", 657), ("山口", 650), ("宇部", 597),
    ("徳島", 622), ("高松", 653), ("松山", 597), ("今治", 590), ("高知", 682), ("福岡", 570),
    ("北九州", 671), ("佐賀", 659), ("長崎", 720), ("佐世保", 712), ("熊本", 669), ("大分", 753),
    ("宮崎", 680), ("鹿児島", 569), ("那覇", 673)
]

df = pd.DataFrame(data, columns=["地域", "ラーメン価格"])

# ---- ジオコーダの初期化 ----
geolocator = Nominatim(user_agent="ramen_price_map")

def get_lat_lon(city_name):
    """
    geopy で市区町村名から緯度経度を取得する。
    取得に失敗した場合は (None, None) を返す。
    """
    try:
        location = geolocator.geocode(city_name)
        if location is not None:
            return (location.latitude, location.longitude)
        else:
            return (None, None)
    except:
        return (None, None)

# ---- DataFrame に緯度・経度列を追加 ----
lats, lons = [], []
for city in df["地域"]:
    lat, lon = get_lat_lon(city)
    # API過負荷を防ぐため少し待機(環境に応じて調整)
    time.sleep(1)
    lats.append(lat)
    lons.append(lon)

df["lat"] = lats
df["lon"] = lons

# ---- 価格の最小値・最大値を取得 ----
min_price = df["ラーメン価格"].min()
max_price = df["ラーメン価格"].max()

# ---- カラーマップを作成 (「青→赤」で価格を可視化) ----
norm = colors.Normalize(vmin=min_price, vmax=max_price)
cmap = cm.get_cmap('bwr')  # bwr: min=blue, max=red

# ---- Folium マップ作成 ----
m = folium.Map(location=[35.5, 137.0], zoom_start=5)  # 日本付近を中心

for _, row in df.iterrows():
    price = row["ラーメン価格"]
    lat = row["lat"]
    lon = row["lon"]
    
    # 座標が取得できない場合はスキップ
    if pd.isnull(lat) or pd.isnull(lon):
        continue

    # 価格に応じて色を決定 (RGBAからHEXへ変換)
    rgba = cmap(norm(price))
    color_hex = colors.to_hex(rgba)

    # ポップアップ表示内容
    popup_text = f"{row['地域']}<br>ラーメン価格: {price} 円"

    # 正方形マーカー (RegularPolygonMarker) を配置
    folium.RegularPolygonMarker(
        location=[lat, lon],
        popup=popup_text,
        number_of_sides=4,    # 四角形
        radius=6,            # 大きさ
        color=color_hex,     # 枠線の色
        fill=True,
        fill_color=color_hex,
        fill_opacity=0.7
    ).add_to(m)

# 地図をHTMLで保存
m.save("ramen_price_map.html")

# Notebook環境の場合、m と入力するだけでも地図表示できる
m

GoogleのColaboratoryに貼り付けて実行しました

ラーメンの消費者物価を生成AIで地図にマッピング。赤が高くて、青が安い。 関東のほうがラーメン物価安いのか。FCの安い店が多いからかしら。意外。出典 e-stat 中華そば(外食)の消費者物価指数(2022年)

関東が安い!?

意外にも物価の高そうな関東のほうがラーメン価格が安いのですね。確かに最近は地方に行ってもラーメンは高い。とはいえ関東のラーメン屋さんも高い。そうするとフランチャイズ系の安いところが関東に多いんでしょうかね。

幸楽苑 490円 日高屋420円 あたりが価格を引き下げているんでしょうかね。

そんなところで

PVアクセスランキング にほんブログ村

データ

Posted by tomoyamurakami