こんにちは,shun(@datasciencemore)です!!
今回は,tidyverseのコアパッケージの1つである{dplyr}について説明していきます.
{dplyr}は,tidyverseのコアパッケージの中でも最重要かつ最もよく使うパッケージだと思います.
{dplyr}を使えるようになると,前処理がすんごく楽になるのでしっかりついてきてくださいね!!
1.{dplyr}ってなに??
{dplyr}は,データフレームの処理に特化したパッケージだよ.
{dplyr}には前処理に必要不可欠な便利関数がたくさんあるんだ!!
{dplyr}は,データフレームの処理に特化したパッケージです.
データフレームは目的に応じて様々な形に変形する必要がありますよね.
例えば,
・この列の数値が100以上の行を抽出する.
・これらの列はいらないから削除する.
・新たな列を追加したい.
などなど...
このようなデータフレーム処理に特化したパッケージが{dplyr}です.
{dplyr}ですが,様々な便利関数が内蔵されています.
...が,全部紹介することは到底不可能です笑
ですので,まずは超よく使う3つの関数select, filter, mutateについて簡単にご紹介して,前処理の雰囲気をつかんでいただければと思います.
より詳細には別記事で別途紹介する予定です.
それでは,さっそく学習していきましょう!
今回は,tidyverseをロードすると使えるようになる「diamonds」というデータを使用していきます.
「diamonds」は,このような感じのデータです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
diamonds # A tibble: 53,940 x 10 carat cut color clarity depth table price x y z <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39 # … with 53,930 more rows |
それでは,順番に使用方法を見ていきましょう.
2.filter
まずは1つ目,filterからです.
filterは,条件を指定してあげて,その条件を満たした行を抽出するときに使用します.
こんな感じのイメージです.
ここでいう条件っていうのは,どのような行が欲しいかの情報を示してます.
データフレーム %>% filter(条件)
の条件というところに,欲しいデータの条件を記述することで,欲しいデータを抽出することができます.
例えば,diamondsを調べているときに,全部ではなくて,その一部のcolor列が「E」であるデータだけが欲しかったとしましょう.
その場合,このように書いて,実行すると以下のようになります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
diamonds %>% filter(color == "E") # A tibble: 9,797 x 10 carat cut color clarity depth table price x y z <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 4 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 5 0.2 Premium E SI2 60.2 62 345 3.79 3.75 2.27 6 0.32 Premium E I1 60.9 58 345 4.38 4.42 2.68 7 0.23 Very Good E VS2 63.8 55 352 3.85 3.92 2.48 8 0.23 Very Good E VS1 60.7 59 402 3.97 4.01 2.42 9 0.23 Very Good E VS1 59.5 58 402 4.01 4.06 2.4 10 0.23 Good E VS1 64.1 59 402 3.83 3.85 2.46 # … with 9,787 more rows |
color == "E"の部分が条件に該当します.
このように欲しい行の情報を条件として,指定してあげることによって,その行を抽出できるのです.
2.select
さぁ,続いては2つ目,selectです.
selectは,データフレームの列の一部を取り出すときに使用します.
イメージにするとこんな感じ.
ここの条件もfilterと同様に,どのような列が欲しいかの情報ってことですね.
データフレーム %>% select(条件)
の条件というところに,欲しいデータの条件を記述することで,欲しいデータを抽出することができます.
例えば,diamondsのcarat列,color列,depth列,price列を抽出したいときは,次のようになります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
diamonds %>% select(carat, color, depth, price) # A tibble: 53,940 x 4 carat color depth price <dbl> <ord> <dbl> <int> 1 0.23 E 61.5 326 2 0.21 E 59.8 326 3 0.23 E 56.9 327 4 0.290 I 62.4 334 5 0.31 J 63.3 335 6 0.24 J 62.8 336 7 0.24 I 62.3 336 8 0.26 H 61.9 337 9 0.22 E 65.1 337 10 0.23 H 59.4 338 # … with 53,930 more rows |
と,指定した列が抽出できることが確認できます.
余裕ですね笑
select内で指定している列名に「'」や「”」がないことに注目してください.
pandasでは,列をしているするときに'列名'としていましたが,dplyrはその必要がありません.
これ,地味に便利ですよ笑
ちなみに「"」を使用しても動作します.
しかし,これは古いバージョンのdplyrでは動作しない場合があるので,「"」を使用する必要がない場合は「"」をつけないでおきましょう.
参考に「"」をつけた場合のコードも載せておきますね.
1 2 |
diamonds %>% select("carat", "color", "depth", "price") |
3.mutate
最後の3つ目,mutateです.
mutateは,データフレームに指定した条件の列を追加をするときに使用します.
イメージがこんな感じです.
ここの条件もfilter,selectと同様です.
データフレーム %>% mutate(条件)
の条件というところに,追加したい列の情報を記述することで,欲しいデータを追加することができます.
例えば,diamondsにtest列という列を新規で作成し,その列に1を代入したいことを考えます.
それを実現させるためには以下のコードでOKです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
diamonds %>% mutate( test = 1 ) # A tibble: 53,940 x 11 carat cut color clarity depth table price x y z test <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl> 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 1 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 1 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 1 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63 1 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 1 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 1 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47 1 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53 1 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 1 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39 1 # … with 53,930 more rows |
右側にtest列が追加されていることが確認できますね.
こんな感じで新規で列を追加したいときにmutateを使用します.
まとめ
今回は,{dplyr}のうち,定番中の定番であるfilter,select,mutateについて,学習しました.
それぞれの特徴は次のとおり
- filter:条件を満たした列を抽出
- select:条件で指定した列を抽出
- mutate:条件で指定した列を追加
どれもめっちゃ使うので,ぜひ覚えてくださいね!!
また,今回紹介した関数はごくごく一部です.
dplyrはもっと色々な関数があるので,それらについては別途紹介させていただきますね.
それじゃ,お疲れ様でした!!