ゼロからはじめるデータサイエンス 第2版
――Pythonで学ぶ基本と実践

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

Ebook Storeで電子版を購入:
価格2,992円

本書はPythonプログラミングを通してデータサイエンスの基本知識を「ゼロから学ぶ」ことができる入門書です。読者は架空のソーシャルネットワーク運営企業、データサイエンス・スター社のデータサイエンティストとして、さまざまな課題を解決しながら、必要な知識とスキルを着実に積み上げていきます。第1版の発刊から5年。その間、データサイエンスへの注目はますます高まり、Pythonはバージョンアップが進み、ライブラリは一層充実しました。このような変化に伴い、内容を全面的にアップデート。Pythonプログラミングの基礎から線形代数、統計確率の基礎、回帰、機械学習、ナイーブベイズ、決定木、ニューラルネットワーク、ディープラーニング、自然言語処理、ネットワーク分析、リコメンドシステム、データベースとSQL、MapReduce、データ倫理まで、データサイエンスに必要な幅広い知識をカバーします。

関連書籍

IPythonデータサイエンスクックブック 第2版
Pythonデータサイエンスハンドブック
データサイエンス設計マニュアル

訳者まえがき
第2版のまえがき
第1版のまえがき

1章 イントロダクション
    1.1 データに支配された世界
    1.2 データサイエンスとは
    1.3 仮想事例:データサイエンス・スター社にて
        1.3.1 キーコネクタを探せ
        1.3.2 知り合いかも?
        1.3.3 給与と経験値
        1.3.4 有料アカウント
        1.3.5 興味に関するあれこれ
        1.3.6 明日以降に向けて

2章 Python速習コース
    2.1 Zen of Python
    2.2 Pythonの入手
    2.3 仮想環境
    2.4 空白によるフォーマット
    2.5 モジュール
    2.6 関数
    2.7 文字列
    2.8 例外
    2.9 リスト
    2.10 タプル
    2.11 辞書
        2.11.1 defaultdict クラス
    2.12 Counter クラス
    2.13 集合
    2.14 実行順制御
    2.15 真偽
    2.16 ソート
    2.17 リスト内包表記
    2.18 自動テストとアサート
    2.19 オブジェクト指向プログラミング
    2.20 イテレータとジェネレータ
    2.21 乱数
    2.22 正規表現
    2.23 関数型プログラミング
    2.24 zipと引数展開
    2.25 args とkwargs
    2.26 型アノテーション
        2.26.1 型アノテーションの書き方
    2.27 データサイエンス・スター社へようこそ!
    2.28 さらなる探求のために

3章 データの可視化
    3.1 matplotlib
    3.2 棒グラフ
    3.3 折れ線グラフ
    3.4 散布図
    3.5 さらなる探求のために

4章 線形代数
    4.1 ベクトル
    4.2 行列
    4.3 さらなる探求のために

5章 統計
    5.1 データの特徴を表す
        5.1.1 代表値
        5.1.2 散らばり
    5.2 相関
    5.3 シンプソンのパラドクス
    5.4 その他相関係数についての注意点
    5.5 相関関係と因果関係
    5.6 さらなる探求のために

6章 確率
    6.1 従属と独立
    6.2 条件付き確率
    6.3 ベイズの定理
    6.4 確率変数
    6.5 連続確率分布
    6.6 正規分布
    6.7 中心極限定理
    6.8 さらなる探求のために

7章 仮説と推定
    7.1 統計的仮説検定
    7.2 事例:コイン投げ
    7.3 p値
    7.4 信頼区間
    7.5 pハッキング
    7.6 事例:A/Bテストの実施
    7.7 ベイズ推定
    7.8 さらなる探求のために

8章 勾配降下法
    8.1 勾配降下法の考え方
    8.2 勾配の評価
    8.3 勾配を利用する
    8.4 最善の移動量を選択する
    8.5 勾配降下法を使用してモデルを適合させる
    8.6 ミニバッチと確率的勾配降下法
    8.7 さらなる探求のために

