Pythonによるデータ分析入門 第3版

―pandas、NumPy、Jupyterを使ったデータ処理

[cover photo]
TOPICS
Programming , Python
発行年月日
PRINT LENGTH
612
ISBN
978-4-8144-0019-5
原書
Python for Data Analysis, 3rd Edition
FORMAT
Print PDF EPUB
Ebook
4,400円
Ebookを購入する
Print
4,400円

NumPy、SciPy、pandas、Matplotlib、Jupyterをはじめ、高機能で使いやすい数学・科学計算用ライブラリが充実しているPythonは、科学計算、統計解析、機械学習のみならず、金融や経済分野でも広く利用されています。本書はPythonの代表的なデータ分析ツール、pandasの開発者Wes McKinneyによる、データ分析を行うための基本を網羅しています。すべてのサンプルコードはダウンロード可能で、Jupyter Notebookで対話的に試し、実際に手を動かしながら知識を確実なものにすることが可能です。pandas 2.0に対応した待望の改訂版です。

目次

まえがき

1章 はじめに
    1.1 はじめに
        1.1.1 どういうデータを扱うのか
    1.2 なぜPythonをデータ分析に使うのか
        1.2.1 「糊(グルー)」としてのPython
        1.2.2 「2つの言語」問題を解決する
        1.2.3 Pythonを使うべきではないケース
    1.3 必須のPythonライブラリ
        1.3.1 NumPy
        1.3.2 pandas
        1.3.3 matplotlib
        1.3.4 IPythonとJupyter
        1.3.5 SciPy
        1.3.6 scikit-learn
        1.3.7 statsmodels
        1.3.8 その他のパッケージ
    1.4 インストールとセットアップ
        1.4.1 Miniconda(Windows)
        1.4.2 GNU/Linux
        1.4.3 Miniconda(macOS)
        1.4.4 必要なパッケージのインストール
        1.4.5 統合開発環境(IDE)とテキストエディタ
    1.5 コミュニティとカンファレンス
    1.6 この本の案内
        1.6.1 コード例
        1.6.2 例で使用しているデータ
        1.6.3 インポートにおける慣習

2章 Pythonの基礎、IPythonとJupyter Notebook
    2.1 Pythonインタプリタ
    2.2 IPythonの基礎
        2.2.1 IPythonシェルの起動
        2.2.2 Jupyter Notebookの実行
        2.2.3 タブ補完
        2.2.4 イントロスペクション
    2.3 Pythonの基礎
        2.3.1 セマンティクス
        2.3.2 スカラー型
        2.3.3 制御フロー
    2.4 まとめ

3章 Python組み込みのデータ構造と関数、ファイルの扱い
    3.1 データ構造とシーケンス
        3.1.1 タプル
        3.1.2 リスト
        3.1.3 ディクショナリ
        3.1.4 セット
        3.1.5 組み込みのシーケンス関数
        3.1.6 リスト、セット、ディクショナリの内包表記
    3.2 関数
        3.2.1 名前空間、スコープ、ローカル関数
        3.2.2 複数の値を返す
        3.2.3 関数はオブジェクトである
        3.2.4 無名(ラムダ)関数
        3.2.5 ジェネレータ
        3.2.6 エラーと例外の処理
    3.3 ファイルとオペレーティングシステム
        3.3.1 ファイルにおけるバイトとUnicode
    3.4 まとめ

4章 NumPyの基礎:配列とベクトル演算
    4.1 NumPy ndarray:多次元配列オブジェクト
        4.1.1 ndarrayの生成
        4.1.2 ndarrayのデータ型
        4.1.3 ndarrayの算術演算
        4.1.4 インデックス参照とスライシングの基礎
        4.1.5 ブールインデックス参照
        4.1.6 ファンシーインデックス参照
        4.1.7 転置行列、行と列の入れ替え
    4.2 擬似乱数の生成
    4.3 ユニバーサル関数:すべての配列要素への関数適用
    4.4 ndarrayによる配列指向プログラミング
        4.4.1 条件制御のndarrayでの表現
        4.4.2 数学関数、統計関数
        4.4.3 真偽値配列関数
        4.4.4 ソート
        4.4.5 集合関数:uniqueなど
    4.5 ndarrayのファイル入出力
    4.6 行列計算
    4.7 例:ランダムウォーク
        4.7.1 多重ランダムウォーク
    4.8 まとめ

5章 pandas入門
    5.1 pandasのデータ構造
        5.1.1 シリーズ(Series)
        5.1.2 データフレーム(DataFrame)
        5.1.3 インデックスオブジェクト
    5.2 pandasの重要な機能
        5.2.1 再インデックス付け
        5.2.2 軸から要素を削除する
        5.2.3 インデックス参照、選択、フィルタリング
        5.2.4 算術とデータの整形
        5.2.5 関数の適用とマッピング
        5.2.6 ソートとランク
        5.2.7 重複したラベルを持つ軸のインデックス
    5.3 集約と要約統計量の計算
        5.3.1 相関と共分散
        5.3.2 一意な値、頻度の確認、所属の確認
    5.4 まとめ

