Pythonではじめるデータラングリング
――データの入手、準備、分析、プレゼンテーション

[cover photo]
  • 2017年04月 発行
  • 516ページ
  • ISBN978-4-87311-794-2
  • フォーマット Print PDF
  • 原書: Data Wrangling with Python

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

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

「ラングリング」(wrangling)とはもともと馬や牛を集めて飼いならすという意味があります。牛を集めてうまく操るカウボーイ(wrangler)のように、データを自在に操るためのスキルを身につけた「データラングラー」になろうというコンセプトのもと、データ収集、処理、分析、利用に関わるテクニックとサンプルを豊富に収録。例題を通じて、効果的なデータの取得、クリーニング、分析、プレゼンテーション方法などを身につけることが可能です。自動化やスケジューリング、大規模データセットの処理、魅力的なストーリー付けの方法なども紹介。Pythonでデータを扱うための実用的な知識とテクニックを網羅しています。脱Excelを図ってスキルアップしたいというニーズにも応える一冊です。

関連書籍

PythonによるWebスクレイピング
Pythonによるデータ分析入門 第2版
ゼロからはじめるデータサイエンス
入門 Python 3

はじめに

1章 Python入門
    1.1 なぜ Pythonなのでしょうか
    1.2 Pythonを始めましょう
        1.2.1 Pythonのバージョンは3.6にします
        1.2.2 手持ちのマシンに Pythonをインストールします
        1.2.3 Pythonの試運転
        1.2.4 pipのインストール
        1.2.5 コードエディタのインストール
        1.2.6 オプション: IPythonのインストール
    1.3 まとめ

2章 Pythonの基礎
    2.1 基本データ型
        2.1.1 文字列
        2.1.2 整数と浮動小数点数
    2.2 データコンテナ
        2.2.1 変数
        2.2.2 リスト
        2.2.3 辞書
    2.3 さまざまなデータ型ができること
        2.3.1 文字列メソッド:文字列ができること
        2.3.2 数値メソッド:数値ができること
        2.3.3 リストメソッド:リストができること
        2.3.4 辞書メソッド:辞書ができること
    2.4 役に立つツール: type、dir、help
        2.4.1 type
        2.4.2 dir
        2.4.3 help
    2.5 今までの復習
    2.6 今までに学んだことの意味
    2.7 まとめ

3章 機械が読み出すためのデータ
    3.1 CSVデータ
        3.1.1 CSVデータのインポート方法
        3.1.2 コードのファイルへの保存 .コマンドラインからの実行
    3.2 JSONデータ
        3.2.1 JSONデータのインポート方法
    3.3 XMLデータ
        3.3.1 XMLデータのインポート方法
    3.4 まとめ

4章 Excelファイルの操作
    4.1 Pythonパッケージのインストール
    4.2 Excelファイルのパース
    4.3 パースの実際
    4.4 まとめ

5章 PDFとPythonによる問題解決
    5.1 PDFは使わないで!
    5.2 プログラムによる PDFのパース
        5.2.1 slateを使ったファイルのオープンと読み出し
        5.2.2 PDFからテキストへの変換
    5.3 pdfminerを使った PDFのパース
    5.4 問題解決のための方法
        5.4.1 実践:テーブル抽出で使える別のライブラリのテスト
        5.4.2 実践:データの手作業によるクリーンアップ
        5.4.3 実践:ほかのツール
    5.5 一般的ではないファイルの種類
    5.6 まとめ

