PR

競馬予想ソフト:CSVインポート機能の紹介

この記事は約20分で読めます。
スポンサーリンク
how-to-use-csvimporter.md
スポンサーリンク

CSVインポート機能 v2

スポンサーリンク

概要

この機能は、競馬データ(レース情報、出走馬情報、オッズ)を CSV からまとめて取り込み、WEBアプリのデータベースに登録するためのツールです。ブラウザUIでファイルをアップロードして、項目(CSV列)とデータベースのフィールドを視覚的にマッピング(紐付け)してから一括でインポートできます。

この記事で紹介する機能は『ゼロから作る競馬予想モデル・機械学習入門』で作成しているWEBアプリにインポートするためのCSVファイルが必要になります。
CSVファイル作成手順は以下の記事を参考にしてください。
【生成AI×競馬】出馬表をGemini+MCPで取得︕【プロンプト公開】

よろしければ、チャンネル登録・ゼロから作る競馬予想モデル・機械学習入門シリーズ・ソース取得よろしくお願いいたします

主な機能:

  • 年度を指定して CSV をインポート(年度ごとにデータを分ける)
  • 3種類のCSVを取り込み可能:
    • レース情報(race_info) — 必須
    • 出走馬情報(race_horse) — 必須
    • オッズ情報(odds) — 任意
  • CSVヘッダー行を自動読み込みして、ドラッグ操作でCSV列とDB列を視覚的に接続(マッピング)
  • マッピングの保存/読み込み(同じ形式のファイルを再利用可能)
  • マッピングに従って一時CSVを作成し、サーバーでDBに登録
  • インポート結果はサーバーログ/DBで確認可能
スポンサーリンク

できること

  • 手軽に複数レースを一括投入:1つのCSVに複数レースを書いておけば、一括で登録できます。
  • マッピング情報はファイル名単位で「保存」しているため、次回から同じファイル名のCSVを簡単にインポートすることが可能。
  • オッズCSVを追加すれば、オッズの時系列情報も登録できる。
  • ファイル中の race_id をキーに、関連するレース情報・馬情報が紐づけられる(race_id は 12 桁の数字が推奨; netkeiba様準拠)。
スポンサーリンク

デモ動画

手順1: CSV インポート画面表示

本WEB画面のHome画面(./index.html)上の「CSV インポート V2」ボタン押下するとCSVインポート画面が表示されます
alt text

手順2: CSVインポート用ファイルを指定

レース情報のCSVファイルと出走馬情報のCSVファイルを2種類指定します。 オッズ情報がある場合はそちらも選択。CSVファイル形式はCSVインポート画面の下部にある「CSVファイル形式の説明は > こちら」から確認できます。 alt text

生成AIを使って、出馬表をスクレイピングしてCSVファイルへ変換する方法は以下の記事で紹介しています
【生成AI×競馬】出馬表をGemini+MCPで取得︕【プロンプト公開】

手順3: マッピングの実施

左と右でそれぞれカラム一覧が表示されます
左がCSVファイルのファイル形式、右が登録先DBのカラム形式になっています
CSVカラムをホールドして、登録先のDBカラムへドラッグすることでUI上でマッピングを作成できます
alt text
マッピングを間違えた場合でも、DB側の対象のカラムをクリックするか、正しいカラムでドラッグ&ドロップすることで変更も可能です

このマッピングを「レース情報」と「出走馬情報」両方行います
alt text

手順4: マッピング完了後「決定」ボタン押下

マッピングができたら「決定(インポート&マッピング保存)」ボタンを押下するとインポートが開始されます
alt text

手順5: インポート完了後画面更新

インポート完了するとその旨の画面が表示されます
元のHome画面に戻って、画面を更新するとインポートしたデータが表示されます
alt text

確認: マッピング保存されてることを確認

インポート画面で再度同じファイル名のCSVファイルを指定すると、さっきマッピングした組み合わせが復元されることを確認
alt text

スポンサーリンク

簡単なワークフロー(図解)

以下はCSVインポート機能の流れです。

mermaid のフロー図:

flowchart TD A[ユーザ: CSVファイルを準備] --> B[ブラウザ: CSVアップロード画面を開く] B --> C[年度選択 & ファイル選択] C --> D[マッピング画面へ移動] D --> E[CSV列 と DB列 をドラッグで紐付け] E --> F[マッピングを保存] F --> G[インポート 実行] G --> H[サーバー: 一時CSV作成 -> Importer実行] H --> I[DBに RaceInfo / RaceHorseData / OddsExtract が追加/更新] I --> J[ユーザ: 結果確認(ログまたは管理画面)]
スポンサーリンク

マッピングの仕組み(図解)

