ふくふくHukuhuku LLC
EP.12Open Data 10分公開: 更新:

商圏分析に使えるオープンデータ:人口・行政区域・顧客データの重ね合わせ

商圏分析のデータを目的別に比較。e-Statと行政区域の使い分け、地域コードでの結合、人口千人あたりの顧客数を架空データと模式図で確認できます。

#商圏分析#オープンデータ#地域分析#データ連携
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

顧客数が多い地域は、人口そのものが多い地域かもしれません。商圏を考えるときは、自社の顧客・売上と、地域の人口や世帯などを同じ単位で比べる必要があります。このページではを使う入口として、統計と行政区域を選び、地域コードで結合し、結果を確認する流れを示します。実在地域の需要予測ではなく、架空データで検証方法を学ぶためのサンプルです。

選び方の要点

人口・世帯などの地域統計はe-Stat、地域の範囲を地図で扱うには国土数値情報の行政区域などが候補です。両者と自社データの地域・年次・単位を合わせ、結合できなかった行も別に確認します。

比較から実装の判断まで進められるよう、提供元・入力と出力・保存する情報・確認が必要なケースを共通の順序でまとめています。まず 架空データのサンプル一式をダウンロードして、処理の結果を確かめることもできます。

目的に合うデータを選ぶ

最初に決めるのは、どのデータを買うかではなく、何を比較したいかです。既存店の商圏を見直すなら顧客の分布と周辺人口、配送拠点を考えるなら訪問先と移動時間、観光需要を読むなら季節や滞在者の違いが必要になります。人口だけであらゆる商圏を説明しようとせず、今回の判断に関係する分母と対象期間を一つずつ選びます。

e-Statには人口、世帯、事業所などの統計がありますが、全てが同じ年次・地域の細かさでそろうわけではありません。統計表の調査名、対象年、単位、分類、秘匿の扱いを確認します。ダウンロードできる表が全て同じAPIで取得できるとも限らないため、目的の表を画面で確認してから取得方法を選びます。アプリケーションIDが必要な場合は公開コードに埋め込みません。

行政区域の図形は、地域の形を示すための材料です。人口を含む統計表とは別に取り込み、対応する地域コードでつなぎます。境界の基準日と統計の対象年が違うと、合併や区割り変更の影響が出る場合があります。データが結合できたことだけで正しい比較と判断せず、地域の意味と時点が一致するかを確認する工程を設けましょう。

2026年10月11日確認。詳細な仕様・利用条件は末尾の公式資料を参照。
知りたいことデータ候補取得方法注意点
地域の人口・世帯・事業所e-Statの該当統計表表のダウンロード/対象表はAPIで取得。APIは登録・IDが必要統計名、年次、地域単位、単位、秘匿値を確認
地域の位置・形国土数値情報・行政区域対象年の地理データをダウンロード人口は別途結合。自治体境界に未確定・暫定の箇所がある
自社顧客の分布社内の顧客・取引台帳必要な項目だけ抽出し、地域単位で集計顧客数と購入回数を混同しない。対象期間をそろえる
時間帯による需要の違い適切な人流・来訪者データ提供元ごとに対象と契約・利用条件を確認居住人口とは異なる。人口比だけで代替しない

入力と出力をサンプルで確かめる

3つの架空地域について、人口と顧客数を地域コードで結合します。顧客数÷人口×1,000で指標を出し、人口がゼロなら算出対象外にします。地図画像は結果の模式図であり、実在地域の形・人口・来訪者を示すものではありません。

実行する前に

全て架空データです。Python 3があれば、APIキー・追加ライブラリ・外部通信なしで実行できます。ZIPを展開し、そのフォルダで下のコマンドを実行してください。入力はinput.jsonにあります。結果は画面に出るだけで、自動保存・送信はしません。

展開したフォルダで実行
Bash
python3 example.py# 結果をローカルファイルに保存する場合python3 example.py > result.json
同梱example.pyの全文。入力形式はサンプル専用です。
Python
import jsonfrom pathlib import Path
# 全て架空。人口と顧客集計を地域コードで結合する検証です。data = json.loads(Path(__file__).with_name("input.json").read_text(encoding="utf-8"))areas = {row["area_code"]: row for row in data["areas"]}counts = {}for row in data["customers"]:    counts[row["area_code"]] = counts.get(row["area_code"], 0) + row["count"]result = []for code, area in areas.items():    count = counts.get(code, 0)    population = area["population"]    rate = round(count / population * 1000, 1) if population > 0 else None    result.append({"area_code": code, "population": population,                   "customers": count, "customers_per_1000_residents": rate,                   "status": "ok" if rate is not None else "no_denominator"})unmatched = sorted(set(counts) - set(areas))print(json.dumps({"areas": result, "unmatched_codes": unmatched}, ensure_ascii=False, indent=2))
同梱の架空データを実行した出力
JSON
{  "areas": [    {      "area_code": "DEMO-A",      "population": 1000,      "customers": 20,      "customers_per_1000_residents": 20.0,      "status": "ok"    },    {      "area_code": "DEMO-B",      "population": 2000,      "customers": 10,      "customers_per_1000_residents": 5.0,      "status": "ok"    },    {      "area_code": "DEMO-C",      "population": 0,      "customers": 0,      "customers_per_1000_residents": null,      "status": "no_denominator"    }  ],  "unmatched_codes": [    "DEMO-X"  ]}
架空地域Aは人口千人あたり顧客20人、Bは5人、Cは人口0のため算出対象外。実際の地図ではない模式図。

