Pythonデータサイエンスハンドブック 第2版

―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

[cover photo]
TOPICS
Data Science , Python
発行年月日
PRINT LENGTH
576
ISBN
978-4-8144-0063-8
原書
Python Data Science Handbook, 2nd Edition
FORMAT
Print PDF EPUB
Ebook
4,840円
Ebookを購入する
Print
4,840円

Pythonのデータサイエンス用のツールを使いこなすための実用的な情報が詰め込まれたリファレンスの待望の改訂版です。IPythonとJupyter、NumPy、pandas、Matplotlib、scikit-learnを利用し、データの操作、可視化、行列計算、時系列解析、統計分析、機械学習、データモデルの構築、複雑な科学計算まで、幅広いトピックをカバー。それぞれのトピックについて、押さえておくべき基本、tips、便利なコマンドなどを紹介します。Pythonでデータ処理を行う人にとってはいつも手元に置いておきたい「使える」一冊です。

目次

『Python Data Science Handbook, Second Edition』への称賛
訳者まえがき
はじめに 

Ⅰ部 Jupyter:Pythonより優れたPython 

1章 IPython、Jupyter入門 
    1.1 IPythonシェルの起動 
    1.2 Jupyter Notebookの起動 
    1.3 IPythonのヘルプシステムとドキュメント 
        1.3.1 ?文字を使ったドキュメントの検索 
        1.3.2 ??文字を使ったソースコードの探索 
        1.3.3 Tab補完を使ったモジュールの調査 
    1.4 IPythonシェルのキーボードショートカット 
        1.4.1 ナビゲーションショートカット 
        1.4.2 テキスト入力ショートカット 
        1.4.3 コマンド履歴ショートカット 
        1.4.4 その他のショートカット 

2章 強化された対話機能 
    2.1 IPython Magicコマンド 
        2.1.1 外部コードの実行:%run 
        2.1.2 コードの実行時間計測:%timeit 
        2.1.3 Magicコマンドのヘルプ:?、%magic、%lsmagic 
    2.2 入力と出力の履歴 
        2.2.1 IPythonのIn/Outオブジェクト
        2.2.2 アンダースコアショートカットと過去の出力 
        2.2.3 出力の抑止 
        2.2.4 関連するMagicコマンド 
    2.3 IPythonとシェルコマンド 
        2.3.1 シェルの概要 
        2.3.2 IPythonからのシェルコマンド実行 
        2.3.3 シェルとの値の受け渡し 
        2.3.4 シェルに関連するMagicコマンド 

3章 デバッグとプロファイル 
    3.1 エラーとデバッグ 
        3.1.1 例外の制御:%xmode 
        3.1.2 デバッグ:トレースバックの情報では不十分な場合 
    3.2 コードのプロファイリングと実行時間の計測 
        3.2.1 コード断片の実行時間を計測する:%timeitと%time 
        3.2.2 コード全体のプロファイリング:%prun 
        3.2.3 %lprunによる行単位のプロファイリング 
        3.2.4 メモリのプロファイリング:%memitと%mprun 
    3.3 その他のIPythonリソース 
        3.3.1 Webリソース 
        3.3.2 書籍 

Ⅱ部 NumPyの基礎 

4章 Pythonのデータ型 
    4.1 単なる整数ではないPythonの整数 
    4.2 単なるリストではないPythonのリスト 
    4.3 Pythonの型固定配列 
    4.4 PythonリストからNumPy配列作成 
    4.5 NumPy配列の作成 
    4.6 NumPyの標準データ型 

5章 NumPy配列の基礎 
    5.1 NumPy配列の属性 
    5.2 配列インデクス:配列の要素にアクセスする 
    5.3 配列のスライス:部分配列にアクセスする 
        5.3.1 1次元配列のスライス
        5.3.2 多次元配列のスライス 
        5.3.3 コピーではなくビューである部分配列 
        5.3.4 配列のコピー 
    5.4 配列の形状変更 
    5.5 配列の連結と分割 
        5.5.1 配列の連結 
        5.5.2 配列の分割 

6章 NumPy配列の計算:ユニバーサル関数 
    6.1 低速なループ処理 
    6.2 ufuncの基礎 
    6.3 NumPy ufuncの探求 
        6.3.1 配列演算 
        6.3.2 絶対値 
        6.3.3 三角関数 
        6.3.4 指数関数と対数関数 
        6.3.5 専門的なufunc 
    6.4 高度なufuncの機能 
        6.4.1 出力の指定 
        6.4.2 集約 
        6.4.3 直積 
    6.5 ufunc:より詳しく 

