Shikata Ga Nai

Private? There is no such things.

17. 地理空間データの分析 〜ロンドンのパブ&Starbucksデータで実践〜

Hello there, ('ω')ノ

📌 1. 地理空間データとは?

地理空間データ とは、緯度・経度の座標情報を持つデータのことです。
📌 例: ロンドンのパブデータ

Pub Name Latitude Longitude
The Red Lion 51.5133 -0.1360
The King's Head 51.5120 -0.1245
The White Hart 51.5175 -0.1438

このデータを使って、地図上に店舗の位置をプロットできます!


📌 2. データの読み込み

まずは、ロンドンの パブデータ を pandas を使って読み込みます。

import pandas as pd

# データの読み込み
pubs = pd.read_csv("/kaggle/input/every-pub-in-england/open_pubs.csv")  

# データの確認
print(pubs.head())

データには、パブ名・緯度(Latitude)・経度(Longitude)が含まれている!


📌 3. 地図上にプロット(Foliumを使用)

Folium を使って、ロンドンのパブを地図上に可視化します!

✅ 地図にパブの位置をプロット

import folium

# ロンドン中心部の座標
london_map = folium.Map(location=[51.5074, -0.1278], zoom_start=12)

# 🔹 最初の5つのパブの位置をプロット
for _, row in pubs.head(200).iterrows():  # .head(5) を追加
    folium.Marker(
        location=[row["latitude"], row["longitude"]],  # 数値型に変換されたデータを使用
        popup=row["name"],  
        icon=folium.Icon(color="blue", icon="info-sign")
    ).add_to(london_map)

# 地図を表示
london_map

📌 このコードで、ロンドンの地図上にパブの位置をマーカー表示できます!
folium.Map() でロンドンの地図を作成
folium.Marker() で各パブの位置をプロット

ロンドンのパブがどのエリアに多いのか、一目で分かる!


📌 4. ヒートマップで密集度を分析

次に、パブの密集度を ヒートマップ で可視化します!

✅ ヒートマップを作成

from folium.plugins import HeatMap
import pandas as pd

pubs["latitude"] = pd.to_numeric(pubs["latitude"], errors="coerce")  # 変換できない値は NaN
pubs["longitude"] = pd.to_numeric(pubs["longitude"], errors="coerce")  # 変換できない値は NaN

pubs = pubs.dropna(subset=["latitude", "longitude"])

# ヒートマップを作成
heat_data = pubs[["latitude", "longitude"]].values.tolist()
heatmap = folium.Map(location=[51.5074, -0.1278], zoom_start=12)
HeatMap(heat_data).add_to(heatmap)

# 地図を表示
heatmap

📌 このコードで、ロンドンのパブが密集しているエリアが分かります!
HeatMap() を使うと、データの密集度を可視化できる!
赤い部分がパブの密集エリア、青い部分は少ないエリア

どのエリアにパブが集中しているのか、簡単に分析できる!


📌 5. Starbucksの店舗データを分析

次に、ロンドンの Starbucksの店舗データ を読み込み、地図上にプロットします。

✅ Starbucksデータの読み込み

# Starbucksのデータを読み込み
starbucks = pd.read_csv("/kaggle/input/store-locations/directory.csv")  

# データの確認
print(starbucks.head())

データには Starbucks の店舗名・緯度・経度が含まれている!


✅ Starbucksの店舗を地図上にプロット

# ロンドンの地図
london_map = folium.Map(location=[51.5074, -0.1278], zoom_start=12)

# Starbucksの位置を最大10件プロット
for _, row in starbucks.head(100).iterrows():  # 先頭10件のみ
    folium.Marker(
        location=[row["Latitude"], row["Longitude"]],
        popup=row["Store Name"],
        icon=folium.Icon(color="green", icon="coffee")
    ).add_to(london_map)

# 地図を表示
london_map

folium.Marker() を使って Starbucks の位置を可視化!
ロンドンのどのエリアに Starbucks が多いのか、一目で分かる!


📌 6. Starbucksとパブのエリア比較

パブと Starbucks の位置を比較してみましょう!

✅ 両者を同じ地図にプロット

# ロンドンの地図
london_map = folium.Map(location=[51.5074, -0.1278], zoom_start=12)

# パブの位置(青色)
for _, row in pubs.head(100).iterrows():  # 先頭10件のみ
    folium.CircleMarker(
        location=[row["latitude"], row["longitude"]],
        radius=2,
        color="blue",
        fill=True,
        fill_color="blue",
        fill_opacity=0.5
    ).add_to(london_map)

# Starbucksの位置(緑色)
for _, row in starbucks.head(100).iterrows():  # 先頭10件のみ
    folium.CircleMarker(
        location=[row["Latitude"], row["Longitude"]],
        radius=2,
        color="green",
        fill=True,
        fill_color="green",
        fill_opacity=0.5
    ).add_to(london_map)

# 地図を表示
london_map

青色:パブの位置
緑色:Starbucksの位置

ロンドンの中心部にパブと Starbucks の両方が集中していることが分かる!


📌 7. 競争エリアを分析

パブと Starbucks の位置が近いエリアを見つけ、競争が激しいエリアを分析できます。

✅ 近い距離にある店舗を見つける

from sklearn.neighbors import NearestNeighbors
import numpy as np

# データを NumPy 配列に変換
pubs_locations = pubs[["latitude", "longitude"]].values
starbuck_location = starbucks[["Latitude", "Longitude"]].values

print(np.isnan(starbucks_locations).sum())  # NaN の数を確認

starbucks_locations = np.nan_to_num(starbucks_locations, nan=np.nanmean(starbucks_locations, axis=0))

print(np.isnan(starbucks_locations).sum())  # NaN の数を確認

# 近くの Starbucks を探す
nbrs = NearestNeighbors(n_neighbors=1, algorithm="ball_tree").fit(starbucks_locations)
distances, indices = nbrs.kneighbors(pubs_locations)

# 競争が激しいパブ(近くにStarbucksがある)
pubs["Nearest_Starbucks_Distance"] = distances
print(pubs.sort_values("Nearest_Starbucks_Distance").head(10))

📌 このコードで、Starbucks に近いパブを特定できる!
最近傍探索(Nearest Neighbors)を使い、最も近い Starbucks との距離を計算!
競争が激しいエリアを特定し、新しい店舗戦略を立てる!


🎯 まとめ

地理空間データを可視化し、ロンドンのパブと Starbucks の分布を分析!
Folium を使って、位置情報をマッピング!
ヒートマップを活用して、密集エリアを特定!
Nearest Neighbors を使って、競争エリアを分析!

Best regards, (^^ゞ