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

[cover photo]
  • 2013年12月 発行
  • 474ページ
  • ISBN978-4-87311-655-6
  • フォーマット Print PDF
  • 原書: Python for Data Analysis

オライリー・ジャパンで書籍を購入:
定価3,888円

Ebook Storeで電子版を購入:
価格3,110円

NumPy、SciPy、pandas、matplotlibをはじめ、高機能で使いやすい数学・科学計算用ライブラリが充実しているPythonは、データサイエンス分野での利用が急速に広がっています。従来高価な商用ツールでしか提供されていなかった機能がオープンソースツールで行えるとあって、プログラマだけでなく、大量のデータを処理する金融アナリストやデータ解析を行う研究者たちの間でもPython人気は高まる一方です。本書はPythonの代表的なデータ解析用ツール、pandasのメイン開発者による、Pythonでデータサイエンスを始めるための情報をまとめた、優れたガイドブックです。豊富な事例とサンプルコードを示した実践的、実際的な一冊です。

関連書籍

Pythonからはじめる数学入門
Pythonではじめる機械学習
Pythonではじめるデータラングリング
PythonとJavaScriptではじめるデータビジュアライゼーション
RとRubyによるデータ解析入門
オープンソースで学ぶ社会ネットワーク分析
ゼロから作るDeep Learning
ゼロからはじめるデータサイエンス
初めてのPython 第3版
ビューティフルデータ

訳者まえがき
まえがき

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

3章 IPython:対話的な開発環境
    3.1 IPythonの基本
        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 コマンド履歴の利用
        3.2.1 コマンド履歴の検索とその再利用
        3.2.2 入出力変数
        3.2.3 入出力のロギング
    3.3 オペレーティングシステムとの連携
        3.3.1 シェルコマンドとエイリアス(別名定義)
        3.3.2 ディレクトリブックマーク機能
    3.4 ソフトウェア開発ツール
        3.4.1 対話的デバッガ
        3.4.2 処理時間の計測:%timeと%timeit
        3.4.3 プロファイリングの基本:%prunと%run -p
        3.4.4 行ごとのプロファイリング
    3.5 IPython HTMLノートブック
    3.6 IPythonでの生産的コード開発に向けたヒント
        3.6.1 依存関係を考慮したモジュールの再読み込み
        3.6.2 コード設計のヒント
    3.7 高度なIPython機能
        3.7.1 自前のクラスのIPythonへの親和性を高める技法
        3.7.2 IPythonプロファイルと構成機能
    3.8 謝辞

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.4.1 ndarrayの保存:バイナリ形式
        4.4.2 ndarrayの保存:テキスト形式
    4.5 行列計算
    4.6 乱数生成
    4.7 例:ランダムウォーク
        4.7.1 多重ランダムウォーク

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 欠損値の取り扱い
        5.4.1 欠損値を除外する
        5.4.2 欠損値を穴埋めする
    5.5 階層型インデックス
        5.5.1 階層の順序変更とソート
        5.5.2 階層ごとの要約統計量
        5.5.3 データフレームの列をインデックスに使う
    5.6 pandasのその他のトピック
        5.6.1 整数を使ったインデックス参照
        5.6.2 パネル

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

7章 データの管理:データのクリーニング、変換、マージ、再形成
    7.1 データセットのマージ
        7.1.1 データベース風のデータフレームのマージ
        7.1.2 インデックスによるマージ
        7.1.3 軸に沿った連結
        7.1.4 重複のあるデータの結合
    7.2 再形成とピボット
        7.2.1 階層的にインデックス付けされているデータの再形成
        7.2.2 「long」フォーマットから「wide」フォーマットへのピボット
    7.3 データの変換
        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 文字列操作
        7.4.1 Stringオブジェクトのメソッド
        7.4.2 正規表現
        7.4.3 pandasにおける、ベクトル化された文字列関数
    7.5 例:USDAの食品データベース

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

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

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

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

12章 NumPy:応用編
    12.1 ndarrayオブジェクトの内部構造
        12.1.1 NumPy dtypeの階層構造
    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 ブロードキャスト
        12.3.1 他の軸へのブロードキャスト
        12.3.2 ブロードキャストでの配列への値の設定
    12.4 ufuncの使い方:応用編
        12.4.1 ufuncインスタンスメソッド
        12.4.2 独自定義のufunc
    12.5 構造化配列とレコード配列
        12.5.1 ネストしたdtypeと多次元フィールド
        12.5.2 構造化配列を使うべき理由
        12.5.3 構造化配列の操作:numpy.lib.recfunctions
    12.6 ソートについてさらに詳しく
        12.6.1 間接ソート:argsortとlexsort
        12.6.2 使用可能な他のソートアルゴリズム
        12.6.3 numpy.searchsorted:ソートされた配列内で要素を探す
    12.7 NumPyの行列クラス
    12.8 配列の入出力:応用編
        12.8.1 メモリマップファイル
        12.8.2 HDF5やその他の配列保存方法
    12.9 パフォーマンスに関する小技
        12.9.1 連続したメモリの重要さ
        12.9.2 高速化のためのさらなる選択肢:Cython、f2py、C

索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

1刷正誤表

Pythonによるデータ分析入門 第1刷正誤表

2014年1月22日更新

位置
p110
下から
4行目
In [135]: z = np.sqrt(xs 2 + ys 2) In [135]: z = np.sqrt(xs ** 2 + ys ** 2)
p276
図8-23
fig8-23before fig8-23after
p288
1行目
グループキーにkey1だけを指定する代わりに、 グループキーにkey1だけを指定する代わりに、
p357
表10-5
kind=None
の説明
期間に集約するときは'period'、タイムスタンプに集約するときは'period'を指定する。 期間に集約するときは'period'、タイムスタンプに集約するときは'timestamp'を指定する

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]