Basics/Keyword:R(プログラミング言語)Rは主に統計解析やその可視化を行うためのオープンソースのソフトウェア環境。機械学習を行うためのツールとしても広く使われている。});連載目次Rは主に統計解析やその可視化を行うためのオープンソースのソフトウェア環境(プログラミング言語およびそのランタイム環境)。統計解析だけではなく、機械学習を行うためのツールとしても広く使われている。今も述べた通り、Rは統計解析を行い、その結果を視覚化するための機能を豊富に持ったプログラミング言語およびランタイム環境であり、対話的にデータを操作しながら、さまざまな知見を得ることができる。サンプルデータが豊富に取りそろえられているので、Rをインストールするだけで、統計処理についての学習を始められる。Network)で提供されている。以下ではRおよびそのIDEとして有名なRStudioをインストールした環境で動作を確認している。RStudioでRを利用しているところ言語として見たときのRの特徴はベクトルや行列、データフレームといったRが提供する各種のデータ型を直感的に扱えるという点にある。ここでいうベクトルとは特定の型の値を要素とする1次元のデータ構造、行列は同じく同じ型の値を要素とする2次元のデータ構造、データフレームとはExcelと同様な行列形式のデータ構造であるが、行列とは異なり列ごとに異なる型のデータを格納できる。この他にも任意の種類のデータを格納可能なリスト、多次元行列を表す配列などの複雑なデータ構造がRでは使用できる。直感的とは次のような計算がRでは可能ということだ。1」というベクトルを作成する。上のコード例では同じ要素数のベクトルの各要素について加減乗除を行っている。通常の言語であれば、各要素を加算するにはループあるいはマップなどを使用して行うことになるだろうが、Rはベクトルなど、複数の値を格納するデータ構造に対する加減乗除が直感的に行えることが分かる。以下のような演算も可能だ。これはベクトルの各要素を3倍するコードだ。行列についても見てみよう。行列と単位行列の積を求める行列はこのように関数matrixを使用して作成する(最初の2行がかっこで囲まれているのは、代入結果をコンソールに出力するため。以下の実行例を参照)。引数ncolには列数を指定している。1)」と4つの要素を渡しているので、結果的には2×2の行列が作成されることになる(行数を指定する引数nrowもある。引数ncol/nrowの両者を指定した場合、渡した要素の数が行列の総要素数より多ければそれらは捨てられ、少なければエラーとなる)。行列の積を求めるのに「%*%」演算子を使用する点には注意しよう。実行結果を以下に示す。4実行結果このように、ベクトルなどのデータ構造に対する直感的な操作をサポートしているのがR言語の大きな特徴の1つといえる。Rを特徴付けるもう1つの大きな要素が「データフレーム」といえる。先ほども述べたがデータフレームとはExcelライクな行列形式のデータ構造であり、列ごとに異なる型の値を格納できる。eng_results))データフレームの作成これは3人の学生とその数学/英語の試験の成績をデータフレームにまとめるものだ。70試験結果をまとめたデータフレーム行列やベクトルとは異なり、異なる型のデータを扱えていることが分かる。関数data.frame呼び出しで名前付き引数の形でStudent/Math/Englishを指定している点だ。これにより、列名が指定されている。1つは、変数studentsは文字列を含むベクトルとなっていたが、データフレームには引用符が見えないところだ。実は、上のコード例では文字列は因子(factor)と呼ばれる型のデータに変換されている。これは解析を行う際に使用されるもので、例えば、天気が「晴れ」「曇り」「雨」といったカテゴリで表現される場合に、それらを因子として表現する(因子は文字列のように見えるデータ、シンボルを扱うためのものだが、実際には何らかの数値と関連付けられて保存され、これによりカテゴリを表す要素として文字列をそのまま利用するよりもメモリ効率がよくなる。これについてはこの後で例で見てみよう)。行列形式に並べられたデータには幾つかの方法でアクセスできる。列]」形式で指定する方法がある。単独で「[x]」とした場合には第x列が参照される。上の出力結果と照らし合わせながら見てほしい。因子endoに関連付けられている数値データフレームの要素へのアクセス以下に実行結果を示す。最後の方にある2つの関数class呼び出しは1列目(Student列)とその要素(df[3,1])のクラスを調べるものだ。最初の関数class呼び出しでは"data.frame"が返されている。これはdf[1]が返すものがデータフレームである(行列形式のデータ構造)であることを示している。これと同じデータは先頭の「df$Student」でも取り出しているが、その出力形式が異なっている点に注意しよう。1]」の実行結果には「Levels」で始まる行も出力されている。これは、これらの結果が因子(factor)を取り出していて、その因子には「endo」「isshiki」「kawasaki」の3つのレベルがあることを示している(ただし、これらの因子は順序性を持たない。実際には何かのエラーの重大度について例えば「Error>Warning>Info」などのように順序性を持たせることも可能)。最後の「as.integer」呼び出しでは因子endoが数値1に関連付けられていることが分かる。次にグラフのプロットについて見てみよう。Rではとても簡単にグラフも描画できる。関数を定義して、その関数の値をグラフ化してみる。type="l")関数グラフのプロット関数fは見ての通り、渡された値の二乗を返す(「<-」はRにおける代入演算子なので、変数fに関数が代入されている)。25」となる(このように関数にベクトルを渡すと、その全要素に関数が適用されるのもRの特徴の1つだ)。実行結果を以下に示す。最初のグラフは点で値をプロットし、次のグラフは各値を折れ線でつないでいる(ので、グラフの線が示す値は実際の値とは異なる)。グラフの描画結果また、Rには統計処理を学ぶために使えるさまざまなデモやサンプルデータも用意されている。最後に、その例から1つ選んで、そのグラフを実際にプロットしてみよう。ここでは「HairEyeColor」という学生の性別ごとにまとめた髪の毛と目の色についての統計データを例にする。HairEyeColorについての概要を見てみよう。ヘルプを表示HairEyeColorの概要を表示これによりHairEyeColorのドキュメントが表示される。HairEyeColorの概要の表示ドキュメントの最後にあるExampleに従って集計を行ってみよう。以下に実行結果を示す。"......")」という行だ。興味のある方はプロットをしてみよう。ここでは、これは行わずに、HairEyeColorオブジェクトからデータフレームを作成してみよう。ylab="hair")データフレームから髪の毛と目の色の相関性をグラフ化する実行結果を以下に示す(パッと見には相関はないようだ)。実行結果Rにはこの他にも多数のサンプルデータがあるので、いろいろと試してみるとよい。サンプルデータ一覧」が役に立つ。前述のページで概要を見た後に、ドキュメントを見ながら実際にデータを操作してみよう。Rは統計解析を行い、その結果を視覚化するための機能を豊富に持ったプログラミング言語およびランタイム環境であり、対話的にデータを操作しながら、さまざまな知見を得ることができる。本稿ではRにおける特徴的なデータ構造と、簡単なグラフのプロットだけを紹介したが、CRANから提供されている多くのパッケージを使用することで、統計解析や機械学習を行うためのツールとして広く使われている。R用のIDE「RStudio」の公式サイト。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。