データサイエンスのためのR速習 ~入門から機械学習まで~ 第1話

Rはもともと統計計算ソフトとして開発されてきた経緯があるが、フリーでオープンソースであったこともあり、多数の人たちがどんどんパッケージと呼ばれる追加機能を提供し、現在でもパッケージは増え続けている。Rさえ使えれば、それらの専門家が作ったパッケージを利用可能であり、ほとんど全ての統計計算ができる

近年では機械学習や深層学習といった人工知能のパッケージも開発されていて、データサイエンスの現場では非常に重宝されているツールの1つだ。

管理人の専門領域の1つである生物学と情報学の融合分野「バイオインフォマティクス」においても、Rが使いこなせるというのは必須である

これまで多数の生物学系の研究者からRやデータサイエンスについて相談を受けた経験を生かし、ここにR速習コースを用意した。

対象としているのはRやデータサイエンスを勉強したいがまだあまり経験のない、非エンジニアの方々である。

Rの基本操作

四則演算

+, 記号は算数と同じ意味である。かけ算は*記号、割り算は/記号になるのは、エクセルと同じである。
算数と同じく*や/が優先されるが、かっこを使って計算順番を変えることもできる。
累乗は^記号で表す

# 1行ずつ実行する。その行にカーソルを合わせcontrolとEnterキー同時押し。
# 左下のConsoleに結果が出力される
1+2
9.2 + 3.1
6 - 2
2/3
100*2 + 80/4
100 * (2+80) /4
4^4 # 4*4*4*4と同じで256となる。

割り算の余りを求めるときには%を2つ重ねて%%とする。この場合は7 ÷ 3 = 2あまり1なので、1と表示される。

7 %% 3

変数の扱い

変数に代入するにはこのように<-記号を使う。この例ではaという名前をつけた変数に100と入れている。

a <- 100

変数に入れたものは他の変数と計算に使うことができる。例えば100が入っている変数aと、10が入った変数bを足すには

b <- 10
c <- a + b
c

クラス

Rにはクラスという概念があり, class () 関数で調べることができる。整数と小数はnumeric classになる。

class (1)
class (2.3)

文字はシングルクウォーテーション ( ) もしくは ダブルクウォーテーション ( ) で囲む。cという文字なら”c” とする。

文字はcharacterクラスになる。”c” は文字なのでcharacter classだが、先ほど計算した数値が入っているcはnumeric classになることに注意。

class ("c")
class (c)

このように文字と数値は全く扱いが異なる

TRUE, FALSE (どちらも大文字) で真偽を表す。このような2値形式はBooleanと言い、logical classである。TRUE, FALSEはそれぞれT, Fと頭文字1文字で表すこともできる

class (TRUE)
class (F)

ベクトル

ベクトルの定義

ベクトル (vector) はRにおける最も基本的なデータ構造の構成要素である。数学のベクトルとは少し違い、Rのベクトルは1次元の配列で、 これまで出てきたcharacter, numeric, logicalデータを保持できる。組み合わせるという意味のcombineの頭文字cを使って、要素をコンマで並べて定義できる。

例えば数値 (numeric class) のvectorを作ってみる

nvec <- c (1,2,3,4,5)
nvec
class (nvec)

文字列 (character) のvectorは

cvec <- c('U', 'S', 'A')
cvec
class (cvec)

Boolean (logical) のvectorは

lvec <- c (TRUE, FALSE)
lvec
class (lvec)

同じベクトルで複数のクラスを同時には使えない

複数のclassを混ぜることはできない。どちらかに統一されてしまう 。例えばBooleanとnumericを混ぜるとnumericとなる

v <- c(FALSE, 2)
v
class (v)

文字と数字を混ぜると文字 (characterクラス) になる

v <- c('A',1)
v
class (v)

もし複数のclassを一緒に使いたいならlistを使う必要がある (第2話)。

ベクトルに名前をつける

ベクトルに名前をつけるのはnames () 関数を使う。例えば気温を入れたtempベクトルに、その曜日を名前としてつけるには

