dplyrとは
- Rで大規模データをさくさく処理するためのパッケージ
- 内部結合とかSQLみたいな処理もできる
- Rでデータ処理する人は必ず使ってる(くらいメジャーで有用)
以上!!
あとはだらだら使い方を説明。
あとはだらだら使い方を説明。
使い方
まず、データを用意する。用意するデータは、ドイツなどの株価指数のデータ。
(全然大規模データじゃないけど。。)
> #Rに最初からあるサンプルデータ(EuStockMarkets)を使う > #中身は主要株価指数:DAX(ドイツ)、SMI(スイス)、CAC(フランス)、FTSE(イギリス) > #データの先頭部分を確認してみる > head(EuStockMarkets) DAX SMI CAC FTSE [1,] 1628.75 1678.1 1772.8 2443.6 [2,] 1613.63 1688.5 1750.5 2460.2 [3,] 1606.51 1678.6 1718.0 2448.2 [4,] 1621.04 1684.1 1708.1 2470.4 [5,] 1618.16 1686.6 1723.1 2484.7 [6,] 1610.61 1671.6 1714.3 2466.8 > #作図 > plot(EuStockMarkets)
plot(EuStockMarkets)の結果。上からドイツ、スイス、フランス、イギリスの主要株価指数の日次データ |
グラフにすると分かりやすい♪
*このデータを使ったせいで後ほど不思議なエラーに遭遇します
準備①:dplyrをインストールする
下記のコードを実行。> install.packages("dplyr")
これを実行すると、勝手にダウンロード・インストールが始まる。
インストールできたらdplyrを読み込む。
> library(dplyr)
準備②:データをtbl_dfというデータ構造に変換
(まあ、普通のデータフレーム:data.frameでも操作可能だけど。。)ちなみに、dplyrを読み込まないと、、
> #tbl_df(データフレーム拡張したデータ構造)に変換 > EuStockMarkets_df <- tbl_df(EuStockMarkets) Error in tbl_df(EuStockMarkets) : could not find function "tbl_df"
あ、エラーだ。
肝心のdplyr読み込むの忘れるとエラーになります。。
ちゃんと、dplyrを読み込むと、
> library(dplyr) 次のパッケージを付け加えます: ‘dplyr’ 以下のオブジェクトは ‘package:data.table’ からマスクされています: between, first, last 以下のオブジェクトは ‘package:stats’ からマスクされています: filter, lag 以下のオブジェクトは ‘package:base’ からマスクされています: intersect, setdiff, setequal, union > #tbl_df(データフレーム拡張したデータ構造)に変換 > EuStockMarkets_df <- tbl_df(EuStockMarkets)
ちなみに、tbl_dfに変換しておくと、データ名実行でデータの要約が表示されます。
> EuStockMarkets_df # A tibble: 1,860 x 4 DAX SMI CAC FTSE <dbl> <dbl> <dbl> <dbl> 1 1628.75 1678.1 1772.8 2443.6 2 1613.63 1688.5 1750.5 2460.2 3 1606.51 1678.6 1718.0 2448.2 4 1621.04 1684.1 1708.1 2470.4 5 1618.16 1686.6 1723.1 2484.7 6 1610.61 1671.6 1714.3 2466.8 7 1630.75 1682.9 1734.5 2487.9 8 1640.17 1703.6 1757.4 2508.4 9 1635.47 1697.5 1754.0 2510.5 10 1645.89 1716.3 1754.3 2497.4 # ... with 1,850 more rows
また、普通のデータフレームに変換して実行すると、
> data.frame(EuStockMarkets_df)
全データがコンソールに表示されます。
(今回は省いていますがコンソール画面はデータでいっぱいです)
あと、データ構造(クラス)を確認すると、
> class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame"
ちゃんとtbl_dfになっています。
(data.frameも表示されているので普通のデータフレーム型としても扱えそうです)
使い方①:filterでほしい行のデータを抽出
方法は、filter(データ名, 条件)という感じ。やってみると、
> filter(EuStockMarkets_df, DAX <= 1450) Error in filter_impl(.data, quo) : matrix as column is not supported
ん、エラーだ。。
意味はmatrixはサポートしてないよーて感じかな。
いやでもtbl_dfに変換しているからmatrixになってないはず。
一応、調べると、
> class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame"
やっぱりmatrixになってない。おかしいなー。
元のサンプルデータは、、、
> class(EuStockMarkets) [1] "mts" "ts" "matrix"
matrixだ。でも、変換してるから関係ないはず。。
んー、なぞだ。これバグでは??
元のサンプルデータがmatrixだから変な挙動してるのかな。
一回、データを書き出して新しいデータとして読み込んで実行してみるか。
お、いけた。> #write.csvでcsvファイルを書き出す *row.names = Fは行番号を書き出さない処理
> write.csv(EuStockMarkets,"C:/Users/mtsuj/data.csv",row.names = F)
> #freadはcsvを高速で読み込む関数 > #*data.tableをインストールしてlibrary(data.table)で読み込む必要 > EuStockMarkets_df <- fread("C:/Users/mtsuj/data.csv")
> #freadで読み込むとdata.tableとdata.frameのデータ構造になる > class(EuStockMarkets_df) [1] "data.table" "data.frame" > > #今のデータ構造でも問題ないが、今回はtbl_dfに変換する > EuStockMarkets_df <- tbl_df(EuStockMarkets_df) > class(EuStockMarkets_df) [1] "tbl_df" "tbl" "data.frame" > > #filterでドイツの株価指数が1450以下のものを抽出 > filter(EuStockMarkets_df, DAX <= 1450) # A tibble: 6 x 4 DAX SMI CAC FTSE <dbl> <dbl> <dbl> <dbl> 1 1402.34 1788.0 1611.0 2446.3 2 1421.49 1820.5 1612.5 2488.4 3 1434.61 1858.2 1654.2 2517.1 4 1446.32 1870.3 1673.9 2538.8 5 1437.65 1878.4 1657.3 2541.2 6 1441.57 1881.5 1655.1 2557.2
Rってこうゆうところありますよね。。
他の使い方は次回ご紹介
*使い方編はこちら
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。