データソースとデータ構造
このサイトのデータ起源、ダム名寄せの方法、テーブル構造、欠損の分布、観測の粒度をまとめています。 外部公開データのみを利用し、独自の改変は最小限 (単位換算・名寄せ・正規化) です。
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 は無いため、 以下の手順でマッチさせています。
- 名前の正規化:
NFKC → 「(再)/(元)/(新)」剥離 → 「ダム/貯水池/池」接尾辞剥離 → 小文字化。再開発前/後で別行になっている NDI 側のダム (175 件 該当) を 1 つにまとめるための処理です。 - キー生成:
prefCode | normalizeName(name)。都道府県を必ず一致させることで、同名異所のダム (例: 同じ「中央ダム」が複数県に存在) の誤接続を防止。 - 多対 1 マッチ: NDI 側に同キーが複数行ある場合 (再/元 のペアなど) は、 Damnet ID は最初の 1 行にだけ付与し、属性 (利水容量・諸元) はグループ全行に backfill します (Damnet の unique 制約に違反しないため)。
- 属性の上書きルール:
COALESCE(damnet, 既存)。NDI が既に値を持つカラムは上書きせず、空欄だけ Damnet で埋めます。 数値ソースの差分を抑えるためで、両ソースが矛盾するときは NDI が優先。 - slug 修復: 仮 slug (
dam-NNN-PP) のダムは Damnet から得た 読み仮名を slug 化して置き換えます (例:dam-716-14→doushi-14)。
apps/web/bin/match_damnet.ts / 検収レビュー待ちの曖昧マッチは match_review テーブルに堆積。具体例
実際のデータで遭遇したパターンと、それぞれを正規化ロジックがどう同じキーに落とし込んでいるかの例。
道志ダム道志ダムどうし「ダム」を剥がして prefCode=14 (神奈川) と組み合わせて一致 (Damnet ID 0699)。利水容量 616 千 m³ がそのまま流入。
佐久間(元)/佐久間(再)佐久間ダムさくまNDI が再開発前後を別行で持つが Damnet は 1 件。両方に同じ利水容量 (221.6 百万 m³) を backfill。Damnet ID は片方だけに付与。
新桂沢(再)新桂沢ダムしんかつらざわ「(再)」を剥離。新桂沢は元の桂沢ダムを嵩上げした再開発で、Damnet 上は別エントリ。
夕張シューパロ(再)夕張シューパロダムゆうばりしゅうぱろ全角カタカナはそのまま、(再)剥離 + ダム剥離。pref=01 (北海道) で 1 件にマッチ。
御大典池御大典池みのりがい「池」「貯水池」もダムと同じ扱いで剥離。読み仮名「みのりがい」で slug を再生成。
中央ダム (北海道) / 中央ダム (福島県)中央ダム × 2 件ちゅうおう名前のみだと衝突するが prefCode を必ずキーに含めるので誤接続しない (01 と 07 で別キー)。
表沢堤(該当なし)おもてざわ-?「堤」は接尾辞剥離対象外で、Damnet にも当該名なし。skippedNotFound として 利水容量 NULL のまま残る。
鶴田(元) / 鶴田(再)鶴田ダムつるたどちらも同じ Damnet 行を参照。external_ids.damnet=0XXX は最初の 1 行にだけ付与され、もう一方は skippedConflict としてスキップ (ただし利水容量等の属性は両方に適用)。
3. データ構造 (ER 図)
中心は dams (マスタ) と observations (時系列)。 外部の生データ (raw_snapshots) は監査用に S3 へ保管し、解析後の値だけを observations に書き戻す Lakehouse 風の構成です。
線種: 実線 = FK 結合 / 点線 = ソフトリンク (jsonb 経由)。観測テーブルは TimescaleDB の hypertable で時間方向に自動分割。
4. ダムマスタの主なカラム
dams テーブルは 2,749 行。出処を併記しています。
| カラム | 意味 | 主な出処 | 充足率 |
|---|---|---|---|
slug | URL 断片 (例: doushi-14)。読み仮名+都道府県コードから生成。 | 自動生成 | 100 % |
name | 日本語ダム名 | NDI | 100 % |
name_kana | 読み仮名 (ひらがな) | Damnet | 88.1 % |
pref_code | JIS 都道府県コード (01〜47) | NDI | 100 % |
location | 緯度経度 (PostGIS geography Point, EPSG:4326) | NDI | 100 % |
elevation_m | 標高 (メートル)。緯度経度を国土地理院 DEM API に問い合わせ。 | 国土地理院 | 100 % |
watershed_id | 一級 / 二級水系 ID (FK to watersheds) | NDI A21 + 空間結合 | 100 % |
manager | 管理者 (例: 国土交通省, 神奈川県企業庁) | NDI / Damnet | 79 % |
type | 型式 (重力式コンクリート, アースフィル, ロックフィル …) | Damnet | — |
height_m | 堤高 (m) | NDI / Damnet | 100.0 % |
total_capacity_m3 | 総貯水容量 | NDI | 100 % |
active_capacity_m3 | 利水容量 = 貯水率の分母として採用 | Damnet | 87.0 % |
effective_capacity_m3 | 有効貯水容量 = 総貯水量 − 堆砂容量 | Damnet (active と同値で mirror) | 87.0 % |
completed_year | 竣工年 | NDI / Damnet | 91.9 % |
purposes | 目的コード (F=洪水調節, N=不特定, A=灌漑, W=上水, I=工業, P=発電, S=消流雪) | Damnet | 88.1 % |
watershed_area_km2 | 流域面積 | Damnet | 88.1 % |
image_url | ダム写真 (Damnet 優先, Wikipedia フォールバック) | Damnet / Wikipedia | 43.9 % |
external_ids | ソース別の外部 ID (jsonb) | - | damnet 87.1 % |
5. 欠損データの分布
利水容量を例に、容量帯ごとの欠落率を示します。大規模ダムほどカバレッジが高く、 10万 m³ 未満の小規模ダム (農業用ため池, 砂防ダム等) で Damnet 未収録が顕著です。
| 容量帯 | ダム数 | 欠落 (利水容量) | 欠落率 |
|---|---|---|---|
| 10億 m³ 以上 | 2 | 0 | 0.0 % |
| 1〜10億 m³ | 54 | 1 | 1.9 % |
| 1000万〜1億 m³ | 412 | 8 | 1.9 % |
| 100〜1000万 m³ | 845 | 18 | 2.1 % |
| 10〜100万 m³ | 942 | 84 | 8.9 % |
| 10万 m³ 未満 | 494 | 245 | 49.6 % |
欠落の主因: ① Damnet 未収録 (主に 10 万 m³ 未満の小規模ダム), ② 名寄せできなかった同名・別字ゆれ (match_review に堆積)。再開発バリアント ((再)/(元)) は 名寄せ時に統合済み。
6. 観測値の粒度
- 原始粒度: 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'のみで分析するのが安全。 - 提供範囲: 本サービスは 履歴データに特化 しており、現在時刻の値 (リアルタイム) は再配信していません。最新値が必要な場合は 川の防災情報 などの一次情報源を併用してください。