• #documentation
  • #financial-data
  • #automation

財務データJSON生成スクリプトの使い方

このドキュメントでは、企業の財務データ(CSVファイル)から統合JSONファイルを生成するスクリプトの使い方を説明します。

概要

複数の企業の年次・四半期財務データ(CSV形式)を、単一のJSON形式にまとめるスクリプトです。列指向フォーマットを使用することで、データサイズを大幅に削減しています(CSV 272KB → JSON 46KB、83%削減)。

ファイル構成

入力ファイル(CSVデータ)

場所: financial-data/2025-12-02/(リポジトリルート)

ファイル名形式:

  • 年次データ: {企業コード}_ann_{日付}.csv(例: NVDA_ann_20251202.csv
  • 四半期データ: {企業コード}_q_{日付}.csv(例: NVDA_q_20251202.csv

対象企業:

  • NVDA (NVIDIA)
  • MSFT (Microsoft)
  • GOOG (Alphabet/Google)
  • META (Meta)
  • APP (Apple)
  • ORCL (Oracle)
  • TSM (Taiwan Semiconductor)
  • AVGO (Broadcom)
  • MDB (MongoDB)
  • COHR (Coherent)
  • CRDO (Credo Technology)
  • CRWV (Crownwave)
  • NBIS (Nebius)
  • TEM (Tempus AI)

合計: 28個のCSVファイル(14社 × 2種類)

処理スクリプト

場所: apps/web/scripts/generate-financial-data.cjs

主な設定:

const DATA_SOURCE_DATE = '20251202';           // ファイル名用日付
const DATA_SOURCE_DATE_DIR = '2025-12-02';     // ディレクトリ名
const CSV_DIR = path.join(__dirname, '..', '..', '..', 'financial-data', DATA_SOURCE_DATE_DIR);
const OUTPUT_FILE = path.join(__dirname, '..', 'public', 'data', `financial-data-${DATA_SOURCE_DATE}.json`);

出力ファイル(JSON)

場所: apps/web/public/data/financial-data-20251202.json

ファイル名形式: financial-data-{YYYYMMDD}.json

データ構造(列指向フォーマット):

{
  "dataSourceDate": "20251202",
  "dataSourceDateDisplay": "2025年12月2日",
  "companies": {
    "NVDA": {
      "name": "NVIDIA",
      "ticker": "NVDA",
      "annual": {
        "periods": ["2023", "2024", "2025", ...],
        "revenue": [60922, 130497, 213125, ...],
        "netIncome": [32312, 74265, 114513, ...],
        "yoyChange": [581.32, 144.89, 53.99, ...],
        "qoqChange": [null, null, null, ...],
        "isEstimate": [false, false, true, ...]
      },
      "quarterly": {
        "periods": ["1Q 2023", "2Q 2023", ...],
        "revenue": [...],
        "netIncome": [...],
        "yoyChange": [...],
        "qoqChange": [...],
        "isEstimate": [...]
      }
    }
  }
}

実行方法

1. 新しい日付のデータを追加する場合

ステップ1: CSVファイルを配置

# リポジトリルートに新しい日付のディレクトリを作成
mkdir financial-data/2025-12-15

# CSVファイルを配置(28ファイル)
# NVDA_ann_20251215.csv
# NVDA_q_20251215.csv
# MSFT_ann_20251215.csv
# ...

ステップ2: スクリプトの日付を更新

apps/web/scripts/generate-financial-data.cjs を編集:

const DATA_SOURCE_DATE = '20251215';           // ← 新しい日付に変更
const DATA_SOURCE_DATE_DIR = '2025-12-15';     // ← 新しい日付に変更

ステップ3: スクリプトを実行

cd apps/web
node scripts/generate-financial-data.cjs

出力例:

Processing APP...
  Annual: 8 periods
  Quarterly: 20 periods
...
✅ Generated: C:\...\financial-data-20251215.json
📦 File size: 45.19 KB
📊 Original CSV total: 272.47 KB
💾 Space saved: 227.28 KB (83.4%)

ステップ4: Vueコンポーネントを更新

apps/web/app/pages/financial-data/annual-revenue-chart.vueloadAllData() 関数を編集:

const loadAllData = async () => {
  // ...
  const response = await fetch('/data/financial-data-20251215.json')  // ← 日付を変更
  // ...
}

2. 既存データを再生成する場合

cd apps/web
node scripts/generate-financial-data.cjs

現在の設定(DATA_SOURCE_DATE)で指定された日付のJSONファイルが再生成されます。

データの抽出内容

CSVファイルから以下のデータのみを抽出します:

  • Sales, Adjusted: 売上高(調整後)
  • Net Income, Adjusted: 純利益(調整後)
  • YoY % Chg: 前年比変化率
  • QoQ % Chg: 前四半期比変化率(四半期データのみ)

その他の約90行のデータは破棄され、必要最小限のデータのみJSONに格納されます。

列指向フォーマットの利点

従来のオブジェクト配列形式:

[
  {"period": "2023", "revenue": 60922, "netIncome": 32312, "yoyChange": 581.32, "isEstimate": false},
  {"period": "2024", "revenue": 130497, "netIncome": 74265, "yoyChange": 144.89, "isEstimate": false}
]

列指向フォーマット:

{
  "periods": ["2023", "2024"],
  "revenue": [60922, 130497],
  "netIncome": [32312, 74265],
  "yoyChange": [581.32, 144.89],
  "isEstimate": [false, false]
}

メリット:

  • キー名の重複がなくなり、ファイルサイズが約35%削減
  • 配列操作が効率的
  • Chart.jsなどのライブラリに直接渡せる

複数日付のデータ管理

JSONファイルには日付がファイル名に含まれるため、複数の日付のデータを同時に保持できます:

apps/web/public/data/
├── financial-data-20251202.json
├── financial-data-20251215.json
├── financial-data-20260101.json
└── ...

これにより、アナリスト予測の時系列変化を比較するチャートなどを作成可能です。

トラブルシューティング

CSVファイルが見つからない

Warning: Annual file not found: ...

financial-data/YYYY-MM-DD/ ディレクトリに該当企業のCSVファイルが存在するか確認してください。

データが正しく表示されない

  1. ブラウザのコンソールでエラーを確認
  2. JSONファイルが正しく生成されているか確認(apps/web/public/data/financial-data-YYYYMMDD.json
  3. Vueコンポーネントで読み込んでいるファイル名が正しいか確認

ファイルサイズが大きすぎる

列指向フォーマットを使用していることを確認してください。parseCSV() 関数が以下のような構造を返すはずです:

{
  periods: [...],
  revenue: [...],
  netIncome: [...],
  yoyChange: [...],
  qoqChange: [...],
  isEstimate: [...]
}

関連ファイル

  • スクリプト: apps/web/scripts/generate-financial-data.cjs
  • 入力CSV: financial-data/YYYY-MM-DD/*.csv
  • 出力JSON: apps/web/public/data/financial-data-YYYYMMDD.json
  • 表示ページ: apps/web/app/pages/financial-data/annual-revenue-chart.vue

更新履歴

  • 2025-12-02: 初版作成、列指向フォーマット導入、日付付きファイル名に変更