PythonとJavaScriptではじめるデータビジュアライゼーション

[cover photo]
オライリー・ジャパンで書籍を購入:
定価4,104円


Webからデータを取得して、効率よく整理、分析を行い効果的な可視化を実現するには、さまざまなツールとテクニックが必要です。 本書ではPythonとJavaScriptを使い分け、それぞれの言語の強みを最大限利用します。 PythonのBeautifulSoupとScrapyでデータを取得、pandas、Matplotlib、Numpyでデータ処理を行い、Flaskフレームワークを使ってデータを配信、JavaScriptのD3.jsを使ってインタラクティブなWeb可視化を実現します。データの収集からアウトプットまでの全体を視野に入れて解説しているので、実際にコードを追いながら、この一冊でデータ分析プロセスの全体像を理解できます。

関連書籍

JavaScriptによるデータビジュアライゼーション入門
PythonによるWebスクレイピング
Pythonによるデータ分析入門
ビューティフルデータ
ビューティフルビジュアライゼーション

まえがき
はじめに

1章 開発環境の準備
    1.1 本書で扱うコード
    1.2 Python
        1.2.1 Anaconda
        1.2.2 Anacondaインストールの確認
        1.2.3 追加ライブラリのインストール
        1.2.4 仮想環境
    1.3 JavaScript
        1.3.1 CDN
        1.3.2 ローカルへのライブラリのインストール
    1.4 データベース
        1.4.1 MongoDBのインストール
    1.5 統合開発環境
    1.6 まとめ

第Ⅰ部 基本的なツールキット

2章 PythonとJavaScript間の言語学習の橋渡し
    2.1 類似点と相違点
    2.2 コードと対話する
        2.2.1 Python
        2.2.2 JavaScript
    2.3 基本的な橋渡し作業
        2.3.1 スタイルガイドPEP 8とuse strict
        2.3.2 キャメルケースとアンダースコアの違い
        2.3.3 モジュールのインポート、スクリプトのインクルード
        2.3.4 名前空間の汚染を防ぐ
        2.3.5 「Hello World!」の出力
        2.3.6 簡単なデータ処理
        2.3.7 文字列の作成
        2.3.8 重要な空白と中括弧の違い
        2.3.9 コメントとdocstring
        2.3.10 変数の宣言var
        2.3.11 文字列と数値
        2.3.12 ブール値
        2.3.13 データコンテナ:ディクショナリ(辞書)、オブジェクト、リスト、配列
        2.3.14 関数
        2.3.15 反復処理:forループと関数型の代替手法
        2.3.16 条件分岐:if、else、elif、switch
        2.3.17 ファイル入出力
        2.3.18 クラスとプロトタイプ
    2.4 実際の相違点
        2.4.1 メソッドチェーン
        2.4.2 リストの列挙
        2.4.3 タプルの展開
        2.4.4 コレクション
        2.4.5 Underscore
        2.4.6 関数型配列メソッドとリスト内包表記
        2.4.7 Pythonのラムダ式とmap、reduce、filter
        2.4.8 JavaScriptのクロージャとモジュールパターン
        2.4.9 thisとthat
    2.5 チートシート
    2.6 まとめ

3章 Pythonにおけるデータの読み書き
    3.1 ゆっくり行う
    3.2 データの受け渡し
    3.3 システムファイル
    3.4 CSV、TSV、行/列データ形式
    3.5 JSON
        3.5.1 日付と時刻
    3.6 SQL
        3.6.1 データベースエンジンの作成
        3.6.2 データベーステーブルの定義
        3.6.3 セッションを使ったインスタンスの追加
        3.6.4 データベースのクエリ
        3.6.5 datasetを使った簡単なSQL
    3.7 MongoDB
    3.8 日付、時刻、複合データ
    3.9 まとめ

4章 Web開発の基本
    4.1 全体像
    4.2 シングルページアプリケーション
    4.3 ツールの準備
        4.3.1 IDE、フレームワーク、ツールの神話
        4.3.2 テキスト編集の主力ツール
        4.3.3 開発ツールを備えたブラウザ
        4.3.4 ターミナルとコマンドプロンプト
    4.4 Webページの作成
        4.4.1 HTTPを使ったページの配信
        4.4.2 DOM
        4.4.3 HTMLスケルトン
        4.4.4 コンテンツのマークアップ
        4.4.5 CSS
        4.4.6 JavaScript
        4.4.7 データ
    4.5 Chromeのデベロッパーツール
        4.5.1 Elementsタブ
        4.5.2 Sourcesタブ
        4.5.3 その他のツール
    4.6 プレースホルダを含む基本的なページ
        4.6.1 プレースホルダにコンテンツを埋める
    4.7 SVG
        4.7.1 <svg>要素
        4.7.2 <g>要素
        4.7.3 円
        4.7.4 CSSスタイルの適用
        4.7.5 線、矩形、多角形
        4.7.6 テキスト
        4.7.7 パス
        4.7.8 拡大縮小と回転
        4.7.9 グループ
        4.7.10 階層化と透明度
        4.7.11 JavaScriptによるSVG
    4.8 まとめ