9章 データの取得
    9.1 stdin とstdout
    9.2 ファイルの読み込み
        9.2.1 テキストファイルの基礎
        9.2.2 区切り文字を使ったファイル
    9.3 Webスクレイピング
        9.3.1 HTMLとその解析
        9.3.2 事例:議会の行動に目を光らせる
    9.4 API を使う
        9.4.1 JSONとXML
        9.4.2 認証が不要なAPIを使う
        9.4.3 必要なAPIの探索
    9.5 事例:Twitter API
        9.5.1 認証の取得
    9.6 さらなる探求のために

10章 データの操作
    10.1 データの調査
        10.1.1 1次元データの調査
        10.1.2 2次元データ
        10.1.3 多次元データ
    10.2 名前付きタプル(NamedTuple)の利用
    10.3 データクラス(Dataclass)
    10.4 データの整理と変換
    10.5 データの操作
    10.6 スケールの変更
    10.7 余談:tqdm
    10.8 次元削減
    10.9 さらなる探求のために

11章 機械学習
    11.1 モデリング
    11.2 機械学習とは?
    11.3 過学習と未学習
    11.4 正確さ
    11.5 バイアス-バリアンス トレードオフ
    11.6 特徴抽出と特徴選択
    11.7 さらなる探求のために

12章 k近傍法
    12.1 モデル
    12.2 事例:Irisデータセット
    12.3 次元の呪い
    12.4 さらなる探求のために

13章 ナイーブベイズ
    13.1 非常に単純なスパムフィルタ
    13.2 より高度なスパムフィルタ
    13.3 実装
    13.4 モデルの検証
    13.5 モデルの適用
    13.6 さらなる探求のために

14章 単純な線形回帰
    14.1 モデル
    14.2 勾配降下法
    14.3 最尤推定
    14.4 さらなる探求のために

15章 重回帰分析
    15.1 モデル
    15.2 最小二乗モデルへの追加前提
    15.3 モデルの適合
    15.4 モデルの解釈
    15.5 適合度
    15.6 余談:ブートストラップ
    15.7 回帰係数の標準誤差
    15.8 正則化
    15.9 さらなる探求のために

16章 ロジスティック回帰
    16.1 問題
    16.2 ロジスティック関数
    16.3 モデルの適用
    16.4 適合度
    16.5 サポートベクタマシン
    16.6 さらなる研究のために

17章 決定木
    17.1 決定木とは
    17.2 平均情報量(エントロピー)
    17.3 分割のエントロピー
    17.4 決定木の生成
    17.5 ひとつにまとめる
    17.6 ランダムフォレスト
    17.7 さらなる探求のために

18章 ニューラルネットワーク
    18.1 パーセプトロン
    18.2 フィードフォワードニューラルネットワーク
    18.3 逆伝播誤差法(バックプロパゲーション)
    18.4 事例:Fizz Buzz
    18.5 さらなる探求のために

19章 ディープラーニング
    19.1 テンソル(Tensor)
    19.2 層の抽象化
    19.3 線形層
    19.4 層のシーケンスで表現するニューラルネットワーク
    19.5 損失の最適化
    19.6 事例:修正版XOR
    19.7 その他の活性化関数
    19.8 事例:修正版Fizz Buzz
    19.9 ソフトマックスと交差エントロピー
    19.10 ドロップアウト(Dropout)
    19.11 事例:MNIST
    19.12 モデルの保存と読み込み
    19.13 さらなる探求のために

20章 クラスタリング
    20.1 考え方
    20.2 モデル
    20.3 事例:交流会
    20.4 kの選択
    20.5 事例:色のクラスタリング
    20.6 凝集型階層的クラスタリング
    20.7 さらなる探求のために

21章 自然言語処理
    21.1 ワードクラウド
    21.2 n-gramモデル
    21.3 文法
    21.4 余談:ギブスサンプリング
    21.5 トピックモデリング
    21.6 ワードベクトル
    21.7 リカレントニューラルネットワーク
    21.8 事例:文字単位のRNN
    21.9 さらなる探求のために

22章 ネットワーク分析
    22.1 媒介中心性
    22.2 固有ベクトル中心性
        22.2.1 行列乗算
        22.2.2 中心性
    22.3 有向グラフとページランク
    22.4 さらなる探求のために

