書籍概要

RとPythonで学ぶ[実践的]データサイエンス&機械学習

著者
発売日
更新日

概要

本書は野村総合研究所のシステムコンサルティング事業本部で実施している「アナリティクス研修」をベースにした書籍で,「統計的なモデリングとは何か?」「モデルに基づく要因の分析と予測の違いとは?」「具体的なモデルの作り方」「結果を解釈する際の落とし穴の見分け方」など,ビジネスの現場感を重視した構成です。実務で遭遇するデータ品質や加工のポイント,さらにRとPythonを利用し,データからモデルを作成して結果を得るという基本的な手順を体験できます。これからデータ分析や統計解析,機械学習を学び,現場でそれらを活用したい方に最短学習コースでお届けします。

こんな方におすすめ

  • データ分析・統計解析や機械学習について知りたい方
  • データサイエンティストになりたい方

目次

第1章 データサイエンス入門

  • 1.1 データサイエンスの基本
    • 1.1.1 データサイエンスの重要性
    • 1.1.2 データサイエンスの定義とその歴史
    • 1.1.3 データサイエンスにおけるモデリング
    • 1.1.4 データサイエンスとその関連領域
  • 1.2 データサイエンスの実践
    • 1.2.1 データサイエンスのプロセスとタスク
    • 1.2.2 データサイエンスの実践に必要なツール
    • 1.2.3 データサイエンスの実践に必要なスキル
    • 1.2.4 データサイエンスの限界と課題
  • コラム ビジネス活用における留意点

第2章 RとPython

  • 2.1 RとPython
    • 2.1.1 RとPythonの比較
  • 2.2 R入門
    • 2.2.1 Rの概要
    • 2.2.2 Rの文法
    • 2.2.3 データ構造と制御構造
  • 2.3 Python入門
    • 2.3.1 Pythonの概要
    • 2.3.2 Pythonの文法
    • 2.3.3 Pythonでのプログラミング
    • 2.3.4 NumPyとpandas
  • 2.4 RとPythonの実行例の比較
    • 2.4.1 簡単な分析の実行例

第3章 データ分析と基本的なモデリング

  • 3.1 データの特徴を捉える
    • 3.1.1 分布の形を捉える ─ ビジュアルでの確認
    • 3.1.2 要約統計量を算出する ─ 代表値とばらつき
    • 3.1.3 関連性を把握する ─ 相関係数の使い方と意味
    • 3.1.4 Rを使った相関分析 ─ 自治体のデータを使った例
    • 3.1.5 さまざまな統計分析 ─ 理論と実際の考え方
  • 3.2 データからモデルを作る
    • 3.2.1 目的変数と説明変数 ─ 説明と予測の「向き」
    • 3.2.2 簡単な線形回帰モデル ─ Rによる実行と結果
    • 3.2.3 ダミー変数を使ったモデル ─ グループ間の差異を分析
    • 3.2.4 複雑な線形回帰モデル ─ 交互作用,モデル間の比較
    • 3.2.5 線形回帰の仕組みと最小二乗法
  • 3.3 モデルを評価する
    • 3.3.1 モデルを評価するための観点
    • 3.3.2 この結果は偶然ではないのか? ─ 有意確率と有意差検定
    • 3.3.3 モデルはデータに当てはまっているか? ─ フィッティングと決定係数
    • 3.3.4 モデルは複雑すぎないか? ─ オーバーフィッティングと予測精度
    • 3.3.5 残差の分布 ─ 線形回帰モデルと診断プロット
    • 3.3.6 説明変数同士の相関 ─ 多重共線性
    • 3.3.7 標準偏回帰係数

