データソースとデータ構造

このサイトのデータ起源、ダム名寄せの方法、テーブル構造、欠損の分布、観測の粒度をまとめています。 外部公開データのみを利用し、独自の改変は最小限 (単位換算・名寄せ・正規化) です。

1. 使用データソース

優先度は同一ダムで複数ソースが値を持つときに採用するソースの並びです (大きい数字が優先)。

ソース提供データ更新頻度ライセンス優先度直近30日最終取得
tokyo-waterworks
東京都水道局 水源情報 (waterworks.metro.tokyo.lg.jp/suigen/suigen.html)
東京都の水源 15 ダム (利根川・荒川・多摩川 水系) の貯水量 (万m³) と貯水率 (%)。前日からの増減量。日次 (毎日 12:00 / 18:00 JST に取得)東京都オープンデータ (出典明示で再配布可)300
105
15
2026/05/13 0:00 JST
jwa-junpo
水資源機構 旬報 (water.go.jp/honsya/honsya/suigen/junpo/index.html)
水資源機構が管理する全国 26 ダムの利水容量・貯水量 (千m³)・貯水率 (現在 / 平年 / 平年比)。10 日毎 (毎月 1 / 11 / 21 日 JST 公表; 取得は日次でポーリング)統計法に基づく公的統計 (出典明示で再配布可)290
78
26
2026/05/11 0:00 JST
synthetic
当サイトの内部生成 (シード値)
上流フィードが未接続のダム向けにグラフ表示用の補完値を生成。実観測値ではない旨を UI で明示。不変 (一括投入後の更新なし)CC0 (出典明示は任意)200
1,435,902
2,694
2026/05/05 17:00 JST
ndi
国土交通省 国土数値情報 (W01: 河川, W07: ダム, A21: 流域)
マスタデータの土台。位置 (緯度経度), 都道府県, 河川, 流域, 総貯水容量, 堤高, 竣工年。年次 (毎年初旬に最新版へ差し替え)出典明示で再配布可 (政府標準利用規約 2.0 互換)80
damnet
一般財団法人日本ダム協会「ダム便覧」 (dambinran.damnet.or.jp)
利水容量・有効貯水容量, 目的, 型式, 堤頂長, 流域面積, 湛水面積, 着工年, 事業者, 施工者, ダム湖名, 写真。月 1 回 (master:refresh:damnet cron / 毎月 5 日 03:00 UTC)個別データの引用・改変は出典明示で可。一括 DL は要相談。50
wikipedia
ja.wikipedia.org REST API (pageimages prop)
Damnet に写真がない場合のフォールバック。記事サムネイル URL のみ。月 1 回 (images:refresh:wikipedia cron / 毎月 2 日 05:00 UTC)CC-BY-SA 4.0 (各ページの著作者に従う)未取得
gsi
国土地理院 標高 API (cyberjapandata.gsi.go.jp/general/dem)
地点標高 (DEM10B / 5A 統合)。緯度経度から数 m 精度で取得。月 1 回 (master:refresh:elevation cron)出典明示で利用可未取得

2. ダム名寄せ (Damnet ↔ 国土数値情報)

土台は国土数値情報 (NDI) の 2,749 行のダムマスタ。これに対しダム便覧 (Damnet) の 2,600 件をぶつけて属性を埋めています。両者を結合する一意 ID は無いため、 以下の手順でマッチさせています。

  1. 名前の正規化: NFKC → 「(再)/(元)/(新)」剥離 → 「ダム/貯水池/池」接尾辞剥離 → 小文字化。再開発前/後で別行になっている NDI 側のダム (175 件 該当) を 1 つにまとめるための処理です。
  2. キー生成: prefCode | normalizeName(name)。都道府県を必ず一致させることで、同名異所のダム (例: 同じ「中央ダム」が複数県に存在) の誤接続を防止。
  3. 多対 1 マッチ: NDI 側に同キーが複数行ある場合 (再/元 のペアなど) は、 Damnet ID は最初の 1 行にだけ付与し、属性 (利水容量・諸元) はグループ全行に backfill します (Damnet の unique 制約に違反しないため)。
  4. 属性の上書きルール: COALESCE(damnet, 既存)。NDI が既に値を持つカラムは上書きせず、空欄だけ Damnet で埋めます。 数値ソースの差分を抑えるためで、両ソースが矛盾するときは NDI が優先。
  5. slug 修復: 仮 slug (dam-NNN-PP) のダムは Damnet から得た 読み仮名を slug 化して置き換えます (例: dam-716-14 doushi-14)。