6章 データの読み込み、書き出しとファイル形式
    6.1 テキスト形式のデータの読み書き
        6.1.1 テキストファイルを少しずつ読み込む
        6.1.2 テキスト形式でのデータの書き出し
        6.1.3 その他の区切り文字で区切られた形式を操作する
        6.1.4 JSONデータ
        6.1.5 XMLとHTML:ウェブスクレイピング
    6.2 バイナリデータ形式
        6.2.1 Microsoft Excelファイルの読み込み
        6.2.2 HDF5形式の使用
    6.3 Web APIを用いたデータの取得
    6.4 データベースからのデータの取得
    6.5 まとめ

7章 データのクリーニングと前処理
    7.1 欠損値の取り扱い
        7.1.1 欠損値を取り除く
        7.1.2 欠損値を穴埋めする
    7.2 データの変形
        7.2.1 重複の除去
        7.2.2 関数やマッピングを用いたデータの変換
        7.2.3 値の置き換え
        7.2.4 軸のインデックスの名前を変更する
        7.2.5 離散化とビニング
        7.2.6 外れ値の検出と除去
        7.2.7 順列(ランダムな並べ替え)やランダムサンプリング
        7.2.8 標識変数やダミー変数の計算
    7.3 拡張データ型
    7.4 文字列操作
        7.4.1 Python組み込みの文字列オブジェクトのメソッド
        7.4.2 正規表現
        7.4.3 pandasの文字列関数
    7.5 カテゴリ型データ
        7.5.1 開発の背景と動機
        7.5.2 pandasにおけるカテゴリ拡張データ型
        7.5.3 カテゴリを用いた計算
        7.5.4 カテゴリメソッド
    7.6 まとめ

8章 データラングリング:連結、結合、変形
    8.1 階層型インデックス
        8.1.1 階層の順序変更やソート
        8.1.2 階層ごとの要約統計量
        8.1.3 データフレームの列をインデックスに使う
    8.2 データセットの結合とマージ
        8.2.1 データフレームをデータベース風に結合する
        8.2.2 インデックスによるマージ
        8.2.3 軸に沿った連結
        8.2.4 重複のあるデータの結合
    8.3 変形とピボット操作
        8.3.1 階層型インデックスによる変形
        8.3.2 「縦持ち」形式から「横持ち」形式へのピボット
        8.3.3 「横持ち」形式から「縦持ち」形式へのピボット
    8.4 まとめ

9章 プロットと可視化
    9.1 Matplotlib APIの概要
        9.1.1 図とサブプロット
        9.1.2 色、マーカー、線種
        9.1.3 目盛り、ラベル、凡例
        9.1.4 サブプロットへの注釈や描画
        9.1.5 プロットのファイルへの保存
        9.1.6 Matplotlibの設定
    9.2 pandasやseabornを用いたプロット
        9.2.1 折れ線グラフ
        9.2.2 棒グラフ
        9.2.3 ヒストグラムと密度プロット
        9.2.4 散布図
        9.2.5 ファセットグリッドとカテゴリ型データ
    9.3 その他のPython用可視化ツール
    9.4 まとめ

10章 データの集約とグループ操作
    10.1 グループ操作の考え方
        10.1.1 グループごとの繰り返し
        10.1.2 列や列の集合の選択
        10.1.3 ディクショナリやシリーズのグループ化
        10.1.4 関数を使ったグループ化
        10.1.5 インデックス階層によるグループ化
    10.2 データの集約
        10.2.1 列に複数の関数を適用する
        10.2.2 集約結果のデータの行にインデックスを付けずに返す
    10.3 applyメソッド:一般的な分離―適用―結合の方法
        10.3.1 グループキーの抑制
        10.3.2 分位点とビン分析
        10.3.3 例:グループ固有の値で欠損値を埋める
        10.3.4 例:ランダムサンプリングと順列
        10.3.5 例:グループの加重平均と相関
        10.3.6 例:グループ単位の線形回帰
    10.4 グループ変換と「むき出し」のグループ操作
    10.5 ピボットテーブルとクロス集計
        10.5.1 クロス集計:crosstabメソッド
    10.6 まとめ

