やぁみんな!dplyrしてるかい!
皆さまおはこんばんちは。「データサイエンスの90%はデータラングリングやで」だそうで。
まぁ色んなデータを毎日こねこねしてる方、いらっしゃるのではと思います。
で、ある程度出来てくると同僚とかも面白がって触ってみたがってくれたりするのですが
(みんなもっとR叩け―)
慣れてしまうとこんなに快適なdplyrパイプも、本当に始めてのひとには中々ワカランようで...
そんな時はこの一行!!
pacman::p_load(tidylog)
初見殺しに見えるdplyrの各関数を、ヒューマンレダブルな文章で説明してくれちゃうのです。
(出力はRの標準コンソールに出ます)
たとえばこんなコードを
uniwide <- unisales %>%
mutate(title_search = regtitle(title)) %>%
select(-title, -inter_id) %>%
left_join(manga2id, by = "title_search") %>%
left_join(id2manga, by = "inter_id") %>%
select(-title_search, title) %>%
filter(dist == "pubridge") %>%
mutate(yearmon = floor_date(date, "1 month")) %>%
group_by(yearmon, coa_id) %>%
summarise(montotal = sum(sales)) %>%
left_join(id2manga) %>%
spread(yearmon, montotal)
「コメント付けたからわかるでしょ?」
つってもコメント書いたひとも勘違いしてたかもだし...
そもそもコード直した後コメント直し忘れとかしょっちゅうやし...(アカンけど)
uniwide <- unisales %>%
# manga2id でのサーチ用にtitleを変換
mutate(title_search = regtitle(title)) %>%
# 一度古いデータを排除
select(-title, -inter_id) %>%
# manga2idでcoa_idに名寄せ
left_join(manga2id, by = "title_search") %>%
# coa_id から正規タイトルを付け直す
left_join(id2manga, by = "inter_id") %>%
# search用カラム、元々のtitleを削除
select(-title_search, title) %>%
# 取次を一社だけに絞る
filter(dist == "pubridge") %>%
# 日付データを一ヶ月単位にラウンド処理
mutate(yearmon = floor_date(date, "1 month")) %>%
# 日付単位・coa_id 別にグループ化 <- 月単位なのにコメント直して無い例
group_by(yearmon, coa_id) %>%
# 売上金額のグループ別集計
summarise(montotal = sum(sales)) %>%
# coa_id からタイトルを付け直す
left_join(id2manga) %>%
# WIDEデータに変換
spread(yearmon, montotal)
で、実行しても割りと乾いた、メッセージ程度だけの出力。
初学者にはこれが怖いらしい。冷たいらしい。人間味を感じないらし...
Joining, by = "coa_id"
tidylog を ON!!!!
mutate: new variable 'title_search' with 228 unique values and 0% NA
select: dropped 2 variables (coa_id, title)
left_join: added 13687 rows and added one column (coa_id)
left_join: added 0 rows and added one column (title)
select: dropped one variable (title_search)
filter: removed 178644 out of 987799 rows (18%)
mutate: new variable 'yearmon' with 64 unique values and 0% NA
group_by: 2 grouping variables (yearmon, coa_id)
summarise: now 6550 rows and 3 columns, one group variable remaining (yearmon)
Joining, by = "coa_id"
left_join: added 0 rows and added one column (title)
あらやだ丁寧。
慣れてる人でもうっかりミスとか、NA出来てないか手動でチェックしてる方も居ると思うんですが、
こんな感じで出してくれると一々個別に見なくて良いんで楽だなーと思います。
自分は毎回有効にするために.Rprofileに入れちゃいました。
で、プログラミング未経験者の同僚に自分でデータ出ししてもらう
ってわけで部内の誰でも触れる用にrocker/tidyverseを立てました。
(廃棄PCの有効活用)
こんな数行のコードで100万件規模のデータが一瞬で集計出来るんだもんな〜
Excelでピボピボ言う生活にはもう戻れませんね。
ノンコーダーほどRを触るべきだと思う筆者であります。
初学者(ええ自分の事ですとも)の皆さまも、人にR叩かせたい手練れのの皆さまも、
#ぜひtidylog、覚えていって下さい。