地域Aは顧客20人・人口1,000人なので人口千人あたり20人、地域Bは顧客10人・人口2,000人なので5人になります。地域Cは人口ゼロのためnullです。地域コードDEMO-Xの顧客2人は結合できず、未対応コードとして出力します。分母がない値をゼロに置き換えたり、結合できない顧客を集計から黙って消したりしないことを確認できます。

この比率は売上、シェア、出店の成功率を表しません。顧客が地域外から来訪する業態では、居住人口を分母にすること自体が目的に合わない可能性があります。実データでは顧客の重複、購入の対象期間、店舗間での重複計上も確認します。計算式が動いた後に、その指標を意思決定に使ってよいかを現場の担当者と確かめることが必要です。

何をどこに保存するか

情報本実装での保存先の例残すべき状態
元の統計・境界情報取得した版ごとの保存領域出典、利用条件、対象年、取得日時を残す
地域コードと集計値分析用の集計表地域コードは文字列。母数ゼロ・秘匿・未対応を区別
顧客住所などの原票権限を絞った社内領域公開する図やダウンロード物には含めない

実際の地図を作るときは、まず数地域の値を表と地図の両方で照合します。色が濃いことを良い結果と決めつけず、色の意味、単位、対象年、未集計の地域を凡例に表示します。更新時に色の区切りが毎回変わると時系列の比較が難しくなるため、比較の目的に合わせて表示基準を固定するかどうかも決めます。模式図はその説明用で、位置の正確さを検証するものではありません。

取り込みでは、地域コードの桁や先頭のゼロ、政令市と区の扱い、自治体名変更などを確認します。人口表と顧客集計の両方に複数行がある状態で結合すると、件数が膨らむことがあります。対象の分類と年度を絞って地域ごとに一行にし、結合前後の件数と合計値を照合します。未対応地域を確認リストに出すことも、分析画面と同じくらい重要です。

本格的な試作では、取り込む統計表と対象地域、更新の間隔、比較指標、表示する地図、出力する集計表を先に決めます。顧客住所を外部の変換サービスへ送る必要がある場合は、送信範囲や保存条件も確認します。最初は社内で集計した地域別の件数だけでも、どんな図や指標が役に立つかを相談できます。小さな地域や少人数の集計を公開する場合は、個人が推測されないかも確認します。

導入前に確認する制約

  • 対象年・地域範囲・単位が異なる表をそのまま比較しない
  • 欠損・秘匿・分母ゼロを同じゼロとして塗りつぶさない
  • 公的統計と自社データはそれぞれの利用条件・権限に従う。一律に同じ条件になるとは限らない
  • 行政界と実際の来店圏は異なる。出店判断や需要予測を保証しない

自社の業務で試すには

「人口と顧客データを重ねた商圏分析を試作したい」という段階から相談できます。入力する項目、期待する出力、更新頻度、使う人、確認待ちになった場合の操作を整理すると、必要な試作範囲を具体的にできます。実データや秘密鍵をフォームに貼る必要はありません。まず匿名化した項目と困っている作業を教えてください。

データ活用の試作を相談する

この記事のテーマで相談する — 内容を確認して進め方を検討します。フォームを開いたり送信したりするだけで有料発注になることはありません。

関連する実装ガイド

確認した一次資料

比較の確認日は2026年10月11日です。提供元の利用条件・項目・認証・制限は変更されることがあるため、実装開始時にも公式資料を確認してください。このページのサンプルは結合や例外処理の動きを確かめるためのもので、外部APIの接続成功、実データの精度、事業成果を示すものではありません。

よくある質問

サンプルを動かすのにAPIキーは必要ですか?
不要です。架空データとPython 3の標準ライブラリで動き、外部通信を行いません。実APIへの接続試験は含みません。
実際の顧客データを送る必要はありますか?
サンプル実行や最初の相談には必要ありません。項目名、件数の目安、実現したい処理から相談できます。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

REVISION HISTORY

公開: 2026-05-10
  1. 2026-10-11内容拡充提供元の比較、架空データで動くサンプル、保存項目と実装の確認点を追加。取得範囲・更新条件の断定を見直しました。
シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp