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

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

内容

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

関連書籍

目次

訳者まえがき
まえがき

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.4 インストールとセットアップ
        1.4.1 Windows
        1.4.2 Apple(macOS)
        1.4.3 GNU/Linux
        1.4.4 Pythonパッケージのインストールとアップデート
        1.4.5 Python 2とPython 3
        1.4.6 統合開発環境(IDE)とテキストエディタ
    1.5 コミュニティとカンファレンス
    1.6 この本の案内
        1.6.1 コード例
        1.6.2 例で使用しているデータ
        1.6.3 インポートにおける慣習
        1.6.4 専門用語(ジャーゴン、Jargon)

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.2.5 %runコマンド
        2.2.6 クリップボード経由の実行
        2.2.7 IPythonのキーボードショートカット
        2.2.8 マジックコマンド
        2.2.9 Matplotlibとの連携
    2.3 Pythonの基礎
        2.3.1 セマンティクス
        2.3.2 スカラー型
        2.3.3 制御フロー

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.2.7 エラーと例外の処理
    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 ndarrayによる配列指向プログラミング
        4.3.1 条件制御のndarrayでの表現
        4.3.2 数学関数、統計関数
        4.3.3 真偽値配列関数
        4.3.4 ソート
        4.3.5 集合関数:uniqueなど
    4.4 ndarrayのファイル入出力
    4.5 行列計算
    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.2.8 重複したラベルを持つ軸のインデックス
    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 HDF5形式の使用
        6.2.2 Microsoft Excelファイルの読み込み
    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.3.1 文字列オブジェクトのメソッド
        7.3.2 正規表現
        7.3.3 pandasにおける文字列関数のベクトル化
    7.4 まとめ

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 GroupByの仕組み
        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.4.1 クロス集計:crosstabメソッド
    10.5 まとめ

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.7 移動する窓関数
        11.7.1 指数加重関数
        11.7.2 2つ値がある場合の移動する窓関数
        11.7.3 ユーザ定義の移動する窓関数
    11.8 まとめ

12章 pandas:応用編
    12.1 カテゴリ型データ
        12.1.1 開発の背景と動機
        12.1.2 pandasにおけるカテゴリ型
        12.1.3 カテゴリを用いた計算
        12.1.4 カテゴリメソッド
    12.2 グループ演算の使い方:応用編
        12.2.1 グループの変換とGroupByの「分解」
        12.2.2 時系列データの再サンプリングを伴うグループ化
    12.3 メソッドチェーンを行うためのテクニック
        12.3.1 pipeメソッド
    12.4 まとめ

13章 Pythonにおけるモデリングライブラリ入門
    13.1 pandasとモデルとのやり取りを行う
    13.2 Patsyを使ったモデルの記述
        13.2.1 Patsy式におけるデータ変換
        13.2.2 カテゴリ型データとPatsy
    13.3 statsmodels入門
        13.3.1 線形モデルの推定
        13.3.2 時系列モデルの推定
    13.4 scikit-learn入門
    13.5 この後の学びのために

14章 データ分析の実例
    14.1 短縮URL Bitlyにおける1.usa.govへの変換データ
        14.1.1 Python標準機能でのタイムゾーン情報の集計
        14.1.2 pandasを使用したタイムゾーン情報の集計
    14.2 MovieLens 1M(映画評価データ)
        14.2.1 評価の分かれた映画の抽出
    14.3 アメリカの赤ちゃんに名付けられた名前リスト(1880-2010)
        14.3.1 名付けの傾向分析
    14.4 アメリカ合衆国農務省の食糧データベース
    14.5 2012年度連邦選挙委員会データベース
        14.5.1 職業別・雇用者別の寄付の分析
        14.5.2 寄付金額ごとの分析
        14.5.3 州ごとの寄付の分析
    14.6 まとめ

付録A NumPy:応用編
    A.1 ndarrayオブジェクトの内部構造
        A.1.1 NumPy dtypeの階層構造
    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 ネストした構造を持つdtypeと多次元フィールド
        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.1.1 コマンド履歴の検索とその再利用
        B.1.2 入出力変数
    B.2 オペレーティングシステムとの連携
        B.2.1 シェルコマンドとエイリアス(別名定義)
        B.2.2 ディレクトリブックマークシステム
    B.3 ソフトウェア開発ツール
        B.3.1 対話的デバッガ
        B.3.2 処理時間の計測:%timeと%timeit
        B.3.3 プロファイリングの基礎:%prunと%run -p
        B.3.4 行ごとのプロファイリング
    B.4 IPythonでの生産的コード開発に向けたヒント
        B.4.1 依存関係を考慮したモジュールの再読み込み
        B.4.2 コード設計のヒント
    B.5 高度なIPython機能
        B.5.1 自前のクラスのIPythonへの親和性を高める技法
        B.5.2 IPythonプロファイルと構成機能
    B.6 まとめ

索引


正誤表