Pythonによるデータ分析入門――NumPy、pandasを使ったデータ処理

目次

訳者まえがき
まえがき

1章 はじめに…1 (14)[教員]
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
1.3.5 SciPy
1.4 インストールとセットアップ
1.4.1 Windows
1.4.2 Apple OS X
1.4.3 GNU/Linux
1.4.4 Python 2とPython 3の相違点
1.4.5 統合開発環境(IDE)
1.5 コミュニティとカンファレンス(会議)
1.6 この本の読み方の案内
1.6.1 コード例
1.6.2 例として用いるデータ
1.6.3 インポートの決まりごと
1.6.4 専門用語(ジャーゴン、jargon)
1.7 謝辞

2章 Pythonによるデータ分析事例…15 (36)[久保]
2.1 データ分析の例:短縮URL 1.usa.govへの変換データ…15
2.1.1 Python標準機能を使用したタイムゾーン情報の集計
2.1.2 pandasを使用したタイムゾーン情報の集計
2.2 データ分析の例:MovieLens 1M(映画評価データ)…27
2.2.1 評価の分かれた映画の抽出
2.3 データ分析の例:アメリカの赤ちゃんに名付けられた名前リスト(1880-2010)…34
2.3.1 名付けの傾向分析
2.4 この章のまとめと次のステップ…50

3章 IPython:対話的な開発環境…51 (38)[小池]
3.1 IPythonの基本…52
3.1.1 タブ補完
3.1.2 イントロスペクション
3.1.3 %runコマンド
3.1.4 クリップボード経由の実行
3.1.5 キーボードショートカット
3.1.6 例外とトレースバック
3.1.7 マジックコマンド
3.1.8 Qtベースの高機能GUIコンソール
3.1.9 Matplotlibとの連携、Pylabモード
3.2 コマンド履歴の利用…64
3.2.1 コマンド履歴の検索とその再利用
3.2.2 入出力変数
3.2.3 入出力のロギング
3.3 オペレーティングシステムとの連携…67
3.3.1 シェルコマンドとエイリアス(別名定義)
3.3.2 ディレクトリブックマーク機能
3.4 ソフトウェア開発ツール…69
3.4.1 対話的デバッガ
3.4.2 処理時間の計測:%timeと%timeit
3.4.3 プロファイリングの基本:%prunと%run -p
3.4.4 行ごとのプロファイリング
3.5 IPython HTMLノートブック…82
3.6 IPythonでの生産的コード開発に向けたヒント…84
3.6.1 依存関係を考慮したモジュールの再読み込み
3.6.2 コード設計のヒント
3.7 高度なIPython機能…86
3.7.1 自前のクラスのIPythonへの親和性を高める技法
3.7.2 IPythonプロファイルと構成機能
3.8 謝辞

4章 NumPyの基本: 配列とベクトル演算…89 (38)[上野]
4.1 NumPy ndarray:多次元配列オブジェクト…90
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 ユニバーサル関数:すべての配列要素への関数適用…107
4.3 ndarrayを用いたデータ処理…110
4.3.1 条件制御のndarrayでの表現
4.3.2 数学関数、統計関数
4.3.3 真偽値の配列関数
4.3.4 ソート
4.3.5 集合関数:uniqueなど
4.4 ndarrayのファイル入出力…118
4.4.1 ndarrayの保存:バイナリ形式
4.4.2 ndarrayの保存:テキスト形式
4.5 行列計算…120
4.6 乱数生成…122
4.7 例:ランダムウォーク…123
4.7.1 多重ランダムウォーク

