Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tokyo.R #98 Rを学ぶのは難しい

bob3bob3
April 13, 2022

Tokyo.R #98 Rを学ぶのは難しい

R言語を学ぶのは難しい、という話のLT。
(2022/04/17: 誤記を修正)

bob3bob3

April 13, 2022
Tweet

More Decks by bob3bob3

Other Decks in Programming

Transcript

  1. Rを学ぶのは難しい
    Tokyo.R #98 (2022/04/16)
    @bob3bob3

    View Slide

  2. Rを学ぶのは難しい
    ● これまでRを使ってきて、個人的に「Rを身に付けるのは難しい……」と思った点を
    述べていきます。
    ● これからRを学ぼうとする人たちも、こうしたハマりポイントを事前に把握しておけば
    立ち直りも早いかと思います。
    ● ベテラン勢はTwitterでツッコミをヨロシク。

    View Slide

  3. ★CUIが難しい
    ● 統計解析ソフトとして考えたとき、
    ExcelやSPSS、JMPのようなGUI
    ベースではないのでとっつきにく
    い。
    ● どうしてもGUIがいいという方に
    は、R Commander や、ggplot2を
    GUIで使えるesquisseパッケージ
    があります。
    ● とはいえ、ほとんどの分析手法は1
    行でできるので恐れずに。

    View Slide

  4. CUIが難しい
    ● Rコマンダー
    ○ パッケージ Rcmdr 。
    ○ 基本的な統計処理をGUIで実
    行できる。
    ○ 基本統計量、クロス集計、統
    計的仮説検定、主成分分析、
    因子分析、クラスター分析、回
    帰分析など。
    ○ プラグインを追加すれば
    ggplot2でのグラフ作成もGUI
    で可能。

    View Slide

  5. CUIが難しい
    ● esquisseパッケージ
    ○ Tableauっぽいインターフェイ
    スでggplot2によるグラフを描
    ける。
    ○ 読み方は「エスキス」。
    ○ RStudioのアドインとして使え
    る。

    View Slide

  6. ★1つの手法にたくさんのパッケージがある
    例えば、コレスポンデンス分析の場合
    ● caパッケージのca()関数
    ● FactoMineRパッケージのCA()関数
    ● MASSパッケージのcorresp()関数
    などなど。他にもある。
    どれ使えばいいのよ……
    ● それぞれのヘルプでアウトプットを確認して、自分に必要なのはどれかを見極め
    る。
    ● もしくは r-wakalang の #r_beginners あたりで先達に聞く。

    View Slide

  7. ★三つの書式が混在する
    ● base
    ○ 基本形。簡潔で探索的な分析に便利。
    1984年生まれのS言語由来の古い書式。
    ○ 枯れていて安心……と思ったら最近になってパイプ演算子が追加されたり。
    ● tidyverse
    ○ tidyverseパッケージ。
    ○ モダンなR。可読性が高く効率的。とりあえず、これで書くのが無難。
    ○ 枯れてないので、書き方がしょっちゅう変わる。
    ● data.table
    ○ data.tableパッケージ。
    ○ 従来のdata,frameを拡張し、効率が良く巨大なデータファイルを扱える。
    ○ 大規模データでも高速に処理できる。

    View Slide

  8. 三つの書式が混在する
    ● 事前準備
    ○ taidyverseとdata.tableのパッケージを読み込む。
    ○ データフレームをデータテーブルに変換する。
    library(tidyverse)
    library(data.table)
    diamonds.dt <- data.table(diamonds,
    key=c("carat", "cut", "price"))

    View Slide

  9. 三つの書式が混在する
    ● caratが1より大きい行を抽出。
    ○ base
    ○ tidyverse
    ○ data.table
    res.base1 <- diamonds[diamonds$carat > 1, ]
    res.tv1 <- diamonds %>%
    filter(carat > 1)
    res.dt1 <- diamonds.dt[carat > 1, , ]

    View Slide

  10. 三つの書式が混在する
    ● carat, cut, priceの列を抽出。
    ○ base
    ○ tidyverse
    ○ data.table
    res.base2 <- diamonds[, c("carat", "cut", "price")]
    res.tv2 <- diamonds %>%
    select(carat, cut, price)
    res.dt2 <- diamonds.dt[, c("carat", "cut", "price"), ]

    View Slide

  11. 三つの書式が混在する
    ● グループごとの平均。cutごとにpriceの平均を算出。
    ○ base
    tapply(diamonds$price, diamonds$cut, mean)
    ○ tidyverse
    diamonds %>%
    group_by(cut) %>%
    ○ data.table
    diamonds.dt[, mean(price), by = cut]
    diamonds.dt[, mean(price), by = cut]
    diamonds %>%
    group_by(cut) %>%
    summarize(mean(price)
    tapply(diamonds$price, diamonds$cut, mean)

    View Slide

  12. 三つの書式が混在する
    ● base
    diamonds[diamonds$carat > 1, c("carat", "cut", "price")] |>
    (\(x) tapply(x$price, x$cut, mean))()
    ● tidyverse
    diamonds %>%
    filter(carat > 1) %>%
    select(carat, cut, price) %>%
    group_by(cut) %>%
    ● data.table
    diamonds.dt[carat > 1, c("carat", "cut", "price"), ][, mean(price), by = cut]
    diamonds[diamonds$carat > 1, c("carat", "cut", "price")] |>
    (\(x) tapply(x$price, x$cut, mean))()
    diamonds %>%
    filter(carat > 1) %>%
    select(carat, cut, price) %>%
    group_by(cut) %>%
    summarize(mean(price))
    diamonds.dt[carat > 1, c("carat", "cut", "price"), ][, mean(price), by = cut]

    View Slide

  13. 三つの書式が混在する
    ● まずは、tidyverseを身に付けましょう。
    ○ 可読性が高く理解しやすい。
    ○ ネット上の資料も多く、チートシートなども充実していて学びやすい。
    ● data.tableは大きなデータのとき重宝する。
    ○ tidyverseで処理の重さを感じるデータには data.tableを試してみましょう。

    View Slide

  14. ★古い情報と新しい情報が混在する
    ● 歴史がある分、ググってもどれが最新の情報か分かりにくい。
    ● 特にtidyverseは全然枯れていないので、あっという間に知識が古くなる。
    ○ 僕「gather( )とspread( )、縦持ちデータと横持ちデータを変換するのに超便利!」
    ○ H.W.「gatherとspread廃止したから。これからはpivot_*()使って。」
    ○ 僕「mutate_at()とmutate_if()とmutate_all()の使い方がようやく理解できた!」
    ○ H.W.「mutate_*廃止したから。これからはacross()使って。」
    ○ 基本的には機能的な改善なので歓迎すべきことなのだが ……

    View Slide

  15. 余談:インデックスが1から始まる
    ● 他のコンピュータ言語を学んできた人からすると、インデックスが1から始まるのは
    気持ち悪い(らしい)。
    ● 多くのコンピュータ言語ではインデックスは0からはじまる。
    ● 例えば、pythonなら
    ● Rだと

    View Slide

  16. Enjoy!
    ★CUIが難しい
    ★1つの手法にたくさんのパッケージがある
    ★三つの書式が混在する
    ★古い情報と新しい情報が混在する

    View Slide