第4章 実践的なモデリング

  • 4.1 モデリングの準備
    • 4.1.1 データの準備と加工
    • 4.1.2 分析とモデリングの手法
  • 4.2 データの加工
    • 4.2.1 データのクレンジング
    • 4.2.2 カテゴリ変数の加工
    • 4.2.3 数値変数の加工とスケーリング
    • 4.2.4 分布の形を変える ─ 対数変換とロジット変換
    • 4.2.5 欠損値の処理
    • 4.2.6 外れ値の処理
  • 4.3 モデリングの手法
    • 4.3.1 グループに分ける ─ クラスタリング
    • 4.3.2 指標を集約する ─ 因子分析と主成分分析
    • 4.3.3 一般化線形モデル
    • 4.3.4 2値データを目的変数とする分析 ─ ロジスティック回帰
    • 4.3.5 セグメントの抽出とその特徴の分析 ─ 決定木
  • 4.4 因果推論
    • 4.4.1 データから因果関係を明らかにする ─ 統計的因果推論
    • 4.4.2 因果関係に基づく変数選択

第5章 機械学習とディープラーニング

  • 5.1 機械学習の目的と手順
    • 5.1.1 機械学習の基本
    • 5.1.2 機械学習の手順
    • 5.1.3 データの準備に関わる問題
    • 5.1.4 特徴抽出と特徴ベクトル
  • コラム 機械学習と強化学習
  • 5.2 機械学習の実行
    • 5.2.1 機械学習ライブラリの活用 ─ scikit-learn
    • 5.2.2 機械学習アルゴリズムの例 ─ ランダムフォレスト
    • 5.2.3 機械学習アルゴリズムの例 ─ サポートベクターマシン
    • 5.2.4 機械学習の実行例
  • 5.3 ディープラーニング
    • 5.3.1 ニューラルネットワーク
    • 5.3.2 ディープラーニングを支える技術
    • 5.3.3 ディープラーニング・フレームワーク
    • 5.3.4 ディープラーニングの実行
    • 5.3.5 生成モデル

サポート

ダウンロード

付録記事のダウンロード

本書をご購入いただいた方は,次の特別記事をダウンロードしてお読みいただけます。

  • Anacondaのインストール
  • RとRStudioのインストール
  • RStudioの使い方
  • Jupyter Notebookの使い方
  • Anacondaでのライブラリ追加方法

ご購入の証明として,以下の場所に記載された文字列をご入力のうえ,ダウンロード後に解凍してご利用ください。

ExtraIssue20190325.zip(4MB)

なお,本書の増補改訂版をご利用の方は次のURLからダウンロードください。

サンプルソースのダウンロード

(2019年11月25日更新)

本書のサンプルソースがダウンロードできます。
ダウンロード
sample20191122.zip(約310KB)

解凍すると章ごとフォルダにサンプルが配置されています。

3.2.04.ModelComparison.R(P.155)のコメント行を修正したので差し替えました。

補足情報

[Viewer]タブでの表示について

(2019年12月16日更新)

P.275の1~3行目に記載されている[Viewer]タブでの表示について,Windows上でRStudioを使用している場合に,正常にプロットが表示されないことがあります。その場合は[Viewer]タブにある[矢印と四角]のアイコン(下図参照)をクリックしてください。クリックするとWebブラウザが起動し,ブラウザ上にプロットが表示されます。

ライブラリtabplotを使った際のエラーについて

(以下2019年11月11日更新)

Rの新バージョン(3.6以降)とRStudioの旧バージョンの組み合わせにおいて,P.308のリスト4.8で,ライブラリtabplotを使って次のコードを実行する際にエラーが発生することが確認されています。


tableplot(DF[, -1], sortCol ="契約")
tableplot(DF[, -1], sortCol ="通話分数")

・エラーメッセージ
Error in if (by < 1) stop("'by' must be > 0")(以下略)

エラーを回避するためには,RStudioを最新のバージョンにアップデートしてください。

2019年11月5日現在の最新版は次のとおりです。

  • RStudio 1.2.5019
  • R 3.6.1
  • tabplot 1.3-3
(以下2019年3月26日更新)

図3.15(P.129)のプロットをWindows環境で描画すると文字化けが生じる場合があります。その場合,リスト3.3「3.1.04.Correlation.R」(P.124)の関数qgrah()内の引数に次の1行を挿入してください(P.125の下から10行目に相当する箇所/#③相関係数のグラフ表示内)。


labels=colnames(COR), #ラベルを省略せずに表示

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2021年2月5日最終更新)

P.254 図4.14:英語の成績