6章 データの獲得と格納
    6.1 すべてのデータが同じように作られているわけではないこと
    6.2 事実確認
    6.3 読みやすさ、クリーンさ、持続性
    6.4 データをどこで探すかということ
        6.4.1 電話の使い方
        6.4.2 アメリカ連邦政府のデータ
        6.4.3 世界中の国、都市の情報公開
        6.4.4 各種機関、 NGO(非政府組織)のデータ
        6.4.5 教育と大学のデータ
        6.4.6 医療および科学データ
        6.4.7 クラウドソーシングデータと API
    6.5 ケーススタディ:データ収集の例
        6.5.1 エボラ
        6.5.2 鉄道の安全性
        6.5.3 サッカー選手の収入
        6.5.4 児童労働
    6.6 データの保存:いつ、なぜ、どのように
    6.7 データベース:簡単な紹介
        6.7.1 リレーショナルデータベース: MySQLと PostgreSQL
        6.7.2 非リレーショナルデータベース: NoSQL
        6.7.3 Pythonによるローカルデータベースの設定
    6.8 単純なファイルを使うべきとき
        6.8.1 クラウドストレージと Python
        6.8.2 ローカルストレージと Python
    6.9 その他のデータストレージ
    6.10 まとめ

7章 データのクリーンアップ:調査、マッチング、整形
    7.1 データをクリーンアップする理由
    7.2 データクリーンアップの基礎
        7.2.1 データクリーンアップのための値の確認
        7.2.2 データの整形
        7.2.3 外れ値や不良データの検出
        7.2.4 重複の検出
        7.2.5 ファジーマッチング
        7.2.6 正規表現マッチング
        7.2.7 重複するレコードの処理方法
    7.3 まとめ

8章 データのクリーンアップ:標準化とスクリプト化
    8.1 データの正規化と標準化
    8.2 データの保存
    8.3 プロジェクトにとって適切なデータクリーンアップ方法の決め方
    8.4 クリーンアップ処理のスクリプト化
    8.5 新しいデータによるテスト
    8.6 まとめ

9章 データの探究と分析
    9.1 データの探究
        9.1.1 データのインポート
        9.1.2 テーブル関数による探究
        9.1.3 多くのデータセットの結合
        9.1.4 相関関係の検出
        9.1.5 外れ値の検出
        9.1.6 グループの作成
        9.1.7 さらなる探究
    9.2 データの分析
        9.2.1 データの分割と焦点の絞り込み
        9.2.2 データは何を語っているのか
        9.2.3 結論の描き方
        9.2.4 結論の記録方法
    9.3 まとめ

10章 データのプレゼンテーション
    10.1 ストーリーテリングの落とし穴
        10.1.1 どのようにストーリーを語るかについて
        10.1.2 聞き手を知ること
    10.2 データのビジュアライズ
        10.2.1 グラフ
        10.2.2 時間関連データ
        10.2.3 地図
        10.2.4 対話的プレゼンテーション
        10.2.5 文章
        10.2.6 イメージ、ビデオ、イラスト
    10.3 プレゼンテーションツール
    10.4 データの公開
        10.4.1 既存サイトの利用
        10.4.2 オープンソースプラットフォーム:新しいサイトの開設
        10.4.3 Jupyter(元の IPython Notebooks)
    10.5 まとめ

11章 ウェブスクレイピング:ウェブからのデータの獲得と保存
    11.1 何をどのようにスクレイピングするかについて
    11.2 ウェブページの分析
        11.2.1 Inspection:マークアップの構造
        11.2.2 Network/Timeline:ページがどのようにロードされるか
        11.2.3 Console:JavaScriptの操作
        11.2.4 ページの深い分析
    11.3 ページの取得:インターネットにリクエストを送る方法
    11.4 Beautiful Soupによるウェブページのパース
    11.5 LXMLによるウェブページのパース
        11.5.1 XPathを使う理由
    11.6 まとめ

12章 高度なウェブスクレイピング:スクリーンスクレイパーとスパイダー
    12.1 ブラウザベースのパース
        12.1.1 Seleniumによる画面の読み出し
        12.1.2 Ghost.pyによる画面の読み出し
    12.2 ウェブのスパイダリング
        12.2.1 Scrapyによるスパイダーの構築
        12.2.2 Scrapyによるウェブサイト全体のクロール
    12.3 	ネットワーク:インターネットの仕組みとそれによってスクリプトに問題が起こる理由
    12.4 	変化するウェブ(またはスクリプトが動かなくなる理由)
    12.5 	注意すべきこと
    12.6 	まとめ