5章 pandas入門…127 (52)[積田]
5.1 pandasのデータ構造…128
5.1.1 シリーズ(Series)
5.1.2 データフレーム(DataFrame)
5.1.3 インデックスオブジェクト
5.2 pandasの重要な機能…140
5.2.1 再インデックス付け
5.2.2 軸から要素を削除する
5.2.3 インデックス参照、選択、フィルタリング
5.2.4 算術とデータの整形
5.2.5 関数の適用とマッピング
5.2.6 ソートとランク
5.2.7 重複した値を持つ軸のインデックス
5.3 要約統計量の集計と計算…157
5.3.1 相関と共分散
5.3.2 一意な値、頻度の確認、所属の確認
5.4 欠損値の取り扱い…164
5.4.1 欠損値を除外する
5.4.2 欠損値を穴埋めする
5.5 階層型インデックス…169
5.5.1 階層の順序変更とソート
5.5.2 階層ごとの要約統計量
5.5.3 データフレームの列をインデックスに使う
5.6 pandasのその他のトピック…175
5.6.1 整数を使ったインデックス参照
5.6.2 パネル

6章 データの読み込み、書き出しとファイル形式…179 (26)[桐本]
6.1 テキスト形式のデータの読み書き…179
6.1.1 テキストファイルを少しずつ読み込む
6.1.2 テキスト形式でのデータの書き出し
6.1.3 区切り文字で区切られた形式を手で操作する
6.1.4 JSONデータ
6.1.5 XMLとHTML:Webスクレイピング
6.2 バイナリデータ形式…197
6.2.1 HDF5形式の使用
6.2.2 Microsoft Excelファイルの読み込み
6.3 HTMLやWeb APIを用いた読み書き…199
6.4 データベースの読み書き…201
6.4.1 MongoDBへのデータの保存や読み取り

7章 データの管理:データのクリーニング、変換、マージ、再形成…205 (48)[小池]
7.1 データセットのマージ…205
7.1.1 データベース風のデータフレームのマージ
7.1.2 インデックスによるマージ
7.1.3 軸に沿った連結
7.1.4 重複のあるデータの結合
7.2 再形成とピボット…220
7.2.1 階層的にインデックス付けされているデータの再形成
7.2.2 「long」フォーマットから「wide」フォーマットへのピボット
7.3 データの変換……224
7.3.1 重複の除去
7.3.2 関数やマッピングを用いたデータの変換
7.3.3 値の置き換え
7.3.4 軸のインデックスの名前を変更する
7.3.5 離散化とビニング
7.3.6 外れ値の検出と除去
7.3.7 並べ替えとランダムサンプリング
7.3.8 指標やダミー変数の計算
7.4 文字列操作…238
7.4.1 Stringオブジェクトのメソッド
7.4.2 正規表現
7.4.3 pandasにおける、ベクトル化された文字列関数
7.5 例:USDAの食品データベース…246

8章 プロットと可視化…253 (32)[岡崎]
8.1 matplotlib APIの概要…253
8.1.1 図とサブプロット
8.1.2 色、マーカー、線種
8.1.3 目盛り、ラベル、凡例
8.1.4 注釈やサブプロットへの描画
8.1.5 プロットのファイルへの保存
8.1.6 matplotlibの設定
8.2 pandasのプロット関数…267
8.2.1 折れ線グラフ
8.2.2 棒グラフ
8.2.3 ヒストグラムと密度プロット
8.2.4 散布図
8.3 地図のプロット:ハイチ地震災害のデータ…276
8.4 Python可視化ツールのエコシステム…283
8.4.1 Chaco
8.4.2 MayaVi
8.4.3 その他のパッケージ
8.4.4 可視化ツールの未来は?

9章 データの集約とグループ演算…285 (44)[谷]
9.1 GroupByの仕組み…286
9.1.1 グループをまたいだ繰り返し
9.1.2 列や列の集合の選択
9.1.3 ディクショナリ形式やシリーズのグルーピング
9.1.4 関数を用いたグルーピング
9.1.5 インデックスレベルによるグルーピング
9.2 データの集約…295
9.2.1 列に複数の関数を適用する
9.2.2 集約されたデータを「インデックス付けされていない」形式で戻す
9.3 グループ指向の演算と変形…300
9.3.1 applyメソッド:一般的な分離―適用―結合(split-apply-combine)の方法
9.3.2 分位点とビン分析
9.3.3 例:グループごとに指定する値で欠損値を埋める
9.3.4 例:ランダムサンプリングと順列
9.3.5 例:グループの加重平均と相関
9.3.6 例:グループ指向の線形回帰
9.4 ピボットテーブルとクロス集計…313
9.4.1 crosstabメソッド:クロス集計
9.5 例:2012年の連邦選挙委員会のデータベース…316
9.5.1 職業と勤務先による寄付金の統計
9.5.2 寄付金額のビン分割
9.5.3 州別の寄付金の統計