誤 98,85,NA,85,85
正 98,85,72,NA,85

P.255 本文:「ペアワイズ」項の上から5行目

誤 4名分のケースを使うことができます。
正 3名分のケースを使うことができます。

(以下2020年2月13日更新)

P.90 例2.40の上から4行目のコメント

誤#row 2, column 1
正#row 1, column 2

(以下2019年11月25日更新)

P.155 リスト3.6の中16~22行目のコメント

誤

#目的変数の値について、モデル上の理論値を求める
#=モデルを元のデータDFに当てはめて、DFの説明変数に
# 基づく予測値を算出する

#関数predict():モデルをデータに当てはめ予測値を算出
#ここではモデルを作成した際のデータをそのまま使う
#説明変数の値のみが予測に使われる

正

#目的変数の値について、モデル上の理論値を図示する

# モデル上の理論値
# =モデルをDFの説明変数の値に当てはめた場合の予測値

#理論値はモデル作成の際にfitted.valuesとして格納されている
#実測値との差(残差)は同様にresidualsとして格納されている

(以下2019年9月11日更新)

P.325 リスト4.8内 下から17行目

誤

box.col = c("pink", "palegreen3")[CRT1$frame$yval])

正

box.col = c("pink", "palegreen3")[CRT3$frame$yval])

P.329 本文 下から2行目

誤 実測値と一致します。
正 ロジスティック回帰による予測結果と一致します。

(以下2019年7月23日更新)

P.329 図4.47:枝を買った決定木

末端ノード(9)の一部の文字と背景色を変更しました。

zu4.47.png

(以下2019年7月2日更新)

P.47 例2.7:ベクトルへの要素の追加(上から3~4行目)

誤 [1] 2 2 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34
[20] 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64
正 [1] 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
[20] 42 44 46 48 50 52 54 56 58 60 62 64

P.47 例2.7:ベクトルへの要素の追加(下から1~2行目)

