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, (^^ゞ