7章 集約:最大、最小、その他データの性質を表すもの 
    7.1 配列の合計 
    7.2 最大と最小 
        7.2.1 多次元配列の集約 
        7.2.2 その他の集約関数 
    7.3 事例:米国大統領の平均身長は? 

8章 配列の計算:ブロードキャスト 
    8.1 ブロードキャストの基礎 
    8.2 ブロードキャストのルール 
        8.2.1 ブロードキャスト例1 
        8.2.2 ブロードキャスト例2 
        8.2.3 ブロードキャスト例3
    8.3 ブロードキャストの実践 
        8.3.1 配列のセンタリング 
        8.3.2 2次元関数のプロット 

9章 比較、マスク、ブール論理 
    9.1 事例:雨天日数 
    9.2 ufuncの比較演算子 
    9.3 ブール値配列の操作 
        9.3.1 要素のカウント 
        9.3.2 ブール演算子 
    9.4 マスクとしてのブール値配列 
    9.5 キーワードと演算子(andとor、&と|)

10章 ファンシーインデクス 
    10.1 ファンシーインデクスの探求 
    10.2 インデクスの組み合わせ 
    10.3 事例:ランダムポイントの選択 
    10.4 ファンシーインデクスを使った値の変更 
    10.5 事例:ヒストグラム化のためのデータ分類 

11章 配列のソート 
    11.1 NumPyの高速ソート:np.sortとnp.argsort 
    11.2 行または列に沿ったソート 
    11.3 部分ソート:分割(partitioning)
    11.4 事例:k近傍法 

12章 構造化データ:NumPyの構造化配列 
    12.1 構造化配列の作成方法 
    12.2 より高度な複合型 
    12.3 RecordArrays:構造化配列の変形版 
    12.4 pandasへ 

Ⅲ部 pandasによるデータ操作 

13章 pandasオブジェクトの基礎 
    13.1 Seriesオブジェクト 
        13.1.1 一般化したNumPy配列としてのSeries 
        13.1.2 特殊な辞書としてのSeries
        13.1.3 Seriesオブジェクトの作成 
    13.2 DataFrameオブジェクト 
        13.2.1 一般化したNumPy配列としてのDataFrame 
        13.2.2 特殊な辞書としてのDataFrame 
        13.2.3 DataFrameオブジェクトの作成 
    13.3 Indexオブジェクト 
        13.3.1 不変配列としてのIndex 
        13.3.2 順序付き集合(set)としてのIndex 

14章 インデクスとデータの選択 
    14.1 Seriesのデータ選択 
        14.1.1 辞書としてのSeries 
        14.1.2 1次元配列としてのSeries 
        14.1.3 インデクス属性:locとiloc 
    14.2 DataFrameのデータ選択 
        14.2.1 辞書としてのDataFrame 
        14.2.2 2次元配列としてのDataFrame 
        14.2.3 その他のインデクス規則 

15章 pandasデータの操作 
    15.1 ufunc:インデクスの保存 
    15.2 ufunc:インデクスの整列 
        15.2.1 Seriesオブジェクトのインデクス整列 
        15.2.2 DataFrameオブジェクトのインデクス整列 
    15.3 ufunc:DataFrameとSeriesとの演算 

16章 欠損値の扱い 
    16.1 欠損値表現のトレードオフ 
    16.2 pandasの欠損値 
        16.2.1 特殊値None 
        16.2.2 数値データの欠損値NaN 
        16.2.3 pandasにおけるNaNとNone 
    16.3 null可能なdtype 
    16.4 null値が存在する場合の処理 
        16.4.1 null値の検出 
        16.4.2 欠損値の除外
        16.4.3 欠損値への値設定 

17章 階層型インデクス 
    17.1 多重インデクスを持つSeries 
        17.1.1 誤った方法 
        17.1.2 より良い方法:MultiIndex 
        17.1.3 多次元のMultiIndex 
    17.2 MultiIndexの作成手段 
        17.2.1 明示的なMultiIndexの作成 
        17.2.2 MultiIndexの階層名 
        17.2.3 列に対するMultiIndex 
    17.3 MultiIndexのインデクス指定とスライス 
        17.3.1 多重インデクスSeries 
        17.3.2 多重インデクスDataFrame 
    17.4 多重インデクスの並べ替え 
        17.4.1 ソートされたインデクスとソートされていないインデクス 
        17.4.2 インデクスのstackとunstack 
        17.4.3 インデクスの設定と再設定 