第Ⅱ部 データの取得

5章 PythonによるWebからのデータの取得
    5.1 requestsライブラリを使ったWebデータの取得
    5.2 requestsを使ったデータファイルの取得
    5.3 PythonによるWeb APIからのデータの利用
        5.3.1 requestsでのRESTful APIの使用
        5.3.2 ノーベル賞データ可視化のための国データの取得
    5.4 ライブラリを使ったWeb APIへのアクセス
        5.4.1 Googleスプレッドシートの使用
        5.4.2 TweepyによるTwitter APIの使用
    5.5 データのスクレイピング
        5.5.1 スクレイピングが必要な理由
        5.5.2 BeautifulSoupとlxml
        5.5.3 初めてのスクレイピング
    5.6 スープの取得
    5.7 タグの選択
        5.7.1 選択パターンの作成
        5.7.2 Webページのキャッシュ
        5.7.3 受賞者国籍のスクレイピング
    5.8 まとめ

6章 Scrapyを使った重量スクレイピング
    6.1 Scrapyの準備
    6.2 対象の設定
    6.3 xpathを使った対象HTMLの設定
        6.3.1 Scrapyシェルを使ったxpathのテスト
        6.3.2 相対xpathを使った選択
    6.4 最初のScrapyスパイダー
    6.5 人物情報ページのスクレイピング
    6.6 リクエストの連結とデータの作成
        6.6.1 ページのキャッシュ
        6.6.2 リクエストの作成(yeild)
    6.7 Scrapyパイプライン
    6.8 パイプラインを使ったテキストと画像のスクレイピング
        6.8.1 複数のスパイダーでのパイプラインの指定
    6.9 まとめ

第Ⅲ部 pandasを使ったデータのクリーニングと探索

7章 NumPy入門
    7.1 NumPy配列
        7.1.1 配列の作成
        7.1.2 配列のインデックス指定とスライス
        7.1.3 基本操作
    7.2 配列関数の作成
        7.2.1 移動平均の計算
    7.3 まとめ

8章 pandas入門
    8.1 pandasがデータ可視化に最適である理由
    8.2 pandasが開発された理由
    8.3 異種データと測定値の分類
    8.4 DataFrame
        8.4.1 インデックス
        8.4.2 行と列
        8.4.3 グループの選択
    8.5 DataFrameの作成と保存
        8.5.1 JSON
        8.5.2 CSV
        8.5.3 Excelファイル
        8.5.4 SQL
        8.5.5 MongoDB
    8.6 SeriesからDataFrameを作成する
    8.7 パネル
    8.8 まとめ

9章 pandasによるデータのクリーニング
    9.1 ダーティデータに関する真実
    9.2 データの調査
    9.3 インデックスとpandasのデータ選択
        9.3.1 複数行の選択
    9.4 データのクリーニング
        9.4.1 混合した型の検出
        9.4.2 文字列の置換
        9.4.3 行の削除
        9.4.4 重複の検出
        9.4.5 データのソート
        9.4.6 重複の削除
        9.4.7 欠損フィールドの処理
        9.4.8 時刻と日付の処理
    9.5 完成したclean_data関数
    9.6 クリーニングしたデータセットの保存
        9.6.1 DataFrameのマージ
    9.7 まとめ

10章 Matplotlibを使ったデータの可視化
    10.1 pyplotとオブジェクト指向Matplotlib
    10.2 対話型セッションの開始
    10.3 pyplotのグローバル状態を使った対話型プロット
        10.3.1 Matplotlibの設定
        10.3.2 図サイズの設定
        10.3.3 ピクセルではなくポイント
        10.3.4 ラベルと凡例
        10.3.5 タイトルと軸ラベル
        10.3.6 グラフの保存
    10.4 図とオブジェクト指向Matplotlib
        10.4.1 軸とサブプロット
    10.5 プロットの種類
        10.5.1 棒グラフ
        10.5.2 散布図
    10.6 Seaborn
        10.6.1 FacetGrid
        10.6.2 PairGrid
    10.7 まとめ

11章 pandasを使ったデータ探索
    11.1 探索の開始
    11.2 pandasを使ったプロット
    11.3 男女間の格差
        11.3.1 グループのアンスタック
        11.3.2 歴史的傾向
    11.4 国の傾向
        11.4.1 1人当たりの受賞者数
        11.4.2 分野別の受賞数
        11.4.3 受賞分布の歴史的傾向
    11.5 受賞者の年齢と没年齢
        11.5.1 受賞時の年齢
        11.5.2 受賞者の没年齢
        11.5.3 時代に伴う寿命の延長
    11.6 受賞者の移住
    11.7 まとめ

