“R”でがんばるデータサイエンティストへの道 #2

株式会社エル・ティー・エス 渡辺翔太

株式会社エル・ティー・エス 業務分析&CRM推進グループ  渡辺翔太。 東京大学大学院にて農学修士を取得。2014年4月にLTSに入社し、現在はコンタクトセンターにおけるCRMプログラム構築の一環としてデータ分析 業務に従事している。

こんにちは。
株式会社エル・ティー・エスの渡辺翔太です。
前回はRとR Studioのインストールを行いました。

今回から実際にR Studioを用いてデータを分析していきたいと思います。大きなテーマは次の2つ。

テーマ1:Rの基本的なプログラミングを学ぶ
テーマ2:Rで表データを扱う

それでは早速R Studioを開いてみましょう。

image1

エディタ画面に前回の指示文(コード)が残っていましたね。このまま続きを書いても良いですし、[Ctrl+Shift+N]で新しいエディタ画面のタブを作成することもできます。

テーマ1:Rの基本的なプログラミングを学ぶ

①変数と代入
他のプログラミング言語と同様に、Rにおいても変数という重要な概念があります。変数とは、データに固有の名前(変数名)を与えたものです。そして、変数名とデータを紐付けることを代入と言います。

例えば、“2”という数値のデータをxという名前の変数に代入するとします。
するとxは2という数値として扱うことができます。

1つの数値以外にも、数列(複数の数値の並び)や文字の列、行列(縦×横に並んだ数値)など、いろいろなものを変数に代入することができます。

少し難しいお話になりましたが、要するにデータに名前を付け、その名前でデータの計算や処理を行うということです。

実際にxという変数に2という数値データを代入してみましょう。
Rでは

「x xの中身を見たい場合は、単純に変数名「x」と記述して実行します。

xの中身が2であることが分かりました。ここで、別のデータをxに代入すると、それまでの2というデータが別のデータに上書きされます。一度上書きされるとそれまでのデータは消えてしまいますので、変数を作成するときにはなるべく新たな変数名を用いることをお勧めします。

続いてsuretsuという変数名の変数に、複数の数値を代入してみます。
「suretsu

変数suretsuに、6つの数値からなる数列データを代入することができました。このように複数のデータが並んだ変数構造のことを、Rではベクトルと呼びます。また、ベクトルの各データのことを要素といいます。
c()というのは、ベクトルを作成する指示文で、c()の中にデータをカンマ(,)で区切って入れることで数列を作ることができます。

ところで、変数名を付ける際には次のルールに気を付ける必要があります。
・数字を先頭にすることはできない
・英数字、日本語のどちらも自由に組み合わせられる
・半角記号はアンダーバー(_)とピリオド(.)のみ使用できる

②データの型
Rのデータには、次のようにというものが決まっています。

理論値とは、真か偽の二者択一を表すデータであり、Rでは真のことをTRUE、偽のことをFALSEと表記します。
ベクトルの要素は、すべて同じデータ型である必要があります。そのため、型が異なる要素をc()でベクトルにする場合、データの型が統一されます。その際、統一される型は、要素の型の中で大小関係の最も大きな型となります。
次の例を見てみましょう。

1行目では変数yに、理論値のTRUE、実数の2、文字列のHelloをベクトルとして代入しています。文字列をデータとして扱う場合には、ダブルクォーテーション(””)でくくる必要があります。ダブルクォーテーションがないと、変数名して認識されます。2行目で実際にyの要素を見てみると、ダブルクォーテーションでくくられた要素が並んでいます。代入したデータの型のうち、最も大きい文字列型に統一されていることが分かります。

3行目では変数zに、理論値のTRUE、理論値のFALSE、実数の1を代入しています。4行目で実際にzの要素を見てみると、1、0、1というデータが並んでいます。これは、より大きな型である実数型に統一されたときに、TRUEは1、FALSEは0として認識されていることを意味します。

5行目では数字の後ろに“L”を書いています。これは、整数型を指定する表記方です。通常、整数をそのまま記述すると、実数の型として認識されます。明示的に整数型を指定する際には、このように”L”を書くことで整数型として扱うことができます。しかし、わざわざ整数型を指定する場面は滅多にありませんので、2や4のような整数を代入するからといって、あえて”L”を書く必要はないでしょう。

③条件
Rの機能のひとつに、ベクトルの要素が「ある条件」を満たすかどうかを理論値で返すものがあります。具体例を見てみましょう。