10章 時系列データ…329 (44)[桐本]
10.1 日付、時間のデータ型とツール…330
10.1.1 文字列とdatetimeの変換
10.2 時系列の基本…334
10.2.1 インデックス参照、データの選択、サブセットの抽出
10.2.2 重複したインデックスを持つ時系列
10.3 日付範囲、頻度、シフト…338
10.3.1 日付範囲の生成
10.3.2 頻度と日付オフセット
10.3.3 データの前方と後方へのシフト
10.4 タイムゾーンを扱う…345
10.4.1 ローカライゼーションと変換
10.4.2 タイムゾーンを意識したタイムスタンプオブジェクト
10.4.3 別のタイムゾーンとの演算
10.5 期間を使った算術演算…349
10.5.1 期間頻度の変換
10.5.2 四半期の頻度
10.5.3 タイムスタンプから期間への変換(とその逆)
10.5.4 配列からPeriodIndexを作成する
10.6 再サンプリングと頻度変換…356
10.6.1 ダウンサンプリング
10.6.2 アップサンプリングと穴埋め
10.6.3 期間で再サンプリングする
10.7 時系列のプロット…363
10.8 移動する窓関数…366
10.8.1 指数加重関数
10.8.2 2値の場合での移動する窓関数
10.8.3 ユーザ定義の移動する窓関数
10.9 パフォーマンスとメモリ利用の注意点…371

11章 金融と経済データへの応用…373 (26)[積田]
11.1 データ変更に関するトピック…373
11.1.1 時系列とクロスセクションの整形
11.1.2 異なる頻度の時系列に対する演算
11.1.3 時刻とその時点でのデータ取得
11.1.4 データソースをつなぎ合わせる
11.1.5 リターンインデックスと累積リターン
11.2 グループの変換と分析…386
11.2.1 因子への露出度のグルーピング
11.2.2 分位分析
11.3 その他の応用例…391
11.3.1 シグナル境界分析
11.3.2 先物取引契約のロールオーバー
11.3.3 移動相関と線形回帰

12章 NumPy:応用編…399 (38)[岡崎]
12.1 ndarrayオブジェクトの内部構造…399
12.1.1 NumPy dtypeの階層構造…401
12.2 配列操作:応用編
12.2.1 配列の再形成
12.2.2 CとFortranの順序の違い
12.2.3 配列の結合と分割
12.2.4 要素の繰り返し:tileとrepeat
12.2.5 ファンシーインデックス参照の別法:takeとput
12.3 ブロードキャスト…410
12.3.1 他の軸へのブロードキャスト
12.3.2 ブロードキャストでの配列への値の設定
12.4 ufuncの使い方:応用編…416
12.4.1 ufuncインスタンスメソッド
12.4.2 独自定義のufunc
12.5 構造化配列とレコード配列…420
12.5.1 ネストしたdtypeと多次元フィールド
12.5.2 構造化配列を使うべき理由
12.5.3 構造化配列の操作:numpy.lib.recfunctions
12.6 ソートについてさらに詳しく…423
12.6.1 間接ソート:argsortとlexsort
12.6.2 使用可能な他のソートアルゴリズム
12.6.3 numpy.searchsorted:ソートされた配列内で要素を探す
12.7 NumPyの行列クラス…428
12.8 配列の入出力:応用編…430
12.8.1 メモリマップファイル
12.8.2 HDF5やその他の配列保存方法
12.9 パフォーマンスに関する小技…432
12.9.1 連続したメモリの重要さ
12.9.2 高速化のためのさらなる選択肢:Cython、f2py、C

索引…437


参考資料


風間 一洋