UIは CSV のヘッダー(例: ["race_id","race_name","start_time"])を左に、DB 側の想定カラム(例: ["race_id","race_name","race_date","start_time"])を右に表示します。ユーザは左から右へ線を引き、どのCSV列をどのDBカラムに入れるか決めます。内部的には次のようなデータ構造になります。

mermaid のシーケンス図(簡易):

sequenceDiagram participant UI participant Server UI->>UI: CSV読み込み -> csvColumns 作成 UI->>UI: DBカラム取得(/api/db_columns) UI->>Server: mapping 保存 UI->>Server: /api/csv_import with fileContent + mapping Server->>Server: mapping に基づき一時CSV生成 Server->>DB: Importer 実行 -> レコード作成/更新

マッピングのデータ例(概念):

  • csvColumns: ["race_id","race_name","start_time"]
  • dbColumns: ["race_id","race_name","race_date","start_time"]
  • lines: [{csvIndex:0, dbIndex:0}, {csvIndex:1, dbIndex:1}, {csvIndex:2, dbIndex:3}]

ここで csvIndex は csvColumns の位置、dbIndex は dbColumns の位置を指します。

スポンサーリンク

具体的なステップ(画面操作)

  1. Home画面で CSV インポートページを開く(上部の「CSVインポート V2」ボタンをクリック)。
  2. 年度を選択(その年度向けにデータが格納されます)。
  3. 「レース情報(race_info)」ファイルを選択(必須)。
  4. 「出走馬情報(race_horse)」ファイルを選択(必須)。
  5. 必要に応じて「オッズ(odds)」ファイルを選択(任意)。
  6. 「マッピングへ進む」をクリック。
  7. マッピング画面:
    • 左に CSV の列名(ヘッダー)が並ぶ。
    • 右にシステム側の DB カラム名が並ぶ。
    • ドラッグして線を引き、CSV列 → DBカラム を対応づける。
    • 必須カラム(例: race_id, horse_id 等)が正しくマッピングされているか確認。
  8. 「マッピングを保存」しておけば、同じファイル名を次回にロードできる(便利)。
  9. 「インポート」を押すと処理が始まる。完了すれば完了画面に切り替わる。
スポンサーリンク

使う上でのポイント

  • race_id は 12 桁の数値で統一してください。3つのファイルで同じ race_id を使うことで関連付けが行われます。
  • CSV エンコーディングは UTF-8 推奨(日本語が含まれる場合は特に注意)。
  • ヘッダー行は必須。1行目をヘッダーにしてください。
  • マッピング保存は「ファイル名単位」です。ファイル名が違うと自動読み込みはされません。
  • 先にマッピングを作って保存しておけば、次回は同じファイル名をアップロードするだけでマッピング情報が自動反映されます。
  • オッズは任意ですが、入れると 時系列オッズが画面上で確認できます。
スポンサーリンク

インポートしたデータの確認

インポートに成功すると、取得したレースの開催月のページに取り込んだレース情報が表示されます。
画面の使い方については、以下の動画を参照ください。

重要なお知らせと開発進捗

スポンサーリンク

よくある問題

  • 文字化けする(ファイルが Shift_JIS 等の場合):
    • 対処: UTF-8 に変換して再アップロード(Excel で「エンコード指定して保存」またはテキストエディタで変換)。
  • race_id が合っているのに紐づかない:
    • 対処: ヘッダー名の誤差(全角/半角・大文字小文字)やマッピングで race_id が正しい DB カラムに紐づいているか確認。
  • マッピングを間違えた:
    • 対処: マッピング保存ファイルを削除して再設定するか、UI で線を外して修正する。
  • インポートが途中で止まる/エラーになる:
    • 対処: ログ(エラーメッセージ)を確認。操作側ではCSVの1行目(ヘッダー)と必須カラムの有無を確認する。
スポンサーリンク

例:よくあるユースケース

  • 新シーズン開始時に前年のレースデータをまとめて取り込みたい:
    • 年度を指定して、複数CSVを一度に取り込むだけで主要データが揃います。
  • 提供元から毎週届く同一フォーマットCSVを自動で登録したい:
    • 初回にマッピングを作って保存しておけば、次回は同じファイル名/フォーマットで素早く登録できます。
スポンサーリンク

図解:簡単なデータフロー(補足)

flowchart LR subgraph Browser U1[Upload CSVs] --> U2[Mapping UI] end User1[ユーザ (CSVインポート V2押下)] --> U1 subgraph Server TMP[一時CSV生成] --> Importer[CsvRaceImporter / OddsCsvImporter] Importer --> DB[(Database)] end U2 -->|mapping + fileContent| TMP Server -->|mapping JSON 保存| MAPPING[static/.../mapping_store] DB -->|結果確認| User2[ユーザ(Home画面更新)]

コメント

タイトルとURLをコピーしました