第Ⅳ部 データの配信

12章 データの配信
    12.1 データの配信
        12.1.1 Flaskファイルの構成
        12.1.2 Flaskでのデータ配信
    12.2 静的ファイルの配信
    12.3 Flaskでの動的データ
        12.3.1 FlaskでのシンプルなRESTful API
    12.4 静的な配信を使うか動的な配信を使うか
    12.5 まとめ

13章 FlaskにおけるRESTfulデータ
    13.1 EveによるRESTful MongoDB API
        13.1.1 AJAXを使ったAPIへのアクセス
    13.2 可視化のためのデータ配信
    13.3 Flask-RestlessによるRESTful SQL
        13.3.1 APIの作成
        13.3.2 CORSサポートの追加
        13.3.3 APIでのクエリ操作
    13.4 まとめ

第Ⅴ部 D3を使ったデータの可視化

14章 ノーベル賞可視化のイメージ
    14.1 対象者は誰か
    14.2 可視化要素の選択
    14.3 メニューバー
    14.4 年別の受賞者数
    14.5 選択した受賞国の地図
    14.6 国別の受賞者を示す棒グラフ
    14.7 選択した受賞者の一覧
        14.7.1 写真付きの小さな人物情報ボックス
    14.8 完成イメージ
    14.9 まとめ

15章 可視化
    15.1 準備
        15.1.1 中核要素
        15.1.2 ファイルの構成
        15.1.3 データの配信
    15.2 HTMLスケルトン
    15.3 CSSスタイル指定
    15.4 JavaScriptエンジン
        15.4.1 スクリプトのインポート
        15.4.2 基本的なデータの流れ
        15.4.3 コアコード
        15.4.4 ノーベル賞可視化の初期化
        15.4.5 準備完了
        15.4.6 データ駆動更新
        15.4.7 Crossfilterによるデータのフィルタリング
    15.5 ノーベル賞可視化アプリケーションの実行
    15.6 まとめ

16章 D3入門−棒グラフ
    16.1 課題の認識
    16.2 セレクション
    16.3 DOM要素の追加
    16.4 D3の利用
    16.5 D3のスケールを使った範囲の調整
        16.5.1 定量的スケール
        16.5.2 序数スケール
    16.6 データバインディングによるD3能力の発揮
    16.7 enterメソッド
    16.8 バインディングされたデータへのアクセス
    16.9 更新パターン
    16.10 軸とラベル
    16.11 遷移
    16.12 まとめ

17章 各賞の可視化
    17.1 フレームの作成
    17.2 スケール
    17.3 軸
    17.4 受賞分野ラベル
    17.5 データのネスト
    17.6 ネストしたデータ結合による受賞者の追加
    17.7 躍動感を与える遷移
    17.8 まとめ

18章 D3を使った地図の作成
    18.1 利用可能な地図
    18.2 D3の地図データフォーマット
        18.2.1 GeoJSON
        18.2.2 TopoJSON
        18.2.3 地図のTopoJSONへの変換
    18.3 D3のgeo、投影法、パス
        18.3.1 投影法
        18.3.2 パス
        18.3.3 経緯度線
    18.4 要素を組み合わせる
    18.5 地図の更新
    18.6 値を示す丸印の追加
    18.7 完成した地図
    18.8 簡単なツールチップの作成
    18.9 まとめ

19章 受賞者の表示
    19.1 リストの作成
    19.2 人物情報ボックスの作成
    19.3 まとめ

20章 メニューバー
    20.1 D3によるHTML要素の作成
    20.2 メニューバーの作成
        20.2.1 受賞分野セレクタの作成
        20.2.2 性別セレクタの追加
        20.2.3 国セレクタの追加
        20.2.4 受賞者数メトリックラジオボタンの設置
    20.3 まとめ

21章 終わりに
    21.1 おさらい
        第Ⅰ部 基本的なツールキット
        第Ⅱ部 データの取得
        第Ⅲ部 pandasを使ったデータのクリーニングと探索
        第Ⅳ部 データの配信
        第Ⅴ部 D3を使ったデータの可視化
    21.2 今後の進展
        21.2.1 ソーシャルメディアネットワークの可視化
        21.2.2 LeafletとFoliumを使ったインタラクティブな地図作成
        21.2.3 機械学習の可視化
    21.3 最終的なまとめ

付録A 開発環境から本番環境への移行
    A.1 最初のディレクトリ
    A.2 構成
        A.2.1 Flaskの構成
        A.2.2 JavaScriptアプリケーションの構成
    A.3 認証
    A.4 Flaskアプリケーションのテスト
    A.5 JavaScriptアプリケーションのテスト
    A.6 Flaskアプリケーションのデプロイ
        A.6.1 Apacheの構成
    A.7 ロギングとエラー処理

索引

Feedback

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