この記事ではDevOps・自動化文脈で、AI/LLM実験の練習データとして使える公開データセットdatasets/s-and-p-500-companiesを解説します。AIで使う自動化ツール全体像は AI自動化ツール完全ガイド2026|ノーコードからコードまで徹底比較 をご覧ください。
- ・
datasets/s-and-p-500-companiesはGitHubで639スターのオープンデータリポジトリ。 - ・S&P 500構成銘柄503社の8項目をCSVで配布、パブリックドメインで自由に再配布可能。
- ・Wikipediaを自動スクレイプするPython基盤付きで、フォークすれば自社運用もできる。
- ・
Frictionless Dataのdatapackage.jsonに準拠、スキーマ・型情報が機械可読。 - ・LLM/RAG/AIエージェントの練習データとして扱いやすい規模と構造を持つ。
1. S&P 500 Companiesデータセットとは何か:AI実験で扱える小さな公開データ
datasets/s-and-p-500-companiesは、米国主要500社(S&P 500構成銘柄)の基礎情報をCSV形式で配布するオープンデータリポジトリで、GitHubで639スターを獲得している。Standard & Poor’s社が公式のリスト公開を停止したため、Wikipediaの「List of S&P 500 companies」ページをプライマリソースとして自動スクレイプする方針で運営されている。
開発を主導しているのはオープンナレッジ・ファンデーションのRufus Pollock氏らで、同じdatasetsオーガニゼーション配下にはGDP・人口・通貨レート・国コードなど、研究やデータ可視化で頻出する100以上の小規模データセットが整備されている。
S&P 500の構成銘柄リストはBloomberg・S&P Capital IQといった有料端末では当然のように手に入るが、無料で・機械可読な形式で・継続更新される公開データセットは意外と少ない。本リポジトリは「最小限の8項目に絞った構造化データ」というポジションで安定運用されており、AI/データ分析の入門教材としても多用されている。
1.1 リポジトリの規模感
GitHubのスター数は639件、フォーク数は505件で、データ系OSSとしては典型的な比率だ。スター数より少し少ないフォーク数は「観賞用ではなく実際に複製して使われている」ことを示している。
言語比率はPython 65.6%、Makefile 34.4%。本体は数百行のスクレイピングスクリプトだけで、データ取得・整形・CSV出力の一連の処理がシンプルに完結する設計だ。
1.2 想定ユースケース
業務システムで「S&P 500構成銘柄かどうか」を判定したい時、検索する銘柄IDの集合体としてこのCSVが使われる。投資調査・株式アプリの初期セットアップ・教育教材・LLMファインチューニングの軽量データセットなど、用途は地味だが幅広い。
近年はLLM/RAGアプリケーションのプロトタイピング時に「ファクトとして参照できる構造化データ」として採用されるケースが増えている。サイズが小さく、構造が明快で、ライセンスがクリアという3条件を満たすため、AIサンプル実装の素材として相性が良い。
GitHub上の
datasetsオーガニゼーションは、オープンナレッジ・ファンデーションが運営する「研究・教育用の小規模データセット集」だ。CO2排出量・為替レート・GDP・国コードといった頻出データを、CSV+datapackage.jsonの統一フォーマットで配布している。本リポジトリもそのラインナップの1つで、設計思想はオーガニゼーション全体で共通している。
2. データセットの構造:8項目で完結する構成銘柄CSV
S&P 500 Companiesデータセットの中核はdata/constituents.csvで、503行(ヘッダー含む)の構造化データだ。スキーマは8カラムで、機械可読性を意識した型情報がdatapackage.jsonに記述されている。
2.1 8カラムの詳細
| カラム名 | 型 | 説明 |
|---|---|---|
| Symbol | string | 取引所での銘柄ティッカーシンボル(例:AAPL、MSFT) |
| Security | string | 指数掲載上の企業名(例:Apple Inc.、Microsoft) |
| GICS Sector | string | GICSセクター(11業種:Information Technology、Health Careなど) |
| GICS Sub-Industry | string | GICSサブインダストリー(より細分化された業種) |
| Headquarters Location | string | 本社所在地(市・州または国) |
| Date added | date | S&P 500への組入日(YYYY-MM-DD) |
| CIK | string | SEC(米国証券取引委員会)の中央索引キー |
| Founded | string | 設立年(前身企業の創業年も併記される場合あり) |
GICS(Global Industry Classification Standard)はS&P社とMSCI社が共同開発した世界標準の業種分類で、11セクター・25インダストリーグループ・74インダストリー・163サブインダストリーから成る。セクターとサブインダストリーの両方を持つため、業種別フィルタリングが粗粒度・細粒度の両方で可能になっている。
2.2 サンプルデータ
実際のCSVの先頭10行を見ると、データの雰囲気がつかめる。
| Symbol | Security | GICS Sector | 本社 | 追加日 | 設立 |
|---|---|---|---|---|---|
| MMM | 3M | Industrials | Saint Paul, MN | 1957-03-04 | 1902 |
| AOS | A. O. Smith | Industrials | Milwaukee, WI | 2017-07-26 | 1916 |
| ABT | Abbott Laboratories | Health Care | North Chicago, IL | 1957-03-04 | 1888 |
| ABBV | AbbVie | Health Care | North Chicago, IL | 2012-12-31 | 2013 (1888) |
| ACN | Accenture | Information Technology | Dublin, Ireland | 2011-07-06 | 1989 |
| ADBE | Adobe Inc. | Information Technology | San Jose, CA | 1997-05-05 | 1982 |
| AMD | Advanced Micro Devices | Information Technology | Santa Clara, CA | 2017-03-20 | 1969 |
ABBVのFoundedが「2013 (1888)」となっているのは、AbbVieが2013年にAbbott Laboratories(1888年設立)からスピンオフした履歴を反映している。この種の「現法人と前身組織の創業年が併記される」パターンが30件ほど含まれるため、Founded列を数値型として扱う場合は前処理が必要だ。
2.3 補助データ:sector-counts.csv
データセットには副資料として、GICSセクターごとの構成社数を集計したdata/sector-counts.csvも同梱されている。Information Technologyが最多、Health Care・Financials・Industrialsが続く構造で、米国経済の業種構成を一目で把握できる。
このセクター集計は、ダッシュボードの初期表示やAIエージェントのファクト確認用途で重宝する。「S&P 500の中で最も社数が多いセクターは?」という単純な質問に対し、LLMがハルシネーションせず正しく答えられるかをテストする小さなベンチマークとしても使える。
3. アーキテクチャ:Wikipediaを起点としたデータパイプライン
データセットの裏側には、Wikipediaを自動スクレイプする小さなPythonパイプラインが存在する。手動更新ではなく自動化されている点が、データセットの鮮度を担保する仕掛けだ。
List of S&P 500 companies"] end subgraph Pipeline["スクレイピングパイプライン"] S1["scripts/scrape.py
(Python + BeautifulSoup)"] S2["データ整形
+ スキーマ検証"] S3["sector集計"] end subgraph Output["配布物"] C1["data/constituents.csv
(503行)"] C2["data/sector-counts.csv
(11行)"] C3["datapackage.json
(メタデータ)"] end subgraph Consumer["利用先"] U1["pandas/Polars/DuckDB"] U2["LLM RAG/エージェント"] U3["BIダッシュボード"] end W --> S1 --> S2 --> C1 S2 --> S3 --> C2 S2 --> C3 C1 --> U1 --> U2 C1 --> U3 C3 --> U1
3.1 スクレイピング処理の流れ
scripts/scrape.pyは概ね以下の処理を実行する。BeautifulSoupとrequestsを使った典型的なWebスクレイピングで、コードベース全体が数百行に収まっている。
Wikipediaの構成銘柄テーブル(HTMLの<table class="wikitable sortable">)をパースし、各行から8カラムを抽出する。CIK列だけはWikipediaから直接取れないため、別経路で補完されている。整形後にCSVへ書き出し、Frictionless Dataのvalidate機能でスキーマ整合性を検証する。
3.2 自動更新のメカニズム
リポジトリには.github/workflowsが配置されており、定期実行ワークフローが組まれている。Wikipediaに変更が入ると新しいCSVがコミットされる仕組みで、人手介入なしで鮮度を維持できる設計だ。
実運用では「Wikipedia側の編集ラグ」「S&P社の公式リバランス発表からWikipediaへの反映まで」のディレイが発生する。投資判断・取引執行など即時性が要求される用途には不向きで、調査・分析・教育用途と割り切るのが正しい使い方だ。
3.3 Frictionless Data規格への準拠
datapackage.jsonはFrictionless Data規格に準拠したメタデータファイルで、データセット全体の説明・各リソース(CSV)のパス・カラム定義・データ型・記述を機械可読な形式で保持している。
frictionlessコマンドラインツールを使えば、CSV と datapackage.json の整合性を自動検証できる。スキーマに違反した行があれば即時に検出されるため、Wikipedia側で構造変更があった時の早期警報として機能する。
4. 取得手順:5分で動かすチュートリアル
データの取得方法は2通りある。完成済みCSVを直接ダウンロードするか、自分でスクレイプを再実行するかだ。
4.1 完成済みCSVを直接使う
最短経路はGitHubのRawファイルを直接ダウンロードする方法だ。仮想環境の構築すら不要で、curl一発で取得できる。
curl -O https://raw.githubusercontent.com/datasets/s-and-p-500-companies/main/data/constituents.csv
curl -O https://raw.githubusercontent.com/datasets/s-and-p-500-companies/main/data/sector-counts.csv
ファイルサイズは合計で50KB程度。社内のRAGナレッジベースに食わせる時も、ベクトルストアへの投入が一瞬で終わる規模だ。
4.2 自分でスクレイプを再実行する
Wikipediaの最新状態を反映したい場合、リポジトリをクローンしてscrape.pyを再実行する。Pythonの仮想環境を作るだけで、依存関係はrequirements.txtに集約されている。
git clone https://github.com/datasets/s-and-p-500-companies.git
cd s-and-p-500-companies
python3 -m venv .env
source .env/bin/activate
pip install -r scripts/requirements.txt
python scripts/scrape.py
makeコマンドを使えば、上記の手順を一括実行できる。Makefileはデータ取得・整形・検証を1コマンドにまとめており、GitHub Actionsから呼ばれる本番処理と同じ経路でローカル実行できる。
4.3 pandasでの読み込み
CSVを取得したらすぐに分析に入れる。pandasであれば数行のコードでDataFrame化できる。
import pandas as pd
df = pd.read_csv("constituents.csv")
print(df.shape) # (503, 8)
print(df["GICS Sector"].value_counts())
# 例: 情報技術セクターだけ抽出
tech = df[df["GICS Sector"] == "Information Technology"]
print(tech[["Symbol", "Security", "Headquarters Location"]].head())
GICSセクター別のフィルタリング、本社所在地での絞り込み、CIK経由でSEC EDGARに横展開といった操作が、すべて構造化データとして扱える。
5. AI/LLM実験での活用パターン:4つの使い方
このデータセットがAI/LLM文脈で評価されているのは、扱いやすい規模と明快なスキーマの組み合わせにある。代表的な活用パターンを4つ紹介する。
5.1 RAGの練習データとして
LLMアプリケーション開発で「最初に動くRAG」を作る時、データソースの準備が最も時間を食う。S&P 500データセットなら、503行のCSVを30秒でベクトル化でき、構造化検索とセマンティック検索の組み合わせをすぐに試せる。
LangChain・LlamaIndex・Difyのチュートリアルとして使えば、企業名・セクター・本社所在地に関する自然言語質問に答えるRAGエージェントを30分以内で構築できる。「ヘルスケアセクターで本社がイリノイ州にある企業を教えて」という問いに対し、フィルタ条件をLLMが理解して構造化検索を組み立てる流れを実装する練習に向いている。
5.2 AIエージェントのツール使い分け学習
CIK列は単なる文字列ではなく、SEC EDGARの一次ソース(10-K年次報告書・10-Q四半期報告書)へのキーになる。AIエージェントの「ツール選択能力」を訓練する場合、CSV内検索ツールとSEC EDGAR APIツールの2つを与え、質問の粒度に応じて使い分けさせるシナリオが組める。
例えば「Appleの本社所在地は?」はCSV検索で完結するが、「Appleの2025年Q3の売上高は?」はSEC EDGAR APIへの問い合わせが必要だ。エージェントがこの分岐を正しく判断できるかをテストする教材として、構造の明快なこのデータセットは適している。
5.3 LLMファインチューニングの軽量データセット
503社の企業名・セクター情報を使い、軽量なLLMにビジネス分類タスクをファインチューニングさせる用途にも使える。GPU1台で動く7B〜13Bパラメータのモデルで、企業名→セクターを分類する小さなドメイン適応を試せる。
商用利用可能なライセンスである点が大きく、ファインチューニング後のモデル配布・商用展開にライセンス上のハードルがない。実験用途であれば、ライセンスの明快さがそのまま生産性に直結する。
5.4 プロンプトのファクトチェック基盤
LLMに「2026年時点でS&P 500に組み入れられている企業は?」と聞くと、しばしば古い情報・誤った情報が返ってくる。このCSVをコンテキストに入れた上で質問すれば、ハルシネーションを抑えつつ正しい範囲で回答させられる。
業務システムに組み込まれるLLM機能で「銘柄判定」が必要なケース(例:投資管理ツール、リサーチ自動化ボット)では、CSVをグラウンディングソースとして毎リクエスト渡す設計が現実的だ。50KBのファイルサイズはClaude Opusのコンテキストウィンドウにも余裕で収まる。
5.5 DuckDBで超高速にSQL分析する
CSVを直接SQLで叩きたい場合はDuckDBが最有力候補だ。pandasよりも起動が速く、SQL構文に慣れた人なら数秒で集計を書ける。S&P 500データセットのような数百行規模なら、メモリ上にロードしてミリ秒単位で集計が完了する。
-- DuckDB CLIで実行
SELECT
"GICS Sector" AS sector,
COUNT(*) AS company_count,
MIN("Date added") AS earliest_added
FROM read_csv_auto('constituents.csv')
GROUP BY sector
ORDER BY company_count DESC;
集計結果は11セクターの内訳になる。Information Technologyが約80社で最多、Industrials・Financials・Health Careが各60社前後で続く構造が一目で確認できる。BIダッシュボードの一次集計や、LLMにツールとして渡す軽量SQLバックエンドとしても使い勝手が良い。
5.6 SEC EDGARとの連結で本格的なリサーチRAGへ
CIK列のメリットはここで効いてくる。SEC EDGARはCIK経由で各企業の10-K・10-Q・8-K書類をAPIで提供しており、CSVをジョインキーにして「構成銘柄リスト+決算書類本文」という大きなナレッジベースが組み立てられる。
決算書類はPDFまたはHTMLで提供され、1社あたり数MB〜数十MBの規模になる。すべてをベクトル化すれば、S&P 500企業の経営戦略・財務状況・リスク要因に関するセマンティック検索が可能になり、リサーチ業務向けの実用的なRAGが立ち上がる。本データセットはその「入口」を提供する役割を担う。
6. 他データセットとの比較と限界:投資判断には使えない
このデータセットの位置付けを正しく理解するには、他の選択肢と限界を整理しておく必要がある。
6.1 他データセットとの比較
S&P 500構成銘柄を取得する手段は複数ある。代表的な選択肢を整理すると、性質の違いがはっきりする。
| データ源 | 鮮度 | 構造化 | ライセンス | 用途 |
|---|---|---|---|---|
| datasets/s-and-p-500-companies | 中(Wikipedia依存) | 高(datapackage.json) | パブリックドメイン | 教育・RAG・分析 |
| S&P社公式(有料) | 高(即時) | 高 | 商用ライセンス | 投資判断 |
| Bloomberg/Refinitiv | 高(即時) | 最高 | 商用ライセンス | 機関投資家 |
| Yahoo Finance/yfinance | 中 | 中 | 利用規約あり | 個人投資家 |
| Wikipediaを自前スクレイプ | 中 | 低(要整形) | CC BY-SA | 一時的調査 |
機関投資家がBloombergを使う一方で、エンジニア・データサイエンティスト・学生が触りやすい選択肢として、本データセットは独自のポジションを保っている。
6.2 既知の限界
決算情報・株価・時価総額・財務指標といった量的データは含まれない。あくまで「構成銘柄リスト+メタデータ」というスコープに徹している点を理解しておく必要がある。
Founded列の「2013 (1888)」のような混在表記は、機械処理時の落とし穴になる。数値型への変換時に正規表現で前処理する必要があり、データクレンジングの練習教材としても扱える。
Wikipediaを起点としているため、構成銘柄入れ替えの反映に数日〜数週間のラグが発生する場合がある。リアルタイム性が必要な用途には完全に不向きだ。
6.3 投資判断に使ってはいけない理由
公開データセットの最大の落とし穴は「鮮度の保証がない」点だ。S&P 500は四半期ごとにリバランスされ、企業の上場廃止・統廃合に応じて随時メンバーが入れ替わる。
実取引の意思決定に使う場合、Standard & Poor’s公式の最新リストを必ず参照する必要がある。本データセットの位置付けは「教育・調査・AI実験のための便利な近似値」であって、投資判断のグラウンドトゥルースではない点を明確にしておく。
6.4 商用代替サービスを使うべき場面
ライセンス上は問題なくとも、業務利用では「鮮度」「網羅性」「サポート」の観点で商用サービスに切り替えるべき場面がある。例えば毎日のリバランス監視・銘柄入れ替え速報・指数の派生情報まで含めるなら、S&P社・Bloomberg・Refinitivといった商用フィードが現実的な選択肢になる。
逆に、社内のデモアプリ・営業用デモ・ハッカソンのプロトタイプ・社内勉強会の教材・LLM評価ベンチマークといった用途であれば、本データセットで十分すぎる。コストゼロで法務リスクもなく、明日から手元で動かせるという機動力こそが、このリポジトリの最大の強みだ。
7. まとめ:地味だが信頼できるオープンデータの代表格
datasets/s-and-p-500-companiesは派手な機能を持つOSSではない。だが、AI/データ分析の現場で「サンプルを最速で動かしたい」場面で重宝する、地味で信頼できる公開データセットの代表格だ。
503行・8項目という扱いやすい規模、Frictionless Data規格に準拠したメタデータ、自動更新パイプライン、商用利用可能なライセンス。これら4要素が揃った公開データセットは意外と少なく、AIエンジニアにとっては「困った時のリファレンスソース」として手元に置いておきたい1つだ。
LLMアプリケーション・RAG・AIエージェントの初期プロトタイピングで、ファイナンス系のグラウンディングデータが必要になったら、まずこのリポジトリを開いてみるとよい。50KBのCSV2本で、最小限のドメインデータが揃う手軽さは、AI開発の生産性に直結する。
実運用に進む段階では、Wikipediaの更新ラグ・Founded列の表記揺れ・取り扱える項目数の制約を必ず把握しておく必要がある。あくまで「学習用・実験用の出発点」というスコープで使い、本番運用が見えてきたら商用フィードへの切り替えやSEC EDGAR APIの組み込みを検討するのが順当な進路だ。Wikipediaソースとの併用が前提なら、データの正確性は自分の目で確認する習慣を持っておきたい。