Python Polars

―高速なデータ処理を実現する次世代ライブラリ

[cover photo]
TOPICS
Python
発行年月日
PRINT LENGTH
468
ISBN
978-4-8144-0143-7
原書
Python Polars: The Definitive Guide
FORMAT
Print PDF EPUB
オンライン学習プラットフォーム
購読可
いますぐ読む
Ebook
5,500円
Ebookを購入する
Print
5,500円

Polarsは表形式のデータ構造であるDataFrameの処理を行うためのライブラリで、その高速性と優れたAPI設計から、現在広く用いられているpandasの後継として注目を集めています。高速性の源は、遅延実行を導入することで最適化を可能にしたこと、バックエンドにRustを用いることでマルチコアやSIMD命令を可能にしたことにあります。APIも「エクスプレッション」という概念を導入することで、シンプルかつ高機能にまとまっており、理解しやすく使いやすいものになっています。本書はPolars開発者Ritchie Vink氏の所属するXomnia社の開発者二人により執筆され、Polarsの基本的な使い方からより高度な最適化、並列化の方法をカバーしています。さらには内部構造やRustプラグインによる拡張方法にまで踏み込んでおり、Polars解説書の決定版と言える内容です。

目次

序
はじめに

第Ⅰ部 始める

1章 Polarsとは
    1.1 このPolarsというのは何なのか?
        1.1.1 主な特徴
        1.1.2 重要な概念
        1.1.3 優れた点
    1.2 Polarsを使う理由
        1.2.1 性能
        1.2.2 ユーザビリティ
        1.2.3 評判
        1.2.4 持続可能性
    1.3 Polarsと他のデータ処理パッケージとの比較
    1.4 Pythonに注目する理由
    1.5 本書の構成
    1.6 ETLのサンプルプロジェクト
        1.6.1 抽出
        1.6.2 ボーナス:地区とステーションを可視化する
        1.6.3 変換
        1.6.4 ボーナス:行政区ごとの1日の利用回数を可視化する
        1.6.5 ロード
        1.6.6 ボーナス:怠けた(lazy)ほうが速くなる
    1.7 本章で学んだこと

2章 Polarsを使い始める
    2.1 環境のセットアップ
        2.1.1 プロジェクトのダウンロード
        2.1.2 uvのインストール
        2.1.3 プロジェクトのインストール
        2.1.4 仮想環境での作業
        2.1.5 インストールを確認する
    2.2 JupyterLabの速習コース
        2.2.1 キーボードショートカット
    2.3 他のプロジェクトへのPolarsのインストール
        2.3.1 オプション依存ライブラリ
        2.3.2 相互運用のためのオプション依存ライブラリ
        2.3.3 スプレッドシートのためのオプション依存ライブラリ
        2.3.4 データベースのためのオプション依存ライブラリ
        2.3.5 リモートファイルシステムのためのオプション依存ライブラリ
        2.3.6 他のI/Oフォーマットのためのオプション依存ライブラリ
        2.3.7 機能追加のためのオプション依存ライブラリ
        2.3.8 オプション依存ライブラリのインストール
    2.4 Polarsの設定
        2.4.1 コンテキストマネージャを用いた一時的な設定
        2.4.2 デコレータを用いたローカル設定
    2.5 Polarsをソースからコンパイルする
        2.5.1 エッジケース:超大規模データセット
        2.5.2 エッジケース:AVXをサポートしないプロセッサ
    2.6 本章で学んだこと

3章 pandasからPolarsへの移行
    3.1 amimals.csv
    3.2 認識すべき類似点
    3.3 外見
        3.3.1 コードの違い
        3.3.2 表示の違い
    3.4 忘れるべき概念
        3.4.1 Index
        3.4.2 軸
        3.4.3 インデックス参照とスライス
        3.4.4 即時評価
        3.4.5 寛容さ
    3.5 忘れるべき構文
        3.5.1 共通操作の比較
    3.6 pandasとの変換
    3.7 本章で学んだこと

第Ⅱ部 フォーム

4章 データ構造とデータ型
    4.1 Series、DataFrame、LazyFrame
    4.2 データ型
        4.2.1 ネストデータ型
        4.2.2 欠損値
    4.3 データ型の変換
    4.4 本章で学んだこと

5章 即時APIと遅延API
    5.1 即時API:DataFrame
    5.2 遅延API:LazyFrame
    5.3 性能の違い
    5.4 機能の違い
        5.4.1 属性
        5.4.2 集約メソッド
        5.4.3 計算メソッド
        5.4.4 記述メソッド
        5.4.5 GroupBy メソッド
        5.4.6 エクスポートメソッド
        5.4.7 操作メソッドと選択メソッド
        5.4.8 その他のメソッド
    5.5 ヒントとトリック
        5.5.1 LazyFrameからDataFrameへ、DataFrameからLazyFrameへ
        5.5.2 LazyFrameとDataFrameのジョイン
        5.5.3 途中結果のキャッシュ
    5.6 本章で学んだこと

6章 データの読み込みと書き出し
    6.1 ファイル形式の概要
    6.2 CSVファイルの読み込み
    6.3 欠損値の正しいパース
    6.4 UTF-8以外でエンコーディングされたファイルの読み込み
    6.5 Excelスプレッドシートの読み込み
    6.6 複数ファイルの取り扱い
    6.7 Parquetファイルの読み込み
    6.8 JSONとNDJSONの読み込み
        6.8.1 JSON
        6.8.2 NDJSON
    6.9 その他のファイル形式
    6.10 データベースへのクエリ
    6.11 データの書き出し
        6.11.1 CSV形式
        6.11.2 Excel形式
        6.11.3 Parquet形式
        6.11.4 その他の考慮すべきこと
    6.12 本章で学んだこと

第Ⅲ部 エクスプレッション

7章 エクスプレッションとは
    7.1 メソッドと名前空間
    7.2 エクスプレッションの例
        7.2.1 エクスプレッションを用いた列の選択
        7.2.2 エクスプレッションを用いた新しい列の作成
        7.2.3 エクスプレッションを用いた行のフィルタリング
        7.2.4 エクスプレッションで集約
        7.2.5 エクスプレッションを用いた行のソート
    7.3 エクスプレッションの定義
        7.3.1 エクスプレッションの性質
    7.4 エクスプレッションの作成
        7.4.1 既存の列からのエクスプレッション作成
        7.4.2 リテラル値からのエクスプレッション作成
        7.4.3 範囲からのエクスプレッション作成
        7.4.4 エクスプレッションを作成するその他の関数
    7.5 エクスプレッション名の変更
    7.6 慣用句としてのエクスプレッション
    7.7 本章で学んだこと

8章 エクスプレッションの継続
    8.1 演算の種類
        8.1.1 例A:要素単位の演算
        8.1.2 例B:1つに要約する演算
        8.1.3 例C:1つ以上に要約する演算
        8.1.4 例D:拡張する演算
    8.2 要素単位の演算
        8.2.1 数学的変換を行う演算
        8.2.2 三角関数関連の演算
        8.2.3 丸め、分類する演算
        8.2.4 欠損値および無限値の演算
        8.2.5 その他の演算
    8.3 行数を削減しないSeries単位の演算
        8.3.1 累積演算
        8.3.2 フィルとシフト演算
        8.3.3 重複値に関する演算
        8.3.4 移動統計量を計算する演算
        8.3.5 ソート演算
        8.3.6 その他の演算
    8.4 1つに要約するSeries単位の演算
        8.4.1 量化子による演算
        8.4.2 統計量を計算する演算
        8.4.3 カウント演算
        8.4.4 その他の演算
    8.5 複数に要約するSeries単位の演算
        8.5.1 一意な値に関係する演算
        8.5.2 選択演算
        8.5.3 欠損値を削除する演算
        8.5.4 その他の演算
    8.6 Series長を拡大するSeries単位の演算
    8.7 本章で学んだこと

9章 エクスプレッションを組み合わせる
    9.1 インライン演算子とメソッドの比較
    9.2 算術演算
    9.3 比較演算
    9.4 論理演算
    9.5 ビット演算
    9.6 関数の使用
        9.6.1 when, then, otherwise
    9.7 本章で学んだこと

第Ⅳ部 トランスフォーム

10章 列の選択と作成
    10.1 列の選択
        10.1.1 セレクタとは
        10.1.2 名前に基づく選択
        10.1.3 データ型に基づく選択
        10.1.4 位置に基づく選択
        10.1.5 セレクタを組み合わせる
    10.2 列の作成
    10.3 関連する列演算
        10.3.1 ドロップ
        10.3.2 名前変更
        10.3.3 スタッキング
        10.3.4 行インデックスを追加する
    10.4 本章で学んだこと

11章 行のフィルタリングとソート
    11.1 行をフィルタリングする
        11.1.1 エクスプレッションに基づくフィルタリング
        11.1.2 列名に基づくフィルタリング
        11.1.3 制約に基づくフィルタリング
    11.2 行をソートする
        11.2.1 単一列に基づくソート
        11.2.2 逆順ソート
        11.2.3 複数列に基づくソート
        11.2.4 エクスプレッションに基づくソート
        11.2.5 ネストデータ型を用いたソート
    11.3 関連する行演算
        11.3.1 欠損値のフィルタリング
        11.3.2 スライス
        11.3.3 最大と最小
        11.3.4 サンプリング
        11.3.5 セミジョイン
    11.4 本章で学んだこと

12章 テキスト関連、時間関連、ネストデータ型の扱い
    12.1 String
        12.1.1 Stringのメソッド
        12.1.2 Stringの例
    12.2 Categorical
        12.2.1 Categoricalのメソッド
        12.2.2 Categoricalの例
    12.3 Enum
    12.4 時間関連データ型
        12.4.1 時間関連メソッド
        12.4.2 時間関連データを用いた例
    12.5 List
        12.5.1 Listのメソッド
        12.5.2 Listの例
    12.6 Array
        12.6.1 Array
        12.6.2 Arrayの例
    12.7 Struct
        12.7.1 Structのメソッド
        12.7.2 Structの例
    12.8 本章で学んだこと

13章 要約と集約
    13.1 分割、適用、結合
    13.2 GroupByコンテキスト
        13.2.1 記述メソッド
        13.2.2 高度なメソッド
    13.3 行ごとの集約
    13.4 Selectコンテキストのウィンドウ関数
    13.5 動的グループ化
    13.6 移動集約
    13.7 アップサンプリング
    13.8 本章で学んだこと

14章 ジョインと連結
    14.1 ジョイン
        14.1.1 ジョイン戦略
        14.1.2 複数の列でジョインする
        14.1.3 検証
    14.2 厳密でないジョイン
        14.2.1 厳密でないジョインの戦略
        14.2.2 より詳細な制御
        14.2.3 ユースケース:マーケティングキャンペーンの貢献度
    14.3 縦方向と横方向の連結
        14.3.1 垂直連結
        14.3.2 水平連結
        14.3.3 対角連結
        14.3.4 整列連結
        14.3.5 リラックス
        14.3.6 スタッキング
        14.3.7 追加
        14.3.8 拡張
    14.4 本章で学んだこと

15章 リシェイプ
    15.1 ワイド形式とロング形式のDataFrame
    15.2 ピボットしてワイド形式のDataFrameにする
    15.3 ピボット解除してロング形式のDataFrameにする
    15.4 転置
    15.5 Explode
    15.6 複数のDataFrameへの分割
    15.7 本章で学んだこと

第Ⅴ部 高度なテクニック

16章 データの可視化
    16.1 ニューヨーク市自転車移動
    16.2 Altairによる組み込みのプロット
        16.2.1 Altairとは
        16.2.2 プロット名前空間のメソッド
        16.2.3 DataFrameのプロット
        16.2.4 大きすぎて扱えない
        16.2.5 Seriesのプロット
    16.3 hvPlotを使ったpandasと似たプロット
        16.3.1 hvPlot
        16.3.2 最初のプロット
        16.3.3 hvplot名前空間のメソッド
        16.3.4 バックアップとしてのpandas
        16.3.5 手動による変換
        16.3.6 プロットのバックエンドを変更する
        16.3.7 地図上に点をプロットする
        16.3.8 プロットの組み合わせ
        16.3.9 インタラクティブウィジェットを追加する
    16.4 plotnineによる出版品質のグラフィック
        16.4.1 plotnine
        16.4.2 探索のためのプロット
        16.4.3 コミュニケーションのためのプロット
    16.5 Great TableとしてDataFrameをフォーマット
    16.6 本章で学んだこと

17章 Polarsを拡張する
    17.1 Pythonのユーザ定義関数
        17.1.1 要素への適用
        17.1.2 Seriesへの適用
        17.1.3 グループへの適用
        17.1.4 エクスプレッションへの適用
        17.1.5 DataFrameとLazyFrameへの適用
    17.2 カスタム名前空間を登録する
    17.3 RustのPolarsプラグイン
        17.3.1 準備
        17.3.2 プラグインプロジェクトの内容
        17.3.3 プラグイン
        17.3.4 プラグインのコンパイル
        17.3.5 性能ベンチマーク
        17.3.6 引数の登録
        17.3.7 Rustクレートの使用
        17.3.8 ユースケース:geo
    17.4 本章で学んだこと

18章 Polarsの内部構造
    18.1 Polarsのアーキテクチャ
    18.2 Arrow
    18.3 マルチスレッド演算とSIMD演算
    18.4 Stringデータ型のメモリ上での表現
    18.5 SeriesのChunkedArray
    18.6 クエリの最適化
        18.6.1 LazyFrameにおけるスキャンレベルの最適化
        18.6.2 その他の最適化
    18.7 エクスプレッションのチェック
        18.7.1 meta名前空間の概要
        18.7.2 meta名前空間の例
    18.8 Polarsのプロファイリング
    18.9 Polarsにおけるテスト
        18.9.1 DataFrameとSeriesを比較する
    18.10 よくあるアンチパターン
        18.10.1 列の選択に角括弧を使う
        18.10.2 collectの誤用
        18.10.3 PolarクエリでPythonコードを使用する
    18.11 本章で学んだこと

付録 GPUによるPolarsの高速化
    A.1 NVIDIA RAPIDS
    A.2 GPUエンジンのインストール
        ステップ1:WSL2のWindowsへのインストール
        ステップ2:Ubuntu LinuxのWSL2へのインストール
        ステップ3:必要なUbuntu Linuxパッケージのインストール
        ステップ4:CUDAツールキットのインストール
        ステップ5:Pythonの依存ライブラリのインストール
        ステップ6:インストールのテスト
    A.3 Polars GPUエンジンを使う
        設定
        サポートされていない機能
    A.4 Polars GPUエンジンのベンチマーク
        ベンチマーク対象
        クエリとデータ
        ベンチマーク手法
        結果と考察
        結論
    A.5 GPUにおけるPolarsの未来
    A.6 本付録で学んだこと

索引