11章 時系列データ
    11.1 日付や時刻を扱うデータ型とツール
        11.1.1 文字列とdatetimeの変換
    11.2 時系列の基本
        11.2.1 インデックス参照、データの選択、サブセットの抽出
        11.2.2 重複したインデックスを持つ時系列
    11.3 日付範囲、頻度、シフト
        11.3.1 日付範囲の生成
        11.3.2 頻度と日付オフセット
        11.3.3 データの前方と後方へのシフト
    11.4 タイムゾーンを扱う
        11.4.1 タイムゾーンのローカライゼーションと変換
        11.4.2 タイムゾーン情報を考慮した(アウェアな)タイムスタンプオブジェクト
        11.4.3 異なるタイムゾーン同士の演算
    11.5 期間を使った算術演算
        11.5.1 期間頻度の変換
        11.5.2 四半期の頻度
        11.5.3 タイムスタンプから期間への変換(とその逆)
        11.5.4 配列からPeriodIndexを作成する
    11.6 再サンプリングと頻度変換
        11.6.1 ダウンサンプリング
        11.6.2 アップサンプリングと穴埋め
        11.6.3 期間で再サンプリングする
        11.6.4 時系列データの再サンプリングを伴うグループ化
    11.7 移動窓関数
        11.7.1 指数加重関数
        11.7.2 2つの時系列に対する移動窓関数
        11.7.3 ユーザ定義の移動窓関数
    11.8 まとめ

12章 Pythonにおけるモデリングライブラリ入門
    12.1 pandasとモデルとのやり取りを行う
    12.2 Patsyを使ったモデルの記述
        12.2.1 Patsy式におけるデータ変換
        12.2.2 カテゴリ型データとPatsy
    12.3 statsmodels入門
        12.3.1 線形モデルの推定
        12.3.2 時系列モデルの推定
    12.4 scikit-learn入門
    12.5 まとめ

13章 データ分析の実例
    13.1 短縮URL Bitlyにおける1.usa.govからの変換データ
        13.1.1 Pythonのみを用いたタイムゾーン情報の集計
        13.1.2 pandasを使用したタイムゾーン情報の集計
    13.2 MovieLens 1M(映画評価データ)
        13.2.1 評価の分かれた映画の抽出
    13.3 アメリカの赤ちゃんに名付けられた名前リスト(1880-2010)
        13.3.1 名付けの傾向分析
    13.4 アメリカ合衆国農務省の食糧データベース
    13.5 2012年度連邦選挙委員会データベース
        13.5.1 職業別・雇用者別の寄付の分析
        13.5.2 寄付金の額の分布調査
        13.5.3 州ごとの寄付の分析
    13.6 まとめ

付録A NumPy:応用編
    A.1 ndarrayオブジェクトの内部構造
        A.1.1 NumPyのデータ型の階層構造
    A.2 配列操作:応用編
        A.2.1 配列の形状の再成形
        A.2.2 C型の順序とFORTRAN型の順序
        A.2.3 配列の連結と分割
        A.2.4 要素の繰り返し:tileとrepeat
        A.2.5 ファンシーインデックス参照の別法:takeとput
    A.3 ブロードキャスト
        A.3.1 他の軸へのブロードキャスト
        A.3.2 ブロードキャストによる配列への値の設定
    A.4 ufuncの使い方:応用編
        A.4.1 ufuncのインスタンスメソッド
        A.4.2 Pythonで新しいufuncを書く方法
    A.5 構造化配列とレコード配列
        A.5.1 入れ子構造を持つデータ型と多次元フィールド
        A.5.2 構造化配列を使うべき理由
    A.6 ソートについてさらに詳しく
        A.6.1 間接ソート:argsortとlexsort
        A.6.2 使用可能な他のソートアルゴリズム
        A.6.3 配列の一部分をソートする
        A.6.4 numpy.searchsorted:ソート済みの配列内で要素を探す
    A.7 Numbaを用いて高速なNumPy関数を書く
        A.7.1 独自定義のnumpy.ufuncオブジェクトをNumbaを用いて作成する
    A.8 配列の入出力:応用編
        A.8.1 メモリマップファイル
        A.8.2 HDF5やその他の配列保存方法
    A.9 パフォーマンス改善のための豆知識
        A.9.1 連続したメモリの重要性

付録B IPythonシステム:上級編
    B.1 ターミナルキーボードショートカット
    B.2 マジックコマンドについて
        B.2.1 %runコマンド
        B.2.2 クリップボードからコードを実行する
    B.3 コマンド履歴を使う
        B.3.1 コマンド履歴の検索と再利用
        B.3.2 入出力変数
    B.4 オペレーティングシステムとの連携
        B.4.1 シェルコマンドとエイリアス
        B.4.2 ディレクトリブックマークシステム
    B.5 ソフトウェア開発ツール
        B.5.1 対話的なデバッガ
        B.5.2 処理時間の計測:%timeと%timeit
        B.5.3 プロファイリングの基礎:%prunと%run -p
        B.5.4 行ごとのプロファイリング
    B.6 IPythonでの生産的コード開発に向けたヒント
        B.6.1 依存関係を考慮したモジュールの再読み込み
        B.6.2 コード設計のヒント
    B.7 高度なIPython機能
        B.7.1 IPythonプロファイルと設定機能
    B.8 まとめ

索引