誤 [1] 2 2 2 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
[20] 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 64 64 64
正 [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
[20] 40 42 44 46 48 50 52 54 56 58 60 62 64

(以下2019年6月25日更新)

P.82 (3)条件分岐の構文

コード例がRの記述になっておりました。

誤

if (論理式) {
    論理式の評価がTRUEの場合の処理
} else {
    上記以外の場合の処理
}

正

if 論理式 :
    論理式の評価がTRUEの場合の処理
else :
    上記以外の場合の処理

(以下2019年5月31日更新)

※以降の訂正は第2刷では修正されています。

P.15 本文 上から7行目

誤 その商品が落ちたのか、
正 どの商品が落ちたのか、

P.20 本文 下から3行目

誤 といるルールで
正 というルールで

P.51 リスト2.2 2.2.03.DataStructure.R(続き)の上から14行目

誤

DFSize[, 3]      #すべてのrow, column 2

正

DFSize[, 3]      #すべてのrow, column 3

P.56 例2.14の上から8行目

誤

> DFSize[, 3]      #すべてのrow, column 2

正

> DFSize[, 3]      #すべてのrow, column 3

P.61 本文 上から6行目

誤 与えられたリスト(最初の引数)
正 与えられたベクトルやリスト(最初の引数)

P.94 本文 上から8行目(参照ファイル名)

誤 2.4.01.sample.csv
正 sample.csv

P.123 本文 下から1行目

誤 市町村の名称
正 市区町の名称

P.129 図3.15 相関係数のグラフ表示

項目名称が見切れていました。

図

P.135 本文 下から7行目

誤 プログラムの中、
正 プログラムの中では、

P.145 注17 上から4行目

誤 123×104=1230000
正 123×104=1230000

P.157 図3.26 通常の線形回帰モデル

「x2方向の傾き0.68」を指し示す位置を変更しました。

P.161 図3.29 左「負の交互作用の例」の式

誤 b0 = 100, b1 = 100, b2 = 3, b3 = -0.1
正 b0 = 100, b1 = 2, b2 = 3, b3 = -0.1

P.161 図3.29 右「正の交互作用の例」の式

誤 b0 = 100, b1 = 0, b2 = 0, b3 = -0.1
正 b0 = 100, b1 = 0, b2 = 0, b3 = 0.1

P.182 本文 下から5~6行目(丸数字は紙面では黒丸数字)

誤 有意に多いカテゴリが赤(⑤⑥)、有意に少ないカテゴリが青(①②)
正 有意に少ないカテゴリが赤(⑤⑥)、有意に多いカテゴリが赤(①②)

P.184 本文 上から3行目

誤 図3.38では
正 図3.39では

P.187 本文 上から6行目

誤 実測値と平均値との差 fi - M
正 実測値と平均値との差 yi - M

P.187 本文 上から7行目

誤 予測値と平均値との差 yi - M
正 予測値と平均値との差 fi - M

P.201 本文 上から8行目

誤 よいでしょう。」
正 よいでしょう。

P.202 本文 下から1行目

誤 図3.44のような
正 図3.45のような

P.204 図番号

誤 図3.44
正 図3.45

P.210 本文 上から10行目

誤 しかしVIFが
正 VIFが

P.211 図3.47 交互作用を含むモデルと中心化

右側の説明から指す矢印の場所を修正し,数値の意味を追記しました。

P.267 本文 下から2行目

誤 小数の
正 少数の

P.278 図4.26 表「因子負荷量」のヘッダ

誤 英語   数学
正 第1因子  第2因子

P.296 本文 下から3行目

誤 わかります。ます。
正 わかります。

P.310 本文 上から4行目

誤 図4.37のように
正 図4.39のように

P.335 本文 下から9行目

誤 SEMモデリングでは、
正 SEMでは、

P.339 図4.48 各変数間の因果関係

「販促」と「チラシ配布」の矢印の向きを修正します。

P.375 本文 上から1行目

誤 また、境界線は
正 また、境界線が

(以下2019年4月2日更新)

P.xiii 上から2行目

誤 (2) 一般線形モデル(GLM)
正 (2) 一般化線形モデル(GLM)

P.302 下から3行目(見出し)

誤 (2) 一般線形モデル(GLM)
正 (2) 一般化線形モデル(GLM)

(以下2019年3月26日更新)

P.115 リスト3.2(3.1.02.Summarize.R)の6行目

誤

stringsAsFactors = FALSE), #文字列を文字列型で取り込む

正

stringsAsFactors = FALSE) #文字列を文字列型で取り込む

P.154 リスト3.6(3.2.04.ModelComparison.R)の9行目

誤

stringsAsFactors = FALSE, #文字列を文字列型で取り込む

正

stringsAsFactors = FALSE) #文字列を文字列型で取り込む

P.167 リスト3.7(3.2.05.TwoRegression.R)の9行目

誤

stringsAsFactors = FALSE, #文字列を文字列型で取り込む

正

stringsAsFactors = FALSE) #文字列を文字列型で取り込む

P.209 リスト3.13(3.3.07.MultiColinearity.R 続き)の22行目

誤

stringsAsFactors = FALSE, #文字列を文字列型で取り込む

正

stringsAsFactors = FALSE) #文字列を文字列型で取り込む

P.215 リスト3.14(3.4.01.StadardizedRegression.R 続き)の29行目

誤

#目的変数の分散(不偏分散)

正

#目的変数の標準偏差

P.215 リスト3.14(3.4.01.StadardizedRegression.R 続き)の31行目

誤

#説明変数の分散(不偏分散)

正

#説明変数の標準偏差

P.215 リスト3.14(3.4.01.StadardizedRegression.R 続き)の36行目

誤

#  偏回帰係数*説明変数の不偏分散/目的変数の不偏分散

正

#  偏回帰係数*説明変数の標準偏差/目的変数の標準偏差

P.237 リスト4.1(4.2.03.Scaling.R)の7行目

誤

sd(x)  #標準偏差(不偏標準偏差)

正

sd(x)  #標準偏差(不偏分散の平方根)

P.260 リスト4.5(4.2.06.Outlier.R 続き)の21行目

誤

#lof値が2を超えてかどうかをTRUE/FALSEで配列化

正

#lof値が2を超えているかどうかをTRUE/FALSEで配列化

商品一覧