Rでデータ解析を始めよう001 まずはグラフを描いてみる1

Rでデータ解析を始めよう001 まずはグラフを描いてみる1

モモノキ&ナノネと一緒に統計ソフトRの使い方を学習していきます。

モモノキ&ナノネと一緒にRでグラフを描いてみよう




Rで初めてのグラフ作成、データセットcarsを使って散布図を描いてみよう。

ナノネ、今回から統計解析用のフリーソフトとして有名な『R』の使い方を練習していこう。

Pythonは使わないの?

うん。Pythonを使ったデータ解析の学習はメインで続けていくけど、今回の学習シリーズでは『R』を使ってみよう。

データ解析の方法をネットで調べるとRを使った解説が多いよね。Rも使えるようになっておけば、Pythonのデータ解析に役立つよ。コードの書き方は違うけど理屈は一緒。

『R』は有名だから名前だけは知ってるけど、使ったことない。モモノキはRに詳しいの?

使ったことない。PCにさっきインストールしたばっかり。

大丈夫?

グーグル先生がついているから、きっとなんとかなるよ。まずは手を動かしてRを使ってみよう。

Rのインストール方法はPC環境によっても違うから、詳しいサイトの解説を参考にしてね。準備が終わってRが使える状態になった前提で始めるよ。

RはJupyter Notebook上でも動かせるの?

うん。学習記録を記事に残す都合もあるから、Jupyter Notebook上でRが動くように設定しておいたよ。Pythonと同じように実行できるから便利だね。

Rは何から練習する?時系列分析とか?

まだRの使い方がよく分からないから、とりあえずグラフを描く練習からやってみよう。

OK。グラフを描いてRに慣れる。

グラフに利用するデータはR組み込みのデータセットを使うことにしよう。どんなデータがあるかな?

In [5]:
nrow(data()$results) # 組み込みデータセットの個数
104
In [6]:
head(data()$results[,c("Item","Title")], 10) # データセットの内容表示(先頭10個)
ItemTitle
AirPassengers Monthly Airline Passenger Numbers 1949-1960
BJsales Sales Data with Leading Indicator
BJsales.lead (BJsales) Sales Data with Leading Indicator
BOD Biochemical Oxygen Demand
CO2 Carbon Dioxide Uptake in Grass Plants
ChickWeight Weight versus age of chicks on different diets
DNase Elisa assay of DNase
EuStockMarkets Daily Closing Prices of Major European Stock Indices, 1991-1998
Formaldehyde Determination of Formaldehyde
HairEyeColor Hair and Eye Color of Statistics Students

Pythonで時系列分析の練習に使った『AirPassengers』も入ってた!

AirPassengersはまたの機会にして、今回はcars(Speed and Stopping Distances of Cars)というデータセットを使ってみよう。車のスピードと停止距離のデータだよ。

AirPassengersはまた今度ね。carsのデータセットを読み込む方法は?

データセットを読み込むには、data(データセット名)とすればOK。

In [7]:
data(cars) # データセット読み込み:省略可能

carsという変数名でデータセットの内容が入るよ。でもdata()は明示的に実行しなくても、直接carsするだけでデータを利用できるみたいだよ。

違う名前の変数に代入したい場合は、『<-』を使うよ。Rでは変数の代入に『=』じゃなくて『<-』が一般的に使用されるよ(表記方法はいくつかあるけど)。

In [8]:
data1 <- cars # carsの内容をdata1に代入(値コピー)
# または、data1 <- data(cars)
In [9]:
ls() # 利用中の変数を再確認
  1. 'cars'
  2. 'data1'

Rでは『=』の代わりに『<-』を使うんだ。

help(cars)とすれば、ドキュメントのデータ内容が確認できるよ。ほかにもデータ件数はnrow()、内容はstr()やsummary()で、引数にデータを指定すれば確認できるよ。

In [10]:
# help(cars) # R Documentation(表示は省略)
In [11]:
nrow(data1)
50
In [12]:
str(data1)
'data.frame': 50 obs. of  2 variables:
 $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : num  2 10 4 22 16 10 18 26 34 17 ...
In [13]:
summary(data1)
     speed           dist       
 Min.   : 4.0   Min.   :  2.00  
 1st Qu.:12.0   1st Qu.: 26.00  
 Median :15.0   Median : 36.00  
 Mean   :15.4   Mean   : 42.98  
 3rd Qu.:19.0   3rd Qu.: 56.00  
 Max.   :25.0   Max.   :120.00  

