論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
地図上の可視化
Geographic Visualization
可視化
別称: GIS可視化 / コロプレス図

🔖 キーワード索引

コロプレス図ヒートマップGeoPandasfoliumMapboxシェープファイルGeoJSON選挙地図都道府県境界緯度経度

別名・略称:GIS可視化 / コロプレス図

💡 30秒で分かる結論

地図上の可視化(Geographic Visualization):コロプレス図など地理データの可視化

📍 あなたが今見ているもの

都道府県データ(SSDSE)や市区町村データを 地図に重ねる と、 「西日本に偏っている」「太平洋ベルトに集中」 といったパターンが一目でわかります。 棒グラフや散布図では見えない 空間構造 を可視化できるのが地理的可視化の強みです。

🎨 直感で掴む

地理的可視化の代表手法

手法特徴
コロプレス図地域を値で塗り分け(最頻用)
バブルマップ点の大きさで量を表現
ヒートマップ密度を色のグラデーションで
フロー図移動量を矢印で表現
カートグラム面積を変形して量を表現

📐 定義 / 数式

地理的可視化は数式というより色の正規化と座標変換。

【値→色の正規化】
$$c(x) = \text{cmap}\!\left(\frac{x - x_{\min}}{x_{\max} - x_{\min}}\right)$$
線形正規化。 外れ値があれば log スケールや分位スケールを使う

🔬 記号・式を言葉で読み解く

シェープファイル
.shp + .shx + .dbf のセット。 地理データの古典フォーマット。
GeoJSON
JSON 形式の地理データ。 Web 親和性が高い。
座標参照系(CRS)
WGS84(EPSG:4326)が世界標準、 日本では JGD2011(EPSG:6668)も。
カラーマップ
順序データには viridis/plasma、 発散データには RdBu。 jet は推奨されない。
分類
等間隔、 分位、 自然分類(Jenks)など。 同じデータでも見え方が変わる。

🧮 実データで計算してみる

SSDSE 47 都道府県の死亡率をコロプレス図で:

  1. 国土数値情報から都道府県境界の GeoJSON を入手
  2. SSDSE-B-2026.csv から死亡率を取得
  3. 「都道府県コード」をキーに結合
  4. folium または GeoPandas で色塗り
  5. 凡例とタイトルを追加して完成

🐍 Python 実装

SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# folium でインタラクティブな日本地図
import folium
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)

m = folium.Map(location=[36, 138], zoom_start=5)

folium.Choropleth(
    geo_data='data/raw/japan_prefectures.geojson',
    data=df,
    columns=['都道府県コード', '死亡率'],
    key_on='feature.properties.code',
    fill_color='YlOrRd',
    legend_name='死亡率 (‰)'
).add_to(m)

m.save('output/japan_mortality.html')

⚠️ よくある落とし穴

⚠️ 色覚バリアの無視
赤緑カラーマップは色覚多様性で区別困難。 → viridis や RdBu を選ぶ。
⚠️ 面積バイアス
北海道は面積が広いが人口が少ない。 面積で錯覚しやすい。 → 人口あたりで割る、 カートグラムを使う。
⚠️ MAUP
Modifiable Areal Unit Problem。 集計単位の選び方で結果が変わる。
⚠️ 古い境界データ
市町村合併で境界が変わる。 データ年と境界年を合わせる。
⚠️ 座標系の混在
WGS84 と旧日本測地系が混在すると数百メートルずれる。

🌐 関連手法・この用語を使う論文

📄 地域分析論文
都道府県・市区町村別分析論文では地図可視化が結果提示に使われます。

🔎 地理可視化 ── 深掘り解説

地理可視化(Geographic Visualization) は、 緯度経度や行政区画と数値データを重ねて地理的傾向を可視化する手法。 都道府県別データの分析では必須。

🔖 キーワード索引(拡張)

地理可視化Geographic Visualizationmatplotlibplotlyseaborn可視化データ可視化SSDSE-B都道府県色覚多様性凡例軸ラベルタイトルアクセシビリティ

📐 適用判断式

$$ \text{Color}(i) = \text{cmap}\!\left(\frac{x_i - x_\min}{x_\max - x_\min}\right) $$

🧮 他可視化との比較

タイプ何を表すライブラリ
コロプレス領域の色で密度geopandas/plotly
バブルマップ点の大きさfolium/plotly
ヒートマップ点密度推定folium.HeatMap
フロー起点-終点の移動kepler.gl

🐍 Python 実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
# geopandas で都道府県コロプレス
import geopandas as gpd, pandas as pd, matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
df['高齢化率'] = df['A1301'] / df['A1101'] * 100
japan = gpd.read_file('data/raw/japan_pref.geojson')  # 別途要DL
merged = japan.merge(df[['Prefecture','高齢化率']], left_on='nam_ja', right_on='Prefecture')
fig, ax = plt.subplots(figsize=(8,10))
merged.plot(column='高齢化率', cmap='OrRd', legend=True, ax=ax)
plt.tight_layout(); plt.savefig('choropleth.png', dpi=150)
 1
 2
 3
 4
 5
 6
# plotly choropleth
import plotly.express as px
fig = px.choropleth(df, locations='Prefecture', color='高齢化率',
                    color_continuous_scale='OrRd',
                    locationmode='geojson-id', scope='asia')
fig.write_html('choropleth.html')
 1
 2
 3
 4
 5
 6
 7
# folium : インタラクティブな地図
import folium
m = folium.Map(location=[36, 138], zoom_start=5)
for _, r in df.iterrows():
    folium.CircleMarker([36, 138], radius=r['高齢化率']/5,
                       popup=f"{r['Prefecture']} {r['高齢化率']:.1f}%").add_to(m)
m.save('map.html')
 1
 2
 3
 4
 5
 6
# 緯度経度を入手済みの場合のバブルマップ
df['lat'] = [43.06,40.82,39.70,38.27,39.72,38.24,37.75]+[0]*40  # 一部抜粋
df['lon'] = [141.35,140.74,141.15,140.87,140.10,140.36,140.47]+[0]*40
import matplotlib.pyplot as plt
plt.scatter(df['lon'], df['lat'], s=df['高齢化率']*3, alpha=0.6)
plt.savefig('bubble.png', dpi=150)

⚠️ 落とし穴(地理可視化固有)

❌ 軸の範囲を恣意的に切る
「ゼロ起点でない棒グラフ」のような誤誘導につながります。 必ず範囲を明示。
❌ 色を増やしすぎる
5 色を超えると識別が困難になります。 グループ化やパターンを併用。
❌ 凡例・タイトル不足
情報の出典・期間・単位を必ず記載。
❌ 印刷・モノクロでの崩壊
デジタル前提のカラーパレットが印刷で識別不能になることがあります。

🔗 関連用語(拡張)

[並列]散布図 [並列]ヒストグラム [並列]ヒートマップ [並列]棒グラフ [並列]折れ線グラフ [並列]円グラフ [並列]レーダーチャート [並列]地理可視化 [並列]ネットワーク可視化 [発展]インタラクティブ可視化 [応用]相関係数 [応用]高齢化率 [発展]特徴量設計 [応用]標準化 [応用]正規性

📚 補足資料 — FAQ/追加コード/背景

FAQハンズオンSSDSE-BPython事例研究データ駆動教育

❓ よくある質問 (FAQ)

地理可視化はいつ使うのが最適?
地理的傾向を示したい時。 都道府県・市区町村別の比較が代表例。
色の選び方は?
色覚多様性を考え viridis、 cividis、 ColorBrewer の colorblind-safe スキームを推奨。
matplotlib と Plotly どちらで描く?
静的論文は matplotlib、 探索/ダッシュボードは Plotly。 同じデータで両方残すと再利用可。
軸ラベル・凡例の必須情報は?
単位・出典・期間・サンプル数を必ず付ける。
印刷時のサイズは?
図の高さ・幅は 6×4 inch 程度を基本に。 dpi=150 以上で印刷品質。

🧪 SSDSE-B-2026 を使った追加計算例

可視化対象ライブラリインタラクション
コロプレス領域別密度geopandas
バブル点ベース大小folium
ヒートマップ点密度推定folium
フロー起点-終点kepler.gl
3D高さ表現deck.gl

🐍 さらにコードを書く

都道府県コロプレス(folium)

 1
 2
 3
 4
 5
 6
 7
 8
 9
import folium, pandas as pd, json
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
df['高齢化率'] = df['A1301']/df['A1101']*100
m = folium.Map(location=[36,138], zoom_start=5)
# geojson は別ファイル想定
# folium.Choropleth(geo_data='japan.geojson', data=df,
#     columns=['Prefecture','高齢化率'], key_on='feature.properties.name_ja',
#     fill_color='OrRd', legend_name='aging').add_to(m)
m.save('map.html')

緯度経度の最低限ペア

 1
 2
 3
 4
 5
 6
lat_lon = {
    '東京都':(35.69,139.69),'大阪府':(34.69,135.50),
    '北海道':(43.06,141.35),'沖縄県':(26.20,127.68),
}
for p, (lat, lon) in lat_lon.items():
    print(p, lat, lon)

バブルマップ簡易版

 1
 2
 3
 4
 5
 6
import matplotlib.pyplot as plt
lats = [35.69, 34.69, 43.06, 26.20]
lons = [139.69, 135.50, 141.35, 127.68]
sizes = [200, 150, 180, 60]
plt.scatter(lons, lats, s=sizes, alpha=0.6, c='#E64A19')
plt.savefig('bubble.png', dpi=150)

💡 実務的アドバイス

🕰 歴史的背景・発展経緯

地理可視化 は古典的可視化手法の一つで、 統計可視化の標準教科書 (Tufte, Cleveland) でも扱われます。

matplotlib (2003-) は MATLAB ライクな API で広く普及。 ggplot2 (R, 2007) で文法 of graphics が確立。 Vega-Lite / Altair (2017) が宣言型表現を Web に持ち込みました。

近年は SVG/Canvas/WebGL の多層実装が普及し、 大規模データでもブラウザ可視化が可能に。 GPU 利用の Datashader, deck.gl が研究機関で活躍。