13章 API
    13.1 	APIの特徴
        13.1.1 REST APIとストリーミング API
        13.1.2 容量制限
        13.1.3 データ層
        13.1.4 APIキーとトークン
    13.2 	Twitterの REST APIからの単純なデータの取得
    13.3 	Twitterの REST APIからの高度なデータ収集
    13.4 	Twitterのストリーミング APIからの高度なデータ収集
    13.5 	まとめ

14章 自動化とスケーリング
    14.1 	自動化の理由
    14.2 	自動化のためのステップ
    14.3 	起こり得る問題
    14.4 	自動化スクリプトを実行すべき場所
    14.5 	自動化のためのスペシャルツール
        14.5.1 ローカルファイル、 argv、設定ファイルの使い方
        14.5.2 データ処理のためのクラウドの使い方
        14.5.3 並列処理の使い方
        14.5.4 分散処理の使い方
    14.6 	単純な自動化
        14.6.1 cronジョブ
        14.6.2 ウェブインターフェイス
        14.6.3 Jupyterノートブック
    14.7 	大規模な自動化
        14.7.1 Celery:キューベースの自動化
        14.7.2 Ansible:運用の自動化
    14.8 自動化のモニタリング
        14.8.1 Pythonのロギング
        14.8.2 自動メッセージの追加
        14.8.3 アップロード、その他の報告の方法
        14.8.4 Logging and Monitoring as a Service
    14.9 絶対安全なシステムはない
    14.10 まとめ

15章 終わりに
    15.1 データラングラーの義務
    15.2 データラングリングを越えて
        15.2.1 より優秀なデータアナリストになるために
        15.2.2 より優秀な開発者になるために
        15.2.3 より優秀なビジュアルストーリーテラーになるために
        15.2.4 より優秀なシステムアーキテクトになるために
    15.3 ここからどこに進むべきか

付録A 本書で触れた言語との比較
    A.1 C、C++、Javaと Python
    A.2 R、MATLABと Python
    A.3 HTMLとPython
    A.4 JavaScriptとPython
    A.5 Node.jsと Python
    A.6 Ruby、Ruby on Railsと Python

付録B 初心者向けのオンライン教材とオフライングループ
    B.1 オンライン教材
    B.2 オフライングループ

付録C コマンドライン入門
    C.1 bash
        C.1.1 ファイルシステム内の移動
        C.1.2 ファイルの変更
        C.1.3 ファイルの実行
        C.1.4 コマンドラインによる検索
        C.1.5 参考資料
    C.2 Windowsの CMD/PowerShell
        C.2.1 ファイルシステム内での移動
        C.2.2 ファイルの変更
        C.2.3 ファイルの実行
        C.2.4 コマンドラインによる検索
        C.2.5 参考資料

付録D 高度な構成の Pythonの設定
    D.1 ステップ1:GCCのインストール
    D.2 ステップ2:(Macのみ) Homebrewのインストール
    D.3 ステップ3:(Macのみ) Homebrewの位置の PATHへの追加
    D.4 ステップ4:Pythonのインストール
    D.5 ステップ5:venv
    D.6 ステップ6:新しいディレクトリの設定
    D.7 新しい環境についての練習( Windows、Mac、Linux)
    D.8 高度な設定のまとめ

付録E Pythonのなるほど集
    E.1 空白万歳
    E.2 恐ろしい GIL
    E.3 =、==、isの違いと copyを使うべきとき
    E.4 関数のデフォルト引数
    E.5 Pythonのスコープと組み込み関数、メソッド:変数名の重要性
    E.6 オブジェクトの定義と変更
    E.7 イミュータブルなオブジェクトの変更
    E.8 型チェック
    E.9 複数の例外のキャッチ
    E.10 デバッグの力