実装: apps/web/bin/match_damnet.ts / 検収レビュー待ちの曖昧マッチは match_review テーブルに堆積。

具体例

実際のデータで遭遇したパターンと、それぞれを正規化ロジックがどう同じキーに落とし込んでいるかの例。

シンプルな接尾辞剥離
NDI 側
道志ダム
Damnet 側
道志ダム
正規化キー
どうし

「ダム」を剥がして prefCode=14 (神奈川) と組み合わせて一致 (Damnet ID 0699)。利水容量 616 千 m³ がそのまま流入。

再開発バリアント (元/再 を統合)
NDI 側
佐久間(元)/佐久間(再)
Damnet 側
佐久間ダム
正規化キー
さくま

NDI が再開発前後を別行で持つが Damnet は 1 件。両方に同じ利水容量 (221.6 百万 m³) を backfill。Damnet ID は片方だけに付与。

新しく作り直した dam
NDI 側
新桂沢(再)
Damnet 側
新桂沢ダム
正規化キー
しんかつらざわ

「(再)」を剥離。新桂沢は元の桂沢ダムを嵩上げした再開発で、Damnet 上は別エントリ。

NFKC 正規化 (全半角ゆれ)
NDI 側
夕張シューパロ(再)
Damnet 側
夕張シューパロダム
正規化キー
ゆうばりしゅうぱろ

全角カタカナはそのまま、(再)剥離 + ダム剥離。pref=01 (北海道) で 1 件にマッチ。

貯水池 / 池 の表記ゆれ
NDI 側
御大典池
Damnet 側
御大典池
正規化キー
みのりがい

「池」「貯水池」もダムと同じ扱いで剥離。読み仮名「みのりがい」で slug を再生成。

同名異所
NDI 側
中央ダム (北海道) / 中央ダム (福島県)
Damnet 側
中央ダム × 2 件
正規化キー
ちゅうおう

名前のみだと衝突するが prefCode を必ずキーに含めるので誤接続しない (01 と 07 で別キー)。

名前一致せず(マッチ失敗)
NDI 側
表沢堤
Damnet 側
(該当なし)
正規化キー
おもてざわ-?

「堤」は接尾辞剥離対象外で、Damnet にも当該名なし。skippedNotFound として 利水容量 NULL のまま残る。

Damnet ID 衝突 (片方だけ採用)
NDI 側
鶴田(元) / 鶴田(再)
Damnet 側
鶴田ダム
正規化キー
つるた

どちらも同じ Damnet 行を参照。external_ids.damnet=0XXX は最初の 1 行にだけ付与され、もう一方は skippedConflict としてスキップ (ただし利水容量等の属性は両方に適用)。

3. データ構造 (ER 図)

中心は dams (マスタ) と observations (時系列)。 外部の生データ (raw_snapshots) は監査用に S3 へ保管し、解析後の値だけを observations に書き戻す Lakehouse 風の構成です。

