Rによるデータ分析

Rのサンプルデータ

筆者は、初めて使う手法がどんなものなのかを実際に動かして確認したい時や、手法を比較したい時には、 どんなデータなのかがわかっているデータを入力にしてます。

世の中の解説記事では、irisのような、よく知られたデータを使う場合と、乱数で作ったデータを使う場合がありますが、 筆者の場合もどっちも使います。

このページでは、irisのようにライブラリに同梱されているデータをcsvファイルにしてから、これらのツールで使ってみる場合や、 筆者が良く使っている自作のサンプルデータをまとめています。

ライブラリに同梱されているデータ

下記では、「Data」という名前で同梱されているサンプルデータを取り込んでいます。 こうすると「Data」という名前でRの分析が進められます。

ちなみに、世の中のサンプルコードでは「df」という名前のことが多いです。

iris

irisは、おそらく一番有名なサンプルデータです。

1〜4列目が量的変数で、5列目が質的変数です。

質的変数を目的変数にする方法、量的変数を目的変数にして、量的・質的が混ざった説明変数を扱う方法などに使えます。

Data <- iris

CO2

量的変数が2列、質的変数が3列あります。

使い道はirisと似ています。

Data <- CO2

warpbreaks

量的変数が1列、質的変数が2列あります。 二元配置の実験データになっています。 繊維の種類が2種類、力のかけ方が3種類あり、その破壊試験のデータになっています。

実験データの分析や、量的変数がカウントデータになっているデータの分析( 一般化線形混合モデル など)の練習に使えます。

Data <- warpbreaks

分析例が、 R-EDA1によるwarpbreaksの分析 にあります。

longley

量的変数が7列あり、時系列データにもなっています。

多重共線性が含まれているので、現実の多変量データのデータ分析の練習に使えます。 6列目が年なので、取り除いた方が、使い勝手が良いです。

Data <- longley

airquality

時系列データです。 Rによる時系列データの次元削減分析 などを試せます。 欠損値(NA)も入っています。

5列目と6列目が、月と日なので、削除してからの方が扱いやすいです。 これらを取り除くと、量的変数が4つあるデータになります。

Data <-airquality

分析例が、 R-EDA1によるairqualityの分析 にあります。

mtcars

すべて量的変数です。 サンプル名が入っています。

サンプルの類似度の分析 や、 多対多の分析 を試したい時に便利です。 変数同士に因果関係があるので、因果関係の分析もできます。

Data <- mtcars

分析例が、 R-EDA1によるmtcarsの分析 にあります。

LifeCycleSavings

すべて量的変数です。 サンプル名が入っています。 使い道は、mtcarsと似ています。

Data <- LifeCycleSavings

state.x77

すべて量的変数です。 サンプル名が入っています。 使い道は、mtcarsと似ています。

アメリカの各州のデータなので、データの中身がイメージしやすいです。

Data <- state.x77

UScitiesDとeurodist

どちらも距離行列です。 UScitiesDが米国の都市間の距離行列で、 eurodistがヨーロッパの都市間の距離行列です。

Rによる多次元尺度構成法 などで、 距離行列をスタートにする時の多次元尺度構成法を試したい時に使えます。

Data <- UScitiesD

Data <- eurodist

分析例が、 R-EDA1によるUScitiesDとeurodistの分析 にあります。

サンプルデータの自作

筆者は実験用の自作のデータを、EXCELで作ることが多いです。 ちょこっと外れ値を入れたり、散布図でデータの様子を確認しながらデータを作るには、EXCELは手軽です。

下記は、 ばらつくデータの作り方 をRでやってみる時の例になります。 Rで作ると、Rのエディタの中だけで作業が済みます。

正規分布に従う乱数を1列作る

平均が10、標準偏差が2になる乱数を100個作る方法です。 Dataという名前のデータフレームで、X1という名前の変数ができます。

なお、作った乱数で、平均や標準偏差を計算すると、10.00000000や2.00000000にはならず、だいたいその位の数字になります。 しかも、毎回変わります。 これが嫌な場合は、10万個くらい作る必要があります。 完全な解決にはなりませんが、少なくとも分析の結論が変わってしまうほどの誤差はなくなります。

