Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

三つの書式が混在する ● 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"), ]

Slide 11

Slide 11 text

三つの書式が混在する ● グループごとの平均。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)

Slide 12

Slide 12 text

三つの書式が混在する ● 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]

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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