スポンサーリンク

【R言語】for文を使ってデータフレームを処理する方法

Rで使えるサンプルデータを準備する

まずfor文でデータ処理に使うサンプルデータを用意するわけですが、Rはデフォルトで呼び出せるデータセットが存在しています。サンプルデータの一覧は以下にあります.

R言語 標準データセットの私的まとめ

チラッと見てみると,経済学,薬学,医学,生物学,天文学など……多くの分野で使われそうなサンプルデータが沢山あるので便利ですね。実務に使う感じのデータセットも多く、実践的なデータが揃っておりまさにデータ分析に特化したプログラミング言語だと言えます。まあ今回は適当にPythonの機械学習でもお馴染みのアヤメのデータを使ってみます。

#データセットをデータフレームにして読み込ませる

> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
…
…
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica

これで処理に使うデータセットは準備できたので、次は実際にfor文を使ってこのデータセットの中から欲しいデータを抽出していきます。

データフレームの基本的な操作

このデータフレームから横一列のデータを抽出したい場合、Rなら以下のように記述します。

> iris[1,]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa

> iris[2,]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2 4.9 3 1.4 0.2 setosa

これで横一列のアヤメ1つずつの特徴をまとめたデータが取得できます。そして、加えてその後ろに[]を付けることで横一列のデータの中から特定の場所の数値だけを抽出することも可能です。

> iris[1,][1]
Sepal.Length
1 5.1
> iris[1,][2]
Sepal.Width
1 3.5

スポンサーリンク

データフレームをfor文で処理する

for文の使い方としてはまず「空のリストをあらかじめ作り、そこにfor文で処理した結果を加えていくという形が基本」です。Rなら空のリストは「list()」で作成することができます。

#空のリストを作る

sample=list()

そして、データフレームの処理でfor文を使いこなすためにはまずfor文の仕組みを知っておかなければいけません。for文の仕組みは「指定したリストの値を1つずつ変数「i」に代入しつつ、指定された処理を繰り返し実行する」というものです。

よく入門書の例題にあるfor(1:10)みたいなfor文は同じ処理を10回繰り返すという意味ではなく、1から10までの数字が格納されたリストの中から1つずつデータを取り出して「i」に代入しているにすぎません。

#print('helloWORLD!'を10回繰り返す

> for(i in 1:5){print('helloWORLD!')}
[1] "helloWORLD!"
[1] "helloWORLD!"
[1] "helloWORLD!"
[1] "helloWORLD!"
[1] "helloWORLD!"

試しにここに「i」の中身をprint()で表示させる処理を加えてみるとこんな感じの実行結果になります。

> for(i in 1:5){
+ print('helloWORLD!')
+ print(i)
+ }
[1] "helloWORLD!"
[1] 1
[1] "helloWORLD!"
[1] 2
[1] "helloWORLD!"
[1] 3
[1] "helloWORLD!"
[1] 4
[1] "helloWORLD!"
[1] 5

これが分かっていればデータフレームの処理にもfor文を簡単に応用することができるようになります。for文の使い方は状況によって多岐に渡りますがデータ分析という点でよく使うのは条件に一致するデータの抽出するという処理でしょう。

まずよくある処理の一例として、さっきのアヤメのデータフレームの中からSepal.Widthが3.5以上の個体のデータだけ抜き出すという処理をfor文を使って実行してみます。

アヤメのSepal.Width は「iris[1,][2]」という風に記述することで抜き出すことができました。これをiris[150,][2]まで繰り返してその中から3.5以上のアヤメの個体データが欲しいわけです。

なのでfor文の繰り返す範囲はfor(i in 1:150)にして「i」を順番に代入していく部分はiris[]の部分になりますので、iris[i,]とします。

for(i in 1:150){iris[i,][2]}

そして、iris[i,][2]の値が3.5以上であれば、あらかじめ作った空のリストに加えるという処理を行います。そのためにはSepal.Widthの値が3.5以上なら加える、3.5未満なら加えないという条件ごとに異なる処理を行う必要があります。そんなときに使えるのがif文です。if文の仕組みは「if~の条件式がTrueだった場合続きの処理を実行する」というものです

条件式というのは「x<5」みたいな不等号みたいな記号であらわされた式です。この式を実行すると正しかった場合は「True」間違っていたら「False」が返されます。

例えば

x=5

x<10
[1] TRUE
x<3
[1] FALSE

この条件式が「TRUE」だった場合に続きの処理を実行するのがif文の仕組みです。なので、Sepal.Widthの値が3.5以上ならその列の値をリストに加えたい場合は以下のように書きます。

sw=iris[i,][2]

if(sw>3.5){paste(sample,list(sw))}

このif文とfor文を組み合わせると以下のようになります。

for(i in 1:150){
+ sw=iris[i,2]
+ if(sw>3.5){sample<-append(sample,iris[i,])}
+ }
> sample

終わり

以上が基本的なfor文によるデータフレームのデータ処理方法です。ただRの場合はスクリプト言語なのでfor文が遅いため、データ処理をfor文で行うのはあまり得策ではありません。基本的にはRでのデータフレームの処理はdplyrを使って行列として処理するのが一般的です。

ただプログラミングの基本あくまでif文とfor文なので、データ処理の基本はこういうものだということは知っておくべきです。自分がそうだったのですが、dplyrなどを使って手早く処理する手法はこういうfor文の基本ができてから始めないと何も身に付かないのでちゃんと押さえておきましょう。

スポンサーリンク

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする