日本語 | English
日本の電力需給実績を、ヒートマップ、時系列グラフ、積み上げグラフ、構成比グラフで確認する静的 Web アプリケーションです。
このリポジトリは、月別 CSV を dist/data/rowdata-all.json に変換し、ブラウザ上で読み込んで ECharts に描画します。サーバーサイド API は使わず、集計と表示はクライアント側で完結します。
GitHub Pages の静的 Web サイトホスティングで公開しています。
https://berochlu.github.io/power-demand-chart/
main ブランチへの push をトリガーに、GitHub Actions が npm install、npm run build、dist の GitHub Pages デプロイを自動実行します。
- 月単位で対象期間を選択できます。
電力需要、原子力、地熱、水力、火力、バイオマス、風力実績、風力抑制量、太陽光実績、太陽光抑制量、揚水を表示できます。- 1時間、1日、1か月、1年の粒度に集計して表示できます。
- ECharts の DataZoom で期間を拡大、移動できます。
- ECharts の toolbox からデータ表示、グラフ形式切り替え、画像保存ができます。
mathjsの単位フォーマットで、合計値や軸ラベルをMWh、GWh、TWhなど読みやすい単位に整形します。
画面下部の左右ボタンで 2 つのパネルを切り替えます。
1ページ目は、単一項目の月内または期間内推移を見る画面です。
- 上段左の条件で、対象月と項目を選択します。
- 上段中央に、日付 x 時刻のヒートマップを表示します。
- 上段右に、同じ月の時系列グラフを表示します。
- 下段左の条件で、開始月、終了月、項目、集計単位(1時間、1日、1か月、1年)を選択します。
- 下段右に、選択期間の時系列グラフを表示します。
2ページ目は、電力需要と各電源項目の関係を見る画面です。
- 左の条件で、開始月、終了月、集計単位(1時間、1日、1か月、1年)を選択します。
- 上段に、電力需要エネルギー別割合を表示します。
- 下段に、電力需要エネルギー別積み上げグラフを表示します。
- 凡例をクリックすると、項目ごとの表示と非表示を切り替えられます。
- 左側には、表示中データの項目別合計値を表示します。
現行の dist/data/rowdata-all.json には、次のデータが含まれています。
| 項目 | 内容 |
|---|---|
| 収録レコード数 | 66,527 |
| 日付範囲 | 2018-10-01 から 2026-05-31 |
| 粒度 | 1時間 |
| 単位 | MWh |
| 入力ファイル | rawdata/data/*_10エリア計.csv |
| 生成ファイル | dist/data/rowdata-all.json |
CSV のヘッダーには「一般送配電事業者各社の公表データを元に作成」と記載されています。元 CSV は CP932/Shift_JIS で、変換スクリプトは xlsx に codepage: 932 を指定して読み込みます。
注意点:
rawdata/dataの現行ファイル範囲は201810_10エリア計.csvから202605_10エリア計.csvです。2026-02の CSV は現行リポジトリに含まれていません。- 現行 JSON では
2024-03が 743 レコードで、1時間分少ない状態です。 - 四捨五入などにより、CSV 上の合計と個別項目の和が一致しない場合があります。
| 用途 | 使用技術 |
|---|---|
| グラフ描画 | ECharts |
| クライアント側集計 | crossfilter2 |
| 日付処理 | dayjs |
| 単位表示 | mathjs |
| DOM 操作、タブ切り替え | jQuery |
| 配列、オブジェクト処理 | lodash |
| バンドル | webpack |
| データ変換 | TypeScript + xlsx |
| デプロイ | GitHub Actions + GitHub Pages |
.
├── .github/
│ ├── image1.png
│ ├── image2.png
│ └── workflows/deploy-pages.yml
├── dev/
│ ├── css/style.css
│ └── src/
│ ├── jqtab.js
│ ├── native.js
│ └── vendor.js
├── dist/
│ ├── build/
│ │ ├── main.js
│ │ ├── vendor.js
│ │ └── vendor.js.LICENSE.txt
│ ├── css/style.css
│ ├── data/rowdata-all.json
│ ├── img/
│ └── index.html
├── rawdata/
│ ├── create-rowdata.ts
│ └── data/
├── package.json
├── tsconfig.json
└── webpack.config.js
主要ファイル:
dist/index.html: 実行時に配信される HTML です。dist/css/style.css: 実行時に配信される CSS です。dev/src/native.js: データ読み込み、集計、ECharts の描画処理です。dev/src/jqtab.js: 2ページ構成のパネル切り替え処理です。rawdata/create-rowdata.ts:rawdata/dataの月別 CSV をdist/data/rowdata-all.jsonに変換します。webpack.config.js:dev/src/native.jsとdev/src/jqtab.jsをdist/build/main.js、dist/build/vendor.jsにバンドルします。
Node.js 22 系を前提にしています。GitHub Actions でも Node.js 22 を使用しています。
npm install本番用バンドルを作成します。
npm run build開発用 sourcemap 付きでビルドする場合:
npm run build-vファイル変更を監視してビルドする場合:
npm run build-wwebpack が生成するのは JS バンドルです。dist/index.html、dist/css/style.css、dist/data/rowdata-all.json、dist/img は webpack の出力対象ではなく、静的ファイルとしてそのまま配信されます。
このアプリは fetch('./data/rowdata-all.json') で JSON を読み込みます。ブラウザで dist/index.html を直接開くと、環境によっては file:// の制限でデータ読み込みに失敗します。ローカル HTTP サーバーで dist を配信してください。
例:
python3 -m http.server 8000 --directory distブラウザで次を開きます。
http://localhost:8000/
月別 CSV を更新したら、JSON を再生成します。
rawdata/dataにYYYYMM_10エリア計.csv形式の CSV を配置します。- 次のコマンドを実行します。
npm run create-dataこのコマンドは rawdata/create-rowdata.ts を実行し、dist/data/rowdata-all.json を上書きします。
変換処理の概要:
rawdata/data配下のファイルを読み込みます。- 先頭 3 行をスキップし、4 行目をヘッダーとして扱います。
需要を電力需要にリネームします。月日をYYYY-MM-DDに変換します。時刻を数値の時刻に変換します。需要が数値ではない行はログ出力してスキップします。
補足: create-data は npx ts-node を使います。環境に ts-node が無い場合、初回実行時に npx が取得を試みます。
.github/workflows/deploy-pages.yml は、main ブランチへの push で次を実行します。
- リポジトリを checkout します。
- Node.js 22 をセットアップします。
npm installを実行します。npm run buildを実行します。- GitHub Pages 構成をセットアップします。
dist配下をアーティファクトとしてアップロードし、GitHub Pages にデプロイします。
- アプリ本体はプレーンな JavaScript で、React や Vue などの UI フレームワークは使っていません。
dist/data/rowdata-all.jsonは約 16 MB ありますが、GitHub Pages 配信時に自動的に圧縮(gzip / Brotli)して配信されるため実際の転送量は約 2 MB です。初回表示時はこの JSON の読み込み後にチャートを初期化します。dev/src/vendor.jsは生成済みバンドルです。通常の開発ではdev/src/native.jsとdev/src/jqtab.jsを編集します。dist/css/style.cssが実際に HTML から参照されます。CSS を変更する場合は、配信対象のdist/css/style.cssを更新してください。- 現在の
package.jsonにはテスト用スクリプトはありません。
MIT License です。詳細は LICENSE を参照してください。