付録F IPythonのヒント
    F.1 IPythonを使う理由
    F.2 IPythonをインストールして動かしてみましょう
    F.3 マジックコマンド
    F.4 最後に:より単純なターミナル

付録G AWSの使い方
    G.1 AWSサーバーの立ち上げ
        G.1.1 AWSステップ1:Amazonマシンイメージ( AMI)の選択
        G.1.2 AWSステップ2:インスタンスタイプの選択
        G.1.3 AWSステップ7:インスタンス作成の確認
        G.1.4 AWSの最後の質問:既存のキーペアを選択するか、新しいキーペアを作成します
    G.2 AWSサーバーへのログイン
        G.2.1 インスタンスのパブリックDNS名の取得
        G.2.2 プライベートキーの準備
        G.2.3 サーバーへのログイン
        G.2.4 まとめ

索引

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


※2018年7月更新。2刷で修正済みです。

■P.20 脚注上の段落
【誤】
2番目の例はSyntaxErrorとなります(invalid tokenとして最後の8を指しています)。これはほかの多くの言語でもそうですが、Pythonでは「トークン」とは特別な単語、記号、識別子などのことです。この場合、Pythonは、入力された数値の先頭が0なので、Pythonのルールに従って02108を8進法の整数として解釈しようとしたのに、8という8進法としては使えない数字にぶつかったので、それは無効だと言っているのです。本書では8進法を使わないので、この説明がわからなくても気にする必要はありませんが、普通の10進整数を入力するときには、先頭に0を入れないようにするということは覚えておいてください*1。
【正】
2番目の例はSyntaxErrorとなります。これはほかの多くの言語でもそうですが、Pythonでは「トークン」とは特別な単語、記号、識別子などのことです。この場合、Pythonは入力された数値の先頭が0なので、Pythonのルールに従って02108を解釈しようとしてエラーになりました。普通の10進整数を入力するときには、先頭に0を入れないようにするということは覚えておいてください*1。

■P.20 脚注
【誤】
*1 よくわからないまま進むのはいやだという方は、続きを読んでみてください。しかし、本書では8進法を使わないので、わからなくてもこのあとの説明を読むために困ることはありません。普通、整数は9の次が10、99の次が100のように、10、10×10(10の2乗で100)、10×10×10(10の3乗で1,000)…で位が上がっていきます。これを10進法と言います。8進法は、8、8×8(8×8で64)、8×8×8(8×8×8で512)…ごとに位が上がっていきます。ですから、7の次が10になり、77の次が100になります。77と言っても、10進の七十七ではないので注意してください。7×8+7で63のことです。つまり、8進の100は8×8=64です。Pythonインタープリタに02107を入力してみてください。1095が返ってくるはずです。これは、2×8×8×8+1×8×8+0×8+7ということです。
【正】
*1 技術監修者注:Python 2では先頭が0の数値を8進数として解釈していました。しかし先頭に0を持つ数値はC言語に慣れていない人にとっては間違いやすかったため、8進数の表現には0oまたは0Oをつけることになりました。Python 3では数値リテラルの先頭に"0"がある場合、2番目の文字が数字であれば例外が発生します。

■P.21 上から15行目(脚注追加)
【誤】どうなったでしょうか。0が返されてきました。
【正】どうなったでしょうか。0が返されてきました*1。
*1 技術監修者注:Python 2では0を返しますが、Python 3では予想通り0.6666666666666666を返します。

■P.44 上から4行目
【誤】LinuxとMax
【正】LinuxとMac

■P.58 上から16行目
【誤】https://docs.python.org/3/library/xml.etree.elementtree.html
【正】https://docs.python.jp/3/library/xml.etree.elementtree.html

■P.58 上から20行目
【誤】https://docs.python.org/3/library/xml.dom.minidom.html
【正】https://docs.python.jp/3/library/xml.dom.minidom.html

Feedback

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