2026年5月28日に共立出版より『アートオブ・機械・学習』が出版されました。
2023年に統計数理研究所で開催されたR研究集会(「データ解析環境Rの整備と利用」)で同書の著者が開発したqeMLパッケージの紹介をした縁で同書をご恵贈いただきましたので、noteの方でレビューを書かせていただきました。
本書では様々なサンプルデータを用いて各機械学習手法を解説しています。
パッケージに含まれるデータセットはdata()関数で簡単に呼び出せるのですが、一部のデータは外部から取り込む必要があり、特にRの初心者にはやや煩雑です。
そこでこの記事では紹介されている各データを簡単に取り込めるコードを紹介します。
どれもコピペして実行するだけでデータを取り込めます。
なお、本書の方針に合わせてTidyverseは使わずにBase Rで書いています。
Telco Churn データセット(P50)
書籍の中ではKaggleで公開されているデータセットが紹介されています。
Kaggleで公開されているデータセットはRKaggleパッケージで簡単に取り込むことができます。
if (!require("RKaggle", quietly = TRUE)) install.packages("RKaggle")
library(RKaggle)
telco <- get_dataset("blastchar/telco-customer-churn") |>
as.data.frame()
脊椎データ(P56)
こちらのデータセットはUCI機械学習レポジトリで公開されています。
UCI機械学習レポジトリで公開されているデータセットはucimlrepoパッケージで簡単に取り込めます。
データセットの名前かid番号で指定します。
そのままだと様々なメタデータが含まれるので、必要なデータフレームのみを取り出します。
また、書籍に合わせて変数名をV1~V7に置き換え、V7は因子型に変換しています。
if (!require("ucimlrepo", quietly = TRUE)) install.packages("ucimlrepo")
library(ucimlrepo)
vert_raw <- fetch_ucirepo(name = "Vertebral Column") #データセット名で指定する場合
# vert_raw <- fetch_ucirepo(id = 212) #id番号で指定する場合
vert <- vert_raw$data$original
rm(vert_raw)
names(vert) <- paste0("V", 1:7)
vert$V7 <- as.factor(vert$V7)
予約データセット(P62)
こちらもKaggleで公開されているのでRKaggleパッケージで取り込みましょう。
変数名を書籍に合わせ、文字列型を因子型に変換する処理も行っています。
if (!require("RKaggle", quietly = TRUE)) install.packages("RKaggle")
library(RKaggle)
ma <- get_dataset("joniarroba/noshowappointments") |>
as.data.frame()
names(ma) <- make.names(names(ma), unique = TRUE)
char_cols <- sapply(ma, is.character)
ma[char_cols] <- lapply(ma[char_cols], as.factor)
Million Songs データセット(P87)
こちらのデータセットはUCI機械学習レポジトリで公開されています。
しかし、このデータセットではucimlrepoパッケージに対応したファイルが用意されていません。
また、サイズが約200MBと大きいため通常の方法では読み込みに非常に時間がかかります。
ここでは大規模データに対応したarrowパッケージを用いて、大きなデータを高速に読み込むこととします。
if (!require("arrow", quietly = TRUE)) install.packages("arrow")
library(arrow)
temp_zip <- tempfile(fileext = ".zip")
url <- "https://archive.ics.uci.edu/static/public/203/yearpredictionmsd.zip"
download.file(url, temp_zip, mode = "wb")
yr <- as.data.frame(read_csv_arrow(unz(temp_zip, "YearPredictionMSD.txt")))
unlink(temp_zip)
Forest Cover データセット(P120)
こちらのデータセットはUCI機械学習レポジトリで公開されています。
UCI機械学習レポジトリで公開されているデータセットはucimlrepoパッケージで簡単に取り込めます。
if (!require("ucimlrepo", quietly = TRUE)) install.packages("ucimlrepo")
library(ucimlrepo)
cvr_raw <- fetch_ucirepo(id = 31) #id番号で指定する場合
cvr <- cvr_raw$data$original
rm(cvr_raw)
names(cvr) <- paste0("V", 1:55)
アフリカ土壌データ(P133)
こちらもKaggleで公開されているのですが、コンペ用のデータなのでRKaggleパッケージでは取り込みができません。
これだけはKagggleにログインしてダウンロードしてくるしかないようです。
ネットワーク監視(P139)
このデータはエクセル(xlsx)形式なので、rioパッケージを使って読み込みます。
if (!require("rio", quietly = TRUE)) install.packages("rio")
library(rio)
ds <- import("https://github.com/val-luciani/qoe-ml-prediction/raw/refs/heads/master/qoe-prediction/dataset.xlsx")
char_cols <- sapply(ds, is.character)
ds[char_cols] <- lapply(ds[char_cols], as.factor)
names(ds) <- make.names(names(ds), unique = TRUE)
Airbnbデータ(P169)
このデータはKaggle上で公開されているのでRKaggleで取得できる。
前処理されていない生データである。
if (!require("RKaggle", quietly = TRUE)) install.packages("RKaggle")
library(RKaggle)
Abb <- get_dataset("jeploretizo/san-francisco-airbnb-listings") |>
as.data.frame()
また、訳注にあるように、前処理済みのデータが原著者によって公開されている。
temp_Rdata <- tempfile(fileext = ".Rdata")
url <- "https://github.com/matloff/ArtOfML/raw/refs/heads/main/Data/Abb.Rdata"
download.file(url, temp_Rdata, mode = "wb")
load("Abb.Rdata")
unlink(temp_Rdata)
PART V に関しては訳者の方が訳注で丁寧にデータの取り込み方を記載されているので割愛します。
以上です!