temps <- c(25,22,19,23,24,27,76)
names (temps) <- c('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
temps

ベクトルによる計算

ベクトルの四則演算

ベクトルの四則演算は要素ごとの計算になる。例えばv1を(1,2,3), v2を (4,5,6) とした場合、v1 + v2は (1+4, 2+5, 3+6) で (5,7,9) となる。v1*v2なら (1*4, 2*5, 3*6) で(4, 10, 18) の要領だ。

v1 <- c(1,2,3)
v2 <- c(4,5,6)
v1+v2
v1*v2

Rの組み込み関数を使った統計計算

Rの組み込み関数を使うとより簡単に計算できる。例えばベクトル要素の総和をとるにはsum ()関数、ベクトル要素の積はprod()関数で求められる。

sum (v1) # (1,2,3) の総和で1+2+3=6
prod (v2) # (4,5,6) の総積で4*5*6=120となる

標準偏差はsd()関数, 分散はvar()関数, 最大値はmax()関数, 最小値はmin()関数で取得できる。

sd (v2)
var (v2)
max (v2)
min (v2)

簡単な統計量の要約はsummary()関数で表示できる。

v <- c(1,2,3,4,5,6)
summary (v)

ベクトルの要素の取得

[]を使うとベクトルのその要素を取り出すことができる。複数まとめてとるならcで統合する。例えば、v1ベクトルの2番目の要素ならv1[2], 1・3番目ならv1[c(1,3)]とすればいい

v1 <- c(100,200,300)
v1[2]
v1[c(1,3)]

ある一定範囲の要素を取ることもできる (slicing)。slicingをするにはコロン(:) を使う

v <- 1:10 # 1から10までのベクトルを作る
v
v[3:5] # 3から5番目の要素
v[8:10] # 8から10番目の要素

ベクトルにつけた名前で要素を取得

ベクトルvのそれぞれの要素の文字a,b,c,dと名前をつけると、v[‘a’] とすれば最初の要素を名前で取得できる。もちろんこれはv[1]と同じである。複数の名前をcでまとめて指定することも可能。

v <- c(1,2,3,4)
names(v) <- c('a','b','c','d')
v['a']
v[1]
v[c('a', 'c', 'd')]

数値の比較

>, <記号は算数と同じ意味の比較に使える。>=, <= という等号つきの意味になる記号もある。比較が正しければTRUE, 間違いならFALSEという結果になる

5 > 6
6 >= 5

左右が等しいかどうかは=を2つ重ねて==記号を使う。等しくないは、Rで否定を表す!記号を=の前につけて!=と表記する。

5 == 5
2 != 3

マイナスの値と比較するときは注意が必要。(>, -などの間の) スペースの有無で意味が変わる。<と-の間にスペースがない<-記号は代入記号である。

var <- 1 # スペースなし。変数varに1を代入するという意味
var < -2 # スペースあり。varが-2より小さいかという意味

このように比較をする<, >, ==, !=などを比較演算子という

比較演算子によるベクトルのフィルタリング

比較演算子はベクトルにも使える。それぞれの要素について、その比較を行う。例えば次の例では、v1の3つ全ての要素について2より大きいかという比較が行われ、FALSE, TRUE, TRUEとなる

v1 <- c(1,2,3) v1 > 2

ベクトルのフィルタリングに使うこともできる。FALSEになるものは除かれ、TRUEになるものだけが返される。次の例ではv>2の条件を満たすものだけが選択され、2, 3となる。

v[v>2]

ヘルプとコンソール

ヘルプ機能

関数の使い方が分からなくなることはよくある。そういうときにはRのヘルプ機能で調べることができる。ヘルプの表示のさせ方はいくつかある

help (vector) # vectorについて知りたい
help.search ('numeric') # numericについて知りたい
?sd # sd関数の使い方を知りたい

個人的には調べたい関数名の先頭に?をつけるやり方が直感的で分かりやすいと思う。
ヘルプは右下の画面に表示される。ヘルプの一番下にはExamplesが書かれているので、この使用例を見るのがいい

コンソールのクリア

これで第1話は終わりである。最後に、いろいろ結果が出力されている左下のコンソール部分をクリアする方法を紹介しよう。
control + Lを同時押しするだけである。

第2話について

今回の第1話ではRによる四則演算から、ベクトル構造までを紹介した。Rにはベクトルの他にあと3つの代表的なデータ構造がある。
第2話では、そのうちの行列について見ていこう。

[getpost id=”571″]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA