読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【R】絶対に身につけて欲しいR術

R dplyr

友人が、後輩にこちらの記事を紹介していました。

www.shiningmaru.com

Excelの基本的な機能や、分析の心構えが過不足なく紹介されている素晴らしい記事だと思います!しかし、私は統計用環境のR言語が大好きで、分析のほとんどの場面で、RはExcelより簡単に記述できると思っています。

というわけで、「もしRで同じ内容の記事を書くとどうなるのか」というパロディーを書いてみることにしました。


クライアントとかと接しながらいつも思うのですが、Rすら出来ない人多すぎ。あなたたちが作った適当なフォーマットと手打ちのExcelで苦労するの誰だと思ってるの。そこで今回は私の「社会人であればこんくらいは最低限出来てよ」というフラストレーションをぶつけた「これだけ最低限知ってろ、R編」です。

これくらい出来ないと人間ではない。獣(ケダモノ)である。

  • Rで出来ること
  • あるべきフォーマット/作ってはならないフォーマット
  • 頻出ショートカット
  • dplyr::left_join
  • dplyr::group_by, dplyr::summarise
  • グラフ化:とにかく綺麗に、意味を明確に

6つのトピックを書きましたがこれが出来れば晴れてホモ・サピエンスです。ホモ・エレクトスのみなさん、RStudioを叩いて日々精進。

1. Rでできること

Rは素晴らしい分析ツールであります。オンメモリで出来ることはかなり網羅的に出来るようになっています。例えば

  • コスト体質の変革
  • セグメント別または事業別の利益を算出し注力領域を定める
  • 販売数量と利益のシミュレーション
  • 新規事業でのシミュレーション作成による投資計画策定

コストから成長戦略まで幅広く使える、ふわふわとした主張ではなく数値を元にした主張をするための基本ツールがRです。数値に強いはビジネスに携わる者としては必須条件にしてもらいたいものです。皆さんが今後恥をかかないために是非こちらに書かれているテクニックはマスターして下さい。読むだけではだめでサンプル・データなどを使って練習しましょう。2週間もかからず身につけられるはずです。

*Rマスターの皆さんへ:他にもいろいろあるぜ!という方いらっしゃると思いますが、最低限のボリュームで抑えてます

2. あるべきフォーマット/作ってはならないフォーマット

※こちらの記事にある通りなので読んでください。

www.shiningmaru.com

3. 頻出ショートカット

RStudioといえばショートカット、プロはマウスを使うと恥だそうです。全部記載すると膨大にあるけど頻出のショートカットを書きますね。

・ctrl(macならcmd) + shift + m:パイプ演算子を挿入

いつまでも"%>%"と打っているだけのそこのキミ。10秒以内に集計と言われたらどうする?"%", ">", "%"ってタイピングしてると2秒はかかっちゃうでしょ。パイプ演算子を一発で貼り付けたい場合のctrl + shift + mの登場です。

あとはその都度覚えれば困らないと思います。

4. dplyr:兎にも角にもleft_join!

そもそも「データフレーム」という概念に不慣れなそこのあなた、生き恥をさらしているのでここで覚えましょう。名前付きリストに各カラムにベクトルが入っている!これがデータフレーム。

さて、実際にデータフレームを操作するのに重要な関数を使いながら学んでいきましょう。

dplyr::left_join

頻出関数、dplyr::left_joinです。どのような状況で使うか、これはIDが付与されたマスターデータ(前編で述べたようなフォーマットに乗っ取る)を参照しながら新たな分析を作る際に良く使います。下図のような状況を想定して下さい、黄色でハイライトされた部分が上司に埋めてくれと要求された部分です、実際はIDの列は実際に見るのは「原価テーブル」などで縦に非常に長い場合が多いのでそのまま使うのは不便です。そのときにdplyr::left_join対象のIDのデータのみ参照可能です。

library(dplyr)
masterdata <- read.csv('./masterdata.csv', stringsAsFactors=FALSE)
id <- c(2, 4)
result <- as.dataframe(id) %>% dplyr::left_join(masterdata, by = 'id')
print(result)

関数についての論議ですがすぐに終わってしまいました。ちなみにこのdplyr::left_jionで一発で様々なテーブルが統合出来るのは何故出来るのか、それはIDが統一されているからです。これが事業会社に行くとあるある、イタリアではZX1、日本ではZX5iと呼ばれている同じ部品が。もはや人間の目視でテーブルを統合するしかありません、この際には目視で統合するため人力統合となりコンサルタントと呼ばれる民族は死罪に処されます、もといルーティンですね。こういった、嘘だろ・・・が存在しない事業会社などありません。覚悟して下さい。

他のJOIN系の関数は下の記事で勉強してください(雑)。

qiita.com

5. dplyr::group_by, dplyr::summarise

group_by?なんだSQLかと思ったそこの君、だいたいその通りだぞ。先ほどの表を例に学んでいきましょう。

先ほどのデータに座席数を追加しました。ここで上司から意味はわからないけど「おい、君今2シーターの平均原価を出してくれないか」と言われたらどうしますか。Excelを開いてピボットテーブルで算出しますか?そんなスマートでないことをしてはいけない、次に同じ作業をするときに毎回Excelを開くのかい?君はそんなことはしなくていい。dplyrの関数にパイプで渡すだけでいい。え、どういうことかって?

library(dplyr)
masterdata <- read.csv('./pivot_data.csv', stringsAsFactors=FALSE)
result <- masterdata %>% dplyr::group_by(座席) %>% dplyr::summarise(平均原価 = mean(販売原価))
print(result)

するとどうだ、平均原価がめでたく表示されました!ちなみにここで記載されているのは「単純平均」であり、「荷重平均」でないことに注意(*次回の記事でこの差は記載しません)。

これで同じ作業が来てもさくっと分析が出来るわけですね。dplyrtidyrができればRはとりあえず半人前にはなれます、みんな頑張って。

6. グラフ化:とにかく綺麗に、意味を明確に

さて、分析が出来ました。分析結果をcsvのまま印刷してマネジメントレポートをしようもんなら評価は半減どころではなく1%以下になるでしょう。ターミナルに映しだされた数値の羅列を見せられたところで伝えられた人間は何をすればいいのかわからないからです。

www.shiningmaru.com

これに関しては元記事が素晴らしいので読んでください。

ただし、Rの場合ggplot2というライブラリを使うことで、簡単にチャーミングなグラフで可視化することができます。

www.slideshare.net

もう書き終わったよ、R一部作

短かったですがR記事とりあえず基礎的な内容を1つの記事で書いてみました。

これらより詳しい内容は次の二冊を勉強してみましょう。

新米探偵、データ分析に挑む

新米探偵、データ分析に挑む

みんなのR -データ分析と統計解析の新しい教科書-

みんなのR -データ分析と統計解析の新しい教科書-

手前味噌ですが、プログラマーであればこちらの記事もおすすめです。

kiito.hatenablog.com