X1 <- 10 + 2 * rnorm(100)
Data <- as.data.frame(X1)

相関のない2変数を作る

X1とは相関がなく、平均が20、標準偏差が3になる乱数を作ります。

「相関がない」と書きましたが、相関係数が0になる訳ではないです。 サンプル数が多いほど0に近付きます。

n <- 100
X1 <- 10 + 2 * rnorm(n)
Data <- as.data.frame(X1)
Data$X2 <- 20 + 3 * rnorm(n)

相関のある2変数を作る

X1とX2で単回帰分析をすると、傾きが3、Y切片が40で、X1とX2が高い相関になるような2変数を作ります。

n <- 100
X1 <- 10 + 2 * rnorm(n)
Data <- as.data.frame(X1)
Data$X2 <- 3 * Data$X1 +40 + 0.01 * rnorm(n)

相関の強さは「0.01」としているところで変わります。 大きいほど、相関が低くなります。 この例だと、「100」にすると相関係数が0.1くらいになります。 同じ「100」でも、X1の分布の大きさと傾きによって、相関への影響度は変わった来ます。

重回帰分析向けのサンプルデータを作る

Y、X1、X2、X3という変数があって、重回帰分析をすると、「Y = X1 + X2」というモデル式がベストになり、X3は含めなくて良い場合のデータの作り方です。

n <- 100
X1 <- rnorm(n)
Data <- as.data.frame(X1)
Data$X2 <- rnorm(n)
Data$X3 <- rnorm(n)
Data$Y <- Data$X1 + Data$X2 + 0.01 * rnorm(n)

一様分布に従う乱数を1列作る

0から1の範囲に入る一様分布になる乱数を作ります。

これに100をかけると、0から100が範囲になります。

X1 <- runif(100)
Data <- as.data.frame(X1)

等間隔な数値の変数を1列作る

一様分布の乱数は、等間隔ではないです。

例えば、散布図の横軸にする変数を、等間隔にしたい時のやり方です。

0から1までを10等分して、11個のサンプルを作る場合です。 0.1刻みの数字ができます。

n <- 11
Xmin <- 0
Xmax <- 1
X1 <- 0
Data <- as.data.frame(X1)
for (i in 1:n-1) {
Data[1+i,1]<- (Xmax - Xmin)/(n-1)*i+Xmin
}

サンプルデータを、csvファイルにして保存

Rによるデータ分析 のサンプルコードや、 R-EDA1R-QCA1 では、汎用性を考えて、csvファイルを入力データとして使えるようにしてあります。

下記では、「Data」という名前でPCに入れたサンプルデータを、Cドライブの直下の「Rtest」というフォルダに「Data.csv」という名前で保存することを想定しています。

サンプル名がない場合

write.csv(Data, row.names = FALSE, "C:/Rtest/Data.csv")

データフレームにサンプル名がない場合は、 「row.names = FALSE」として保存します。

なお、TRUEにすると、1列目に行番号が入っているcsvファイルになります。 分析で行番号も使いたい場合は、TRUEにします。

サンプル名がある場合

write.csv(Data, row.names = TRUE, "C:/Rtest/Data.csv")

例えば、mtcarsの場合は、車の名前はサンプル名になっていて、変数にはなっていません。

「row.names = FALSE」にすると、サンプル名が入らないファイルができます。

距離行列の場合

UScitiesDや、eurodistは、距離行列(dist)という特殊な行列になっています。これをcsvファイルにする場合は少し複雑です。

write.csv(as.data.frame(as.matrix(Data)), row.names = TRUE, "C:/Rtest/Data.csv")



参考文献

R-source
正規分布、一様分布以外の乱数の作り方もあります。
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/60.html


Rのデータセット
上記以外についても、網羅的に紹介しています。
https://www.math.chuo-u.ac.jp/~sakaori/Rdata.html





Tweet データサイエンス教室