23章 リコメンドシステム
    23.1 手作業によるキュレーション
    23.2 人気の高いものをお勧めする
    23.3 ユーザベース協調フィルタリング
    23.4 アイテムベース協調フィルタリング
    23.5 行列分解
    23.6 さらなる探求のために

24章 データベースとSQL
    24.1 表の作成(CLEATE TABLE)と行の追加(INSERT)
    24.2 行の更新(UPDATE)
    24.3 行の削除(DELETE)
    24.4 行の問い合わせ(SELECT)
    24.5 グループ化(GROUP BY)
    24.6 並び替え(ORDER BY)
    24.7 結合(JOIN)
    24.8 サブクエリ
    24.9 インデックス
    24.10 クエリ最適化
    24.11 NoSQL
    24.12 さらなる探求のために

25章 MapReduce
    25.1 事例:単語のカウント
    25.2 MapReduceを使う理由
    25.3 一般的なMapReduce
    25.4 事例:近況更新の分析
    25.5 事例:行列乗算
    25.6 余談:コンバイナ
    25.7 さらなる探求のために

26章 データ倫理
    26.1 データ倫理とは
    26.2 実際のところデータ倫理とは何なのか
    26.3 データ倫理を考慮する必要はあるか
    26.4 データ問題を引き起こした製品
    26.5 精度と公平性のトレードオフ
    26.6 対敵協力
    26.7 解釈可能性
    26.8 リコメデーション
    26.9 偏ったデータ
    26.10 データ保護
    26.11 まとめ
    26.12 さらなる探求のために

27章 前進しよう、データサイエンティストとして
    27.1 IPython
    27.2 数学
    27.3 既存のライブラリを活用する
        27.3.1 NumPy
        27.3.2 pandas
        27.3.3 scikit-learn
        27.3.4 可視化
        27.3.5 R
        27.3.6 ディープラーニング
    27.4 データの供給源
    27.5 データサイエンスを活用しよう
        27.5.1 Hacker News記事分類器
        27.5.2 消防車ランク
        27.5.3 固有Tシャツ
        27.5.4 ツイート地球儀
        27.5.5 データサイエンスを使って何をしますか?

付録A 日本語に関する補足
    A.1 和文対応のtokenize関数

索引

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


p42、下から9行目

【誤】

def doubler(f):
    # 関数fへの参照を持つ関数を定義する
    def g(x):
        return 2 * f(x)

# その関数を返す
return g

【正】

def doubler(f):
    # 関数fへの参照を持つ関数を定義する
    def g(x):
        return 2 * f(x)

    # その関数を返す
    return g

p71から72にかけてのコード片

【誤】

# 関数名のアンダースコアは、これらが「プライベート」関数であることを示している。
# これらは、median関数によって呼び出されることを目的としているが、
# 我々の統計ライブラリを使用する人から呼び出されることを意図していない。
def _median_odd(xs: List[float]) -> float:
    """len(xs)が偶数の場合、中央値は中央の要素"""
    return sorted(xs)[len(xs) // 2]

def _median_even(xs: List[float]) -> float:
    """len(xs)が奇数の場合、中央値は中央の2つの要素の平均"""
    sorted_xs = sorted(xs)
    hi_midpoint = len(xs) // 2  # 例えば lengthが4ならhi_midpointは2
    return (sorted_xs[hi_midpoint - 1] + sorted_xs[hi_midpoint]) / 2

【正】

# 関数名のアンダースコアは、これらが「プライベート」関数であることを示している。
# これらは、median関数によって呼び出されることを目的としているが、
# 我々の統計ライブラリを使用する人から呼び出されることを意図していない。
def _median_odd(xs: List[float]) -> float:
    """len(xs)が奇数の場合、中央値は中央の要素"""
    return sorted(xs)[len(xs) // 2]

def _median_even(xs: List[float]) -> float:
    """len(xs)が偶数の場合、中央値は中央の2つの要素の平均"""
    sorted_xs = sorted(xs)
    hi_midpoint = len(xs) // 2  # 例えば lengthが4ならhi_midpointは2
    return (sorted_xs[hi_midpoint - 1] + sorted_xs[hi_midpoint]) / 2

Feedback

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