18章 データセットの連結:concatとappend 
    18.1 再掲:NumPy配列の連結 
    18.2 pd.concatによる単純な連結 
        18.2.1 インデクスの重複 
        18.2.2 joinによる連結 
        18.2.3 appendメソッド 

19章 データセットの連結:マージと結合 
    19.1 関係代数 
    19.2 結合の種類 
        19.2.1 1対1結合 
        19.2.2 多対1結合 
        19.2.3 多対多結合 
    19.3 キーの指定 
        19.3.1 onオプション 
        19.3.2 left_onとright_onオプション 
        19.3.3 left_indexとright_indexオプション
    19.4 結合に対する集合演算の指定 
    19.5 列名の重複:suffixesオプション 
    19.6 事例:米国州データ 

20章 集約とグループ化 
    20.1 惑星(planets)データ 
    20.2 pandasによる単純な集約 
    20.3 groupby:分割、適用、結合 
        20.3.1 分割、適用、結合 
        20.3.2 GroupByオブジェクト 
        20.3.3 集約、フィルタ、変換、適用 
        20.3.4 分割キーの指定 
        20.3.5 グループ化の例 

21章 ピボットテーブル 
    21.1 ピボットテーブルの必要性 
    21.2 手作業のピボットテーブル作成 
    21.3 ピボットテーブルの構文 
        21.3.1 多重ピボットテーブル 
        21.3.2 その他のピボットテーブルオプション 
    21.4 事例:出生率データ 

22章 文字列操作のベクトル化 
    22.1 pandas文字列操作の基礎 
    22.2 pandas文字列操作メソッドの一覧 
        22.2.1 Pythonの文字列メソッドと類似のメソッド 
        22.2.2 正規表現を使用するメソッド 
        22.2.3 その他のメソッド 
    22.3 事例:レシピデータベース 
        22.3.1 単純なレシピ推奨システム 
        22.3.2 さらにレシピについて 

23章 時系列 
    23.1 Pythonの日付と時刻 
        23.1.1 Python組み込みの日付と時刻:datetimeとdateutil 
        23.1.2 時間の型付き配列:NumPyのdatetime64 
        23.1.3 pandasの日付と時刻:両者のいいとこ取り
    23.2 pandasの時系列:時刻によるインデクス 
    23.3 pandasの時系列データ構造 
    23.4 規則的なシーケンス:pd.date_range 
    23.5 頻度とオフセット 
    23.6 再サンプリング、シフト、ウィンドウ 
        23.6.1 再サンプリングと頻度変換 
        23.6.2 時間シフト 
        23.6.3 移動するウィンドウ関数 
    23.7 事例:シアトル市の自転車数の可視化 
        23.7.1 データの可視化 
        23.7.2 データの深掘り 

24章 ハイパフォーマンスpandas:evalとquery 
    24.1 queryとevalの必要性:複合表現 
    24.2 pandas.evalによる効率的実行 
    24.3 DataFrame.evalによる列単位の操作 
        24.3.1 DataFrame.evalを使用した代入 
        24.3.2 DataFrame.eval内のローカル変数 
    24.4 DataFrame.queryメソッド 
    24.5 パフォーマンス:これらの機能を使うべき場合 
    24.6 参考資料 

Ⅳ部 Matplotlibによる可視化 

25章 Matplotlibの基礎知識 
    25.1 Matplotlibのインポート 
    25.2 スタイルの設定 
    25.3 showするかshowしないか?描画を表示する方法 
        25.3.1 Pythonスクリプトからプロット 
        25.3.2 IPythonシェルからプロット 
        25.3.3 Jupyter Notebookからプロット 
        25.3.4 結果のファイル保存 
        25.3.5 同じ結果を得る2つのインターフェイス

26章 単純な線グラフ 
    26.1 プロットの制御:線の色とスタイル 
    26.2 プロットの制御:座標軸の範囲
    26.3 プロットへのラベル付け 
    26.4 Matplotlib雑学 