carsは50件のデータで、speed(速度)とdist(停止までの距離)の値が入ってた。

散布図でプロットするには(グーグル先生によると)、とりあえずplot(データ)でOKかな。

In [14]:
plot(data1) # 散布図プロット

Jupyter Notebookでインライン表示するにはグラフがデカイね。もう少し小さくならない?

グラフの描画サイズはoptions()というので調整できるみたい。軸のフォントサイズはpar(ps=○)で変更してみて。設定方法は何通りかあるみたいだから、使いながら覚えていくことにしよう。

In [15]:
# グラフサイズ調整(width,heightデフォルト=7)
options(repr.plot.width=4, repr.plot.height=4)
In [16]:
par(ps = 9) # 軸のフォントサイズ変更
plot(data1) # 散布図プロット

グラフのタイトルは、plot()のオプション引数mainで設定。軸名ラベルはxlabとylabでそれぞれ設定できるよ。

In [17]:
par(ps = 9) # 軸のフォントサイズ変更
# 散布図プロット
plot(data1,
     main="Speed and Stopping Distances of Cars",
     xlab="speed(mph)",
     ylab="dist(ft)")

回帰直線とか引ける?

lm()で回帰分析した結果をabline()で描画すると、グラフに回帰直線を表示できるよ。

In [18]:
par(ps = 9) # 軸のフォントサイズ変更

# 散布図プロット
plot(data1,
     main="Speed and Stopping Distances of Cars",
     xlab="speed(mph)",
     ylab="dist(ft)")

# 回帰直線を引く
result <- lm(dist ~ speed, data = data1) # 回帰分析(目的変数dist、説明変数speed)
abline(result, col="red") # 回帰直線を描画

回帰分析の結果も確認できるよ。今回のケースだと、切片が-17.579で傾きが3.932だね。

In [19]:
result # 回帰分析モデルの結果
Call:
lm(formula = dist ~ speed, data = data1)

Coefficients:
(Intercept)        speed  
    -17.579        3.932  

グラフの細かい設定はまだよく分からないけど、なんとか出来そう。

あと、変数のタイプはclass()で確認できて、データセットを読み込んだ変数はdata.frame型になっているよ。data.frameの列名(変数名)はcolnames()で確認できるから覚えておいてね。

In [20]:
class(data1) # 変数タイプ -> data.frame
'data.frame'
In [21]:
colnames(data1) # data.frameの変数名
  1. 'speed'
  2. 'dist'

data.frameの列データを個々に取得したい場合は、data.frame変数のあとに$つなぎで列名(変数名)を指定すればOKだよ。

In [22]:
print(data1$speed) # speedのデータ取得(data.frame変数と$でつなぐ)
 [1]  4  4  7  7  8  9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
In [23]:
print(data1$dist) # distのデータ取得(data.frame変数と$でつなぐ)
 [1]   2  10   4  22  16  10  18  26  34  17  28  14  20  24  28  26  34  34  46
[20]  26  36  60  80  20  26  54  32  40  32  40  50  42  56  76  84  36  46  68
[39]  32  48  52  56  64  66  54  70  92  93 120  85

変数名にドットが入っていたり、$で連結したり、代入が矢印だったり、Pythonとは表記が違うから混乱するなぁ。

言語によって表記の作法がちょっと違うけど、少し慣れれば問題ないよ。

最後にまとめコードも兼ねて、グラフデータを個別に指定する方法を試してみよう。

In [24]:
data(cars) # データセット読み込み

# グラフサイズ変更(width,heightデフォルト=7)
options(repr.plot.width=4, repr.plot.height=4) 
par(ps = 9) # 軸のフォントサイズ変更

x <- cars$speed
y <- cars$dist

# データプロット(散布図)
plot(x, y,
     main="Speed and Stopping Distances of Cars",
     xlab="speed(mph)",
     ylab="dist(ft)")

# 回帰直線を引く
result <- lm(y ~ x) # 回帰分析:目的変数y(dist)、説明変数x(speed)
abline(result, col="red") # 回帰直線を描画

あとで、cars以外のデータでも試してみる。

次回もグラフ練習を続けるよ。
またね!





スポンサーリンク

0 件のコメント :

コメントを投稿