ER 図: dams を中心としたデータモデルwatersheds水系 (一級/二級/その他)id (PK)code, slug, namekindboundary (geog)rivers河川id (PK)name, watershed_id (FK)match_review名寄せ保留source_id + ext_id (PK)candidate_dam_ids[]best_dam_id, confidenceresolved_dam_id, _atdamsダムマスタid (PK), slugname, name_kanapref_code (CHAR(2))watershed_id (FK)river_id (FK)location (geog Point)elevation_mtype, manager, purposesheight_m, crest_length_mtotal_capacity_m3active_capacity_m3effective_capacity_m3flood_capacity_m3watershed_area_km2reservoir_area_km2completed_yearimage_urlexternal_ids (jsonb)created_at, updated_atobservations時系列 (TimescaleDB hypertable)dam_id (FK) + observed_at (PK)storage_volume_m3storage_rateinflow_m3s, outflow_m3swater_level_mquality_flagsource_id, raw_snapshot_id (FK)cont. agg → obs_daily, obs_monthlyraw_snapshots生バイナリの監査ログid (PK), source_id, target_idfetched_at, http_statusetag, storage_uri (s3://)bytes, content_typeparse_status

線種: 実線 = FK 結合 / 点線 = ソフトリンク (jsonb 経由)。観測テーブルは TimescaleDB の hypertable で時間方向に自動分割。

4. ダムマスタの主なカラム

dams テーブルは 2,749 行。出処を併記しています。

カラム意味主な出処充足率
slugURL 断片 (例: doushi-14)。読み仮名+都道府県コードから生成。自動生成100 %
name日本語ダム名NDI100 %
name_kana読み仮名 (ひらがな)Damnet88.1 %
pref_codeJIS 都道府県コード (01〜47)NDI100 %
location緯度経度 (PostGIS geography Point, EPSG:4326)NDI100 %
elevation_m標高 (メートル)。緯度経度を国土地理院 DEM API に問い合わせ。国土地理院100 %
watershed_id一級 / 二級水系 ID (FK to watersheds)NDI A21 + 空間結合100 %
manager管理者 (例: 国土交通省, 神奈川県企業庁)NDI / Damnet79 %
type型式 (重力式コンクリート, アースフィル, ロックフィル …)Damnet
height_m堤高 (m)NDI / Damnet100.0 %
total_capacity_m3総貯水容量NDI100 %
active_capacity_m3利水容量 = 貯水率の分母として採用Damnet87.0 %
effective_capacity_m3有効貯水容量 = 総貯水量 − 堆砂容量Damnet (active と同値で mirror)87.0 %
completed_year竣工年NDI / Damnet91.9 %
purposes目的コード (F=洪水調節, N=不特定, A=灌漑, W=上水, I=工業, P=発電, S=消流雪)Damnet88.1 %
watershed_area_km2流域面積Damnet88.1 %
image_urlダム写真 (Damnet 優先, Wikipedia フォールバック)Damnet / Wikipedia43.9 %
external_idsソース別の外部 ID (jsonb)-damnet 87.1 %

5. 欠損データの分布

利水容量を例に、容量帯ごとの欠落率を示します。大規模ダムほどカバレッジが高く、 10万 m³ 未満の小規模ダム (農業用ため池, 砂防ダム等) で Damnet 未収録が顕著です。

容量帯ダム数欠落 (利水容量)欠落率
10億 m³ 以上200.0 %
1〜10億 m³5411.9 %
1000万〜1億 m³41281.9 %
100〜1000万 m³845182.1 %
10〜100万 m³942848.9 %
10万 m³ 未満49424549.6 %

欠落の主因: ① Damnet 未収録 (主に 10 万 m³ 未満の小規模ダム), ② 名寄せできなかった同名・別字ゆれ (match_review に堆積)。再開発バリアント ((再)/(元)) は 名寄せ時に統合済み。

6. 観測値の粒度

観測対象ダム数
2,694
観測総数
6,776,451
直近 24h
15
期間
2021-05-06 JST 〜 2026-05-13 JST
  • 原始粒度: 1 時間。過去データの定期バッチ取込時にこの粒度で保存します (リアルタイム監視ではありません)。
  • カラム: storage_volume_m3, storage_rate, inflow_m3s, outflow_m3s, water_level_m, quality_flag。欠落カラムは NULL (誤値の補間や想定値補完はしない)。
  • 集計: TimescaleDB の continuous aggregate で日次 (obs_daily) と月次 (obs_monthly) を自動更新。グラフ・統計はこの集計を読みます。
  • retention: 原始データは無期限保持 (容量効率は Timescale の 列圧縮)。S3 上の生スナップショット (raw_snapshots) も無期限。
  • 品質フラグ: quality_flag で「正常 / 推定 / 観測停止 / 異常値」を区別。利用者はquality_flag = 'ok' のみで分析するのが安全。
  • 提供範囲: 本サービスは 履歴データに特化 しており、現在時刻の値 (リアルタイム) は再配信していません。最新値が必要な場合は 川の防災情報 などの一次情報源を併用してください。