27章 単純な散布図 
    27.1 plt.plotを使った散布図 
    27.2 plt.scatterを使った散布図 
    27.3 plotメソッド対scatterメソッド:効率に関する注意点 
    27.4 誤差の可視化 
        27.4.1 基本的なエラーバー 
        27.4.2 連続誤差 

28章 密度と等高線図 
    28.1 3次元関数の可視化 
    28.2 ヒストグラム、ビニング、密度 
    28.3 2次元のヒストグラムとビニング 
        28.3.1 plt.hist2d:2次元ヒストグラム 
        28.3.2 plt.hexbin:六角形のビニング 
        28.3.3 カーネル密度推定 

29章 凡例のカスタマイズ 
    29.1 凡例要素の選択 
    29.2 点の大きさの凡例 
    29.3 複数の凡例 

30章 カラーバーのカスタマイズ 
    30.1 カラーバーのカスタマイズ 
        30.1.1 カラーマップの選択 
        30.1.2 色の範囲制限と拡張 
        30.1.3 離散的カラーバー 
    30.2 事例:手書きの数字 

31章 複数サブプロット 
    31.1 plt.axes:手作業によるサブプロット作成 
    31.2 plt.subplot:サブプロットの単純なグリッド 
    31.3 plt.subplots:グリッド全体を一度に作成 
    31.4 plt.GridSpec:より複雑な配置

32章 テキストと注釈 
    32.1 事例:米国出生率における休日の影響 
    32.2 テキスト位置の変換 
    32.3 矢印と注釈 

33章 目盛のカスタマイズ 
    33.1 主目盛と補助目盛 
    33.2 非表示の目盛とラベル 
    33.3 目盛の増減 
    33.4 目盛フォーマットの調整 
    33.5 FormatterとLocatorのまとめ 

34章 Matplotlibのカスタマイズ:設定とスタイルシート 
    34.1 手作業でカスタマイズ 
    34.2 デフォルトの変更:rcParams 
    34.3 スタイルシート 
        34.3.1 デフォルトスタイル 
        34.3.2 FiveThirtyEightスタイル 
        34.3.3 ggplot 
        34.3.4 ハッカーのためのベイジアンメソッドスタイル 
        34.3.5 暗い背景スタイル 
        34.3.6 グレースケール 
        34.3.7 seabornスタイル 

35章 Matplotlibを使った3次元プロット 
    35.1 3次元の点と線 
    35.2 3次元等高線図 
    35.3 ワイヤーフレームとサーフェス 
    35.4 三角分割のサーフェス 
    35.5 事例:メビウスの帯の可視化 

36章 seabornによる可視化 
    36.1 seabornプロットの調査 
        36.1.1 ヒストグラム、KDE、密度 
        36.1.2 ペアプロット 
        36.1.3 層別ヒストグラム
    36.2 カテゴリプロット 
        36.2.1 結合分布 
        36.2.2 棒グラフ 
    36.3 事例:マラソンの完走時間の調査 
    36.4 その他のリソース 
    36.5 その他のPython用可視化ライブラリ 

Ⅴ部 機械学習 

37章 機械学習とは? 
    37.1 機械学習の分類 
    37.2 機械学習の定性的応用例 
        37.2.1 分類:離散ラベルの予測 
        37.2.2 回帰:連続ラベルの予測 
        37.2.3 クラスタリング:ラベルなしデータのラベル推定 
        37.2.4 次元削減:ラベルなしデータ構造の推定 
    37.3 まとめ 

38章 scikit-learnの基礎 
    38.1 scikit-learnのデータ表現 
        38.1.1 特徴量行列 
        38.1.2 目的配列 
    38.2 scikit-learnの推定器API 
        38.2.1 APIの基礎 
        38.2.2 教師あり学習例:線形回帰 
        38.2.3 教師あり学習の事例:アイリスの分類 
        38.2.4 教師なし学習の事例:アイリス次元数 
        38.2.5 教師なし学習の例:アイリスクラスタリング 
    38.3 応用:手書き数字の調査 
        38.3.1 数字データの読み込みと可視化 
        38.3.2 教師なし学習:次元削減 
        38.3.3 数字の分類 
    38.4 まとめ 

