こんにちは,shun(@datasciencemore)です!
前回はtidyverseについてその概要をサクッと紹介しました.
tidyverseには全部で8つのコアパッケージがあるのですが,今回はそれらには触れないで,パイプ処理についてやっていきます.
※なぜかというとこのパイプ処理が8つのコアパッケージを扱うために必要不可欠な知識だからです.
このパイプ処理というのは何なのか,詳しく見ていきましょう!
1.パイプ処理ってなに??
パイプ処理っていうのは,%>%を使って処理の順番どおりにコードを記述することだよ!!
%>%っていう見慣れない文字のことをパイプって呼んでいるよ!!
はい,何言ってるかわかりませんね笑
パイプ処理は言葉だとチンプンカンプンですが,実際に使えばすぐにわかります.
ということで,さっそく次章で具体例についてみていきましょう!
2.パイプ処理の具体例
今回は,txhousingというデータを使用していきます.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# A tibble: 8,602 x 9 city year month sales volume median listings inventory date <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 Abilene 2000 1 72 5380000 71400 701 6.3 2000 2 Abilene 2000 2 98 6505000 58700 746 6.6 2000. 3 Abilene 2000 3 130 9285000 58100 784 6.8 2000. 4 Abilene 2000 4 98 9730000 68600 785 6.9 2000. 5 Abilene 2000 5 141 10590000 67300 794 6.8 2000. 6 Abilene 2000 6 156 13910000 66900 780 6.6 2000. 7 Abilene 2000 7 152 12635000 73500 742 6.2 2000. 8 Abilene 2000 8 131 10710000 75000 765 6.4 2001. 9 Abilene 2000 9 104 7615000 64500 771 6.5 2001. 10 Abilene 2000 10 101 7040000 59300 764 6.6 2001. # … with 8,592 more rows |
さて,次のような簡単な処理について考えてみましょう.
① thhousingをインプットデータにして,city列,year列,month列,sales列を抽出する.
② ①で得られたデータフレームをインプットデータにして,sales列が100以上の行を抽出する.
この処理をパイプなしで書いた場合とパイプありで書いた場合を比較してみましょう.
1 2 3 4 5 6 7 8 9 10 |
# パイプなし filter( select(txhousing, city, year, month, sales), sales >= 100 ) # パイプあり txhousing %>% select(city, year, month, sales) %>% filter(sales >= 100) |
出力は両方とも完璧に同じです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# A tibble: 5,582 x 4 city year month sales <chr> <int> <int> <dbl> 1 Abilene 2000 3 130 2 Abilene 2000 5 141 3 Abilene 2000 6 156 4 Abilene 2000 7 152 5 Abilene 2000 8 131 6 Abilene 2000 9 104 7 Abilene 2000 10 101 8 Abilene 2000 11 100 9 Abilene 2001 2 112 10 Abilene 2001 3 118 # … with 5,572 more rows |
なんか%>%なんて文字,見慣れないから気持ち悪いし...
ソンナコトナイヨ!!
それじゃ,2つのコードを見比べてみよう!
どのような処理をしているか,コードから読み取れるかな?
次のイメージ図も見てみてください.
同じ色の対応に注目してくださいね.
処理の内容とコードの順番も一緒だし,インプットデータが外出しだから,見ただけで何してるか一目瞭然です.
それに比べて,パイプなしは処理内容とコードの順番が違うし,インプットデータが処理の中に入っていて,わかりづらいなぁ...
でしょでしょ!!
パイプを使用する最大の目的はコードの可読性を高めることだよ!!
%>%を見たら,心の中で「そして次の処理は~」と訳せばOKだよ!!
このパイプ処理,処理内容が複雑になればなるほど威力を発揮します.
このパイプ処理の仕組みは,
①f(x, y) ⇔ x %>% f(y)
②g(f(x, y), z) ⇔ f(x, y) %>% g(z) ,f(x, y) %>% g(z) ⇔ x %>% f(y) %>% g(z)
のように,処理の一番最初の入力をパイプを使用して,外出しにしているのです.
このおかげで,処理が上から下へ記述できるようになり,上の例でみたように可読性が高まっているのですね!
パイプ処理は便利そうだけど%>%って文字列をタイプするのはめんどいなぁと思ったそこのあなた!
ご安心ください!!
RStudioを使用していれば,以下のショートカットキーで%>%が挿入されます!
Windows:Ctrl+Shift+M
MAC :Control + Shift + M
これでサクッとタイピングできるので,慣れると爽快で気持ちいいですよ♪
まとめ
今回はパイプ処理について学びました.
パイプを使用することで,処理の一番最初の入力を外出しにできます.
そのおかげで可読性が高まります.
これは使ってみるとわかりますが,めっちゃ便利ですよ!!
ということで,今後はいちいちパイプ処理ですなんて断らずに普通に使用していきますね笑
さっ,次回からようやくtidyverseのコアパッケージ第1弾のtibbleについてご紹介できます.
ここまで長かったですね...
これからがいよいよtidyverse講座のメインですので,引き続きよろしくお願いいたします!
それじゃ,お疲れ様でした!!