この例では、先ほど作成したsuretsuというベクトルの要素のうち、3以上の要素かどうかを判定し、TRUEかFALSEで返しています。また、結果を変数に代入することができ、その変数は理論値を要素とするベクトルになります。

条件を指定するコードは次のようなものがあります。

④関数
c()のように、○○()という指示文のことを関数といい、()の中にデータや変数を入力することで、関数に特有の処理を実行することができます。()の中に入力するデータや変数のことを引数といいます。Rにはたくさんの関数がデフォルトで用意されています。例として、合計を求めるsum()関数を紹介します。ここに、5人のある商店での購入金額データがあります。

この5人の購入金額の合計をsum()関数で求めてみましょう。sum()関数は引数に足される数を入力します。複数の引数を入力する場合はカンマで区切ります。

合計金額が17,603円であることが分かりました。また、計算結果を代入することもできます。

代入した結果を、別の処理を行う関数の引数に指定することができます。Rは統計処理を行う関数が豊富に用意されています。分析に必要な処理を行う関数を、インターネットや書籍などで調べながら用いましょう。
また、今後もこのコラムではたくさんの関数が出てきます。ひとつずつ、どのような処理を行う関数なのかを確認しながら読み進めてくださいね。

テーマ2:Rで表データを扱う

データフレーム構造
IT技術が進歩し、様々なビジネスデータが整理された状態でシステムに格納されるようになりました。整理された状態とは、下図のように各列に同じ形式の値が格納された表データの状態を指します。

Rでも、このような表形式のデータ構造が用意されており、そのデータ構造のことをデータフレームといいます。Rにデフォルトで用意されているデータフレーム構造のデータのひとつに、「iris」というものがあります。実際にデータを見てみましょう。

※ここではhead()関数を用いて、先頭6行分のデータのみ示しています。
このデータは、アヤメという植物150個体について”がく”(sepal)の長さと幅、花びら(petal)の長さと幅、個体の種名を調査したものです。各列の表頭に”Sepal.Length”、”Sepal.Width”、”Petal.length”、”Petal.Width”、”Species”という列名が付いており、各行が1個体のデータを示しています。
データフレームの実体は、各列をひとつのベクトルとしたベクトルの集合体です。データフレームを扱う際、すべてのデータに処理を行うことはあまりなく、むしろデータの一部に処理を行うことが多いです。データフレームから、一部のデータを抽出したい場合の処理を紹介します。

基本のコード
次のコードはm行n列目のデータを抽出します。

この形を応用して複数のデータを抽出します。

複数のデータ抽出コード①
各行または各列のすべてのデータを抽出する場合は、空欄にします。

列名が分かっている場合は、列名をダブルクォーテーションで括って指定することで抽出できます。

複数のデータ抽出コード②
複数行・複数列のデータを指定する場合は、抽出したい行と列をベクトルを用いて指定します。

複数の列名からなるベクトルで指定することもできます。

複数のデータ抽出コード③

列名が分かっていて、1列だけ抽出したい場合には、上図のようにデータ名と列名をドルマーク($)でつなぐことでも抽出できます。このとき、ダブルクォーテーションは不要です。

複数のデータ抽出コード④

image22

理論値を用いても抽出することができます。この場合、1、3、5列目だけが抽出されます。これを応用して、ある条件を満たすデータだけ抽出することができます。
たとえば、Sepal.Lengthが6.0以上のものを抽出してみましょう。まず、Sepal.Lengthが6.0以上という条件を理論値ベクトルで見てみます。

image23

150個体のうち、Sepal.Lengthが6.0以上のものはTRUE、それ以外のものはFALSEとなっています。この結果を用いて、Sepal.Lengthが6.0以上の個体の全データを見てみましょう。
「iris$Sepal.Length >= 6.0」というコードそのものが理論値ベクトルを出力するので、これをそのままiris[○○,]の○○の部分に記述します。

image24

これで「Sepal.Lengthが6.0以上」という条件を満たすデータのみ抽出することができました。

以上が、主なデータフレームからのデータ抽出法でした。
さて、次回のコラムでは、実際のデータをRに読み込みデータフレームとして扱っていきます。さらに、そのデータを用いて基本的な集計や統計に関する数値の算出を行なっていきたいと思います。どうぞお楽しみに!


日本最大級のITビジネスコミュニティ アサインナビ