39章 ハイパーパラメータとモデルの検証 
    39.1 モデル検証に関する考察 
        39.1.1 誤ったモデル検証方法
        39.1.2 正しいモデル検証方法:ホールドアウトセット 
        39.1.3 交差検証によるモデルの検証 
    39.2 最適なモデルの選択 
        39.2.1 バイアス-バリアンストレードオフ 
        39.2.2 scikit-learnを使用した検証曲線の作成 
    39.3 学習曲線 
    39.4 検証の実践:グリッドサーチ 
    39.5 まとめ 

40章 特徴量エンジニアリング 
    40.1 カテゴリ特徴量 
    40.2 テキスト特徴量 
    40.3 画像特徴量 
    40.4 導出特徴量 
    40.5 欠損データの補完 
    40.6 特徴量パイプライン 

41章 詳細:ナイーブベイズ分類 
    41.1 ベイズ分類 
    41.2 ガウシアンナイーブベイズ 
    41.3 多項分布ナイーブベイズ 
        41.3.1 事例:テキストの分類 
    41.4 ナイーブベイズをいつ使用すべきか 

42章 詳細:線形回帰 
    42.1 単回帰 
    42.2 基底関数回帰 
        42.2.1 多項式基底関数 
        42.2.2 ガウス基底関数 
    42.3 正則化 
        42.3.1 リッジ回帰(L2正則化)
        42.3.2 Lasso正則化(L1)
    42.4 事例:自転車の交通量予測 

43章 詳細:サポートベクターマシン 
    43.1 サポートベクターマシンの必要性 
    43.2 サポートベクターマシン:マージンの最大化
        43.2.1 サポートベクターマシンへの当てはめ 
        43.2.2 線形には分類できないデータ:カーネルSVM 
        43.2.3 SVMの調整:ソフトマージン 
    43.3 事例:顔認識 
    43.4 まとめ 

44章 詳細:決定木とランダムフォレスト 
    44.1 ランダムフォレストの必要性:決定木 
        44.1.1 決定木の作成 
        44.1.2 決定木と過剰適合 
    44.2 推定器の組み合わせ:ランダムフォレスト 
    44.3 ランダムフォレスト回帰 
    44.4 事例:ランダムフォレストによる文字認識 
    44.5 まとめ 

45章 詳細:主成分分析 
    45.1 主成分分析の基礎 
        45.1.1 PCAによる次元削減 
        45.1.2 PCAによる可視化:手書き数字 
        45.1.3 成分の意味 
        45.1.4 成分数の選択 
    45.2 PCAによるノイズフィルタリング 
    45.3 事例:固有顔画像 
    45.4 まとめ 

46章 詳細:多様体学習 
    46.1 多様体学習:HELLO 
    46.2 多次元尺度構成法(MDS)
        46.2.1 多様体学習としてのMDS 
        46.2.2 非線形埋め込み:MDSがうまくいかない場合 
    46.3 非線形多様体:局所線形埋め込み 
    46.4 多様体学習に対する考察 
    46.5 事例:顔画像へのIsomap適用 
    46.6 事例:手書き数字構造の可視化 

47章 詳細:k平均法クラスタリング 
    47.1 k平均法の基礎
    47.2 k平均法アルゴリズム:期待値最大化法 
    47.3 事例 
        47.3.1 事例1:手書き数字に対するk平均法 
        47.3.2 事例2:k平均法による画像の減色 

48章 詳細:混合ガウスモデル 
    48.1 混合ガウスモデルの必要性:k平均法の弱点 
    48.2 E-Mの一般化:混合ガウスモデル 
    48.3 共分散の選択 
    48.4 混合ガウスモデルによる密度推定 
    48.5 事例:GMMによるデータの生成 

49章 詳細:カーネル密度推定 
    49.1 カーネル密度推定の必要性:ヒストグラム 
    49.2 カーネル密度推定の実践 
    49.3 交差検証によるバンド幅の選択 
    49.4 事例:単純ではないベイズ推定 
        49.4.1 カスタム推定器の解説 
        49.4.2 カスタム推定器の使用 

50章 応用:顔検出パイプライン 
    50.1 HOG特徴量 
    50.2 HOGの実践:簡単な顔検出 
        1.「陽性」(positive)学習サンプルセットを取得する 
        2.「陰性」(negative)学習サンプルセットを取得する 
        3.データセットを組み合わせて、HOG特徴を抽出する 
        4.サポートベクターマシンの学習を行う 
        5.新しい画像の顔を認識する 
    50.3 課題と改善 
    50.4 機械学習をさらに学ぶためのリソース

索引