なぜデータ分析においては、SQLではなくRを使うべきか？　 データ分析ツールExploratoryを使って、dplyrを使いこなす第1弾 Filter関数編


##はじめに

この記事は、Rは知らないけど、SQLとか他のプログラミング言語はある程度やったことあるみたいな人向けです。
興味がなかったり、意味のないデータを取り除きたいと思ったことはありませんか？　データをフィルタリングすることは、データ分析をする上での基本的な操作です。dplyrには、filter()関数というのが備わっています。しかし本当にdplyrがすごい理由は、実はデータの加工、分析のための文法なのです。そのため、データを抽出するために元々作られたSQLや他のBIツールと違って、もっと、データを直感的に分析し、さらには分析している最中に必要であればデータの加工もしていくことが簡単にステップを重ねていくようにできます。


##dplyrとは

データフレームの操作に特化したRのパッケージです。
Rの一般的な関数に比べて、dplyrはC++で書かれているのでかなり高速に動作します。

SQLと比較するとわかりやすいです。主要なdplyrの機能とSQLの対比は、下図となります。

|dplyr       |SQL          |説明　　　　　　　　　　　　　　　　　|
|:-----------|:------------|:---------------------------------|　　　　　　　　　　　　　
|filter      |where        |行の絞り込み　　　　　　　　　　　　　 |
|group by    |group_by     |グルーピングする　　　　　　　　　　　  |
|select      |select       |データフレームから指定した列のみ抽出する　|
|arrange     |order by     |行を並べ替える　　　　　　　　　　　　  |
|summarise   |count,max    |集計する　　　　　　　　　　　　　　　 |



これから、Rのフロントエンドと呼ばれているデータ分析ツールExploratoryを使いながら、dplyrについて簡単に説明していきます。データは[こちら](https://www.dropbox.com/s/x2g3qgo28syxhcl/airline_delay_2016_01.csv?dl=0
)からダウンロードできます。

##データをインポートする

まず、ここからプロジェクトを作ることができます。

![create-project.png](https://qiita-image-store.s3.amazonaws.com/0/91522/3cf25da2-96ee-35c0-9777-434ae2ece00f.png)


次に、ここからデータをインポートできます。

![flight-import.png](https://qiita-image-store.s3.amazonaws.com/0/91522/4e830f80-8724-fafa-6a21-547a981b2fe6.png)


データをインポートすると、データのサマリー画面を見ることができます。

![flight-dplyer.png](https://qiita-image-store.s3.amazonaws.com/0/91522/c0ccdfc0-2838-aaf1-fc46-e385eba3fb33.png)


##Selectコマンドを使って、列を選択する


Selectコマンドを使うことで、分析したい列だけを選ぶことができます。

![flight-dplyer-select.png](https://qiita-image-store.s3.amazonaws.com/0/91522/82d47c7e-d8aa-e70d-04d0-b2efe68eb05e.png)


##知りたいデータだけをフィルタリングする

例えば、United Airline (UA)会社のフライトのデータだけを見てみましょう。

列のヘッダーをクリックしてfilterコマンドを選びます。

![filter-header.png](https://qiita-image-store.s3.amazonaws.com/0/91522/c4a37a1b-6363-11de-fd03-b0f7dde13c22.png)


すると、自動的にfilter(CARRIER == )が入力されます。次に、レコメンドされている候補からUAを選びます。

![filter-flight.png](https://qiita-image-store.s3.amazonaws.com/0/91522/017d2082-9f50-551d-71c5-e50198cf9721.png)



また、andを意味する&演算子を使うと、条件を加えることができます。&を使って、United Airline (UA)会社のフライトに加え、出発地点がSan Francisco airport (SFO)のフライトのデータも見てみましょう。

![filter-and.png](https://qiita-image-store.s3.amazonaws.com/0/91522/61aa2b14-4cda-b677-49ba-34153c87827f.png)



もしくは、!=演算子を使って、条件を反対にすることもできます。!=を使って、出発地点は、San Francisco airport (SFO)のままだけれど、United Airline (UA)会社ではないフライトのデータを見ることもできます。


![filter-!=.png](https://qiita-image-store.s3.amazonaws.com/0/91522/0e9ba39f-e71c-63c9-5350-49aba7f317ff.png)



##複数の値をフィルタリングする


United Airline (UA)とAmerican Airline (AA)の両方のフライトのデータだけを見たい場合は、SQLにおけるINにあたる%in%を使うと見ることができます。

列のヘッダーをクリックしてfilterコマンドを選びます。

![filter-header2.png](https://qiita-image-store.s3.amazonaws.com/0/91522/975d9993-b3df-5363-0ab3-e954ee5a0879.png)


すると、自動的にfilter(CARRIER %in% c())が入力されます。次に、レコメンドされている候補からUAとAAを選びます。

![filter-in.png](https://qiita-image-store.s3.amazonaws.com/0/91522/e4933008-b52b-1525-a371-fb249c3a5474.png)



本当にうまくいってるのかを確認するために、count()関数を使って、簡単にデータを集計してみましょう。

列のヘッダーをクリックしてcountを選びます。

![count-column.png](https://qiita-image-store.s3.amazonaws.com/0/91522/52975570-fb9b-a40d-712d-91889f90367c.png)


すると、自動的にcount(CARRIER)が入力されます。

![count-filter.png](https://qiita-image-store.s3.amazonaws.com/0/91522/f0732ae3-a31a-a534-1229-578cba782f5a.png)



思ったとおり、AAとUAだけでしたね。ご覧のとおりcount関数は、とても直感的で便利です。この関数は、指定したグループの行の数を返します。この場合なら、CARRIERですね。


##NA値をフィルタリングする

データを見ていくと、ARR_DELAY列にいくつかNA値があることが確認できますね。

![arr-delay-na.png](https://qiita-image-store.s3.amazonaws.com/0/91522/c39a798c-0e9b-bd81-7ecf-b4849aac3a74.png)


値が、NA値だったら、TRUEを返して、そうでなければFALSEを返すis.na()関数を使うと、それらを簡単に取り除くことができます。

列のヘッダーをクリックしてWorking with NAからDrop NAを選びます。

![drop-Na-with.png](https://qiita-image-store.s3.amazonaws.com/0/91522/bda836ad-f752-5824-14f3-332b1759d77a.png)


すると、自動的にfilter(!is.na(ARR_DELAY))が入力されます。

![arr_delay-all.png](https://qiita-image-store.s3.amazonaws.com/0/91522/68d33264-8b6d-afe1-e37a-35f6ed87bae6.png)


おっと、ARR_DELAYの値がすべてNA値になってしまいましたね。ぼくたちが知りたいデータは全く逆のことなので、条件文に!を足しましょう。

![filter-all.png](https://qiita-image-store.s3.amazonaws.com/0/91522/3bec4d58-2a74-9639-0aa9-6e48dd1edec9.png)



以上が、dplyrでの基本的なフィルタリングに関する操作です。dplyrでは、他にもデータを集計したり、window関数を使ったり、文字列を整形したり、date関数を使ったり、まだまだいろんなことができます。そちらの方はこれから書いていく予定ですので、お楽しみに！



##興味を持っていただいた方、実際に触ってみたい方へ

Exploratoryは[こちら](https://exploratory.io/
)からβ版の登録ができます。こちらがinviteを完了すると、ダウンロードできるようになります。

Exploratoryの日本ユーザー向けの[Facebookグループ](https://www.facebook.com/groups/1087437647994959/members/
)を作ったのでよろしかったらどうぞ

ExploratoryのTwitterアカウントは、[こちら](https://twitter.com/ExploratoryData
)です。

分析してほしいデータがある方や、データ分析のご依頼はhidetaka.koh@gmail.comまでどうぞ