# DataFrame
## 定義
DataFrameは、分析・科学計算の文脈で使われるデータモデルであり、R言語、PythonのPandasライブラリ、Apache Spark、ArcticDB、Daskなどが実装する。OLTPシステムにはほとんど登場せず、機械学習モデルの学習データ準備、データ探索、統計分析、可視化などで使われる。一見リレーショナルデータベースのテーブルやスプレッドシートに似ており、行への関数適用・条件によるフィルタリング・列によるグルーピングと集約・キーに基づく2つのDataFrame間の結合(DataFrameでは*merge*と呼ばれ、リレーショナルの*join*に相当)といったリレーショナル的な一括操作をサポートする。SQLのような宣言的クエリ言語ではなく、DataFrameの構造・内容を逐次的に変更するコマンド列によって操作される点が大きな違いで、これはデータサイエンティストが手元のコピー(多くはローカルマシン上)を段階的に「加工(wrangle)」していく典型的なワークフローに合致する。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] "DataFrames, Matrices, and Arrays")
## 行列・配列への変換
DataFrame APIはリレーショナルDBにはない多様な操作を提供し、典型的な用途の1つがリレーショナル的な表現から行列・多次元配列表現への変換である。例えば、ユーザーの映画評価を記録したテーブル(user_id, movie_id, rating)を、行がユーザー・列が映画の*疎行列(sparse matrix)*(スプレッドシートのピボットテーブルに類似)へ変換する操作は、多くの機械学習アルゴリズムが入力として要求する形式への典型的な前処理である。この疎行列は多数のユーザー・映画の組み合わせでデータが存在しない(疎である)ことが前提であり、リレーショナルDBには収まりにくい数千列規模のテーブルになりうるが、DataFrameやNumPyのような疎配列対応ライブラリはこれを効率的に扱える。行列は数値のみを保持できるため、非数値データ(カテゴリ変数等)は*one-hot encoding*(取りうる値ごとに列を作り該当列に1・非該当列に0を置く)のような技法で数値化される。数値化された行列は線形代数演算の対象になり、多くの機械学習アルゴリズムの基盤となる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] "DataFrames, Matrices, and Arrays")
## 隣接する専門データベース
TileDBのような*array database*は大規模な多次元数値配列の格納に特化しており、地理空間データ(規則格子上のラスターデータ)・医用画像・天文観測データなど科学データセットで使われる。DataFrameは金融業界における時系列データ(資産価格・取引履歴)の表現にも使われる。DataFrameはデータサイエンティストに人気が高いため、Spark・Flinkのようなバッチ処理フレームワークにも取り込まれている。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] "DataFrames, Matrices, and Arrays")
## 横断的知見
- (この節は今後、複数ソースの突き合わせで得られた知見を蓄積する。現時点では単一ソースからの知見のみ。DataFrameを扱うバッチ処理フレームワーク(Spark・Flink)は本書第11章で詳述される予定であり、該当章のingest後に横断的知見を追記する。)
## 未解決の問い
- DataFrameの「宣言的クエリ言語でなく逐次コマンド列で操作する」という特徴は、[[リレーショナル対ドキュメントモデル]]が論じるschema-on-read/schema-on-writeの軸とどう関係するか——DataFrameは型付けや構造の強制という観点でどちらに近いか。
- array database(TileDB等)とDataFrameライブラリ(Pandas等)は、多次元配列という同じ対象を扱いながらどのようなユースケースの境界で使い分けられているか。
- DataFrameのmerge(join相当)の性能特性は、リレーショナルDBの結合やDataFrameの分散実装(Spark)でどう異なるか。
## 関連
- ソース: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]]
- 概念: [[リレーショナル対ドキュメントモデル]]
## 出典
- [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]]("DataFrames, Matrices, and Arrays")