Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tokyo.R #98 Rを学ぶのは難しい
Search
bob3bob3
April 13, 2022
Programming
3
3.2k
Tokyo.R #98 Rを学ぶのは難しい
R言語を学ぶのは難しい、という話のLT。
(2022/04/17: 誤記を修正)
bob3bob3
April 13, 2022
Tweet
Share
More Decks by bob3bob3
See All by bob3bob3
RでPSM分析
bob3bob3
1
200
Rでコンジョイント分析 2024年版
bob3bob3
0
890
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
750
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
480
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
430
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
510
qeMLパッケージの紹介
bob3bob3
0
1.7k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
500
パーマーステーションのペンギンたち#3 探索的データ分析(EDA)編
bob3bob3
1
620
Other Decks in Programming
See All in Programming
Effective Signals in Angular 19+: Rules and Helpers
manfredsteyer
PRO
0
100
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
return文におけるstd::moveについて
onihusube
1
1.1k
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
Zoneless Testing
rainerhahnekamp
0
120
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
Spatial Rendering for Apple Vision Pro
warrenm
0
110
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
250
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
3
470
Go の GC の不得意な部分を克服したい
taiyow
3
790
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
A Tale of Four Properties
chriscoyier
157
23k
A Philosophy of Restraint
colly
203
16k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Six Lessons from altMBA
skipperchong
27
3.5k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Designing Experiences People Love
moore
138
23k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Facilitating Awesome Meetings
lara
50
6.1k
Transcript
Rを学ぶのは難しい Tokyo.R #98 (2022/04/16) @bob3bob3
Rを学ぶのは難しい • これまでRを使ってきて、個人的に「Rを身に付けるのは難しい……」と思った点を 述べていきます。 • これからRを学ぼうとする人たちも、こうしたハマりポイントを事前に把握しておけば 立ち直りも早いかと思います。 • ベテラン勢はTwitterでツッコミをヨロシク。
★CUIが難しい • 統計解析ソフトとして考えたとき、 ExcelやSPSS、JMPのようなGUI ベースではないのでとっつきにく い。 • どうしてもGUIがいいという方に は、R Commander
や、ggplot2を GUIで使えるesquisseパッケージ があります。 • とはいえ、ほとんどの分析手法は1 行でできるので恐れずに。
CUIが難しい • Rコマンダー ◦ パッケージ Rcmdr 。 ◦ 基本的な統計処理をGUIで実 行できる。
◦ 基本統計量、クロス集計、統 計的仮説検定、主成分分析、 因子分析、クラスター分析、回 帰分析など。 ◦ プラグインを追加すれば ggplot2でのグラフ作成もGUI で可能。
CUIが難しい • esquisseパッケージ ◦ Tableauっぽいインターフェイ スでggplot2によるグラフを描 ける。 ◦ 読み方は「エスキス」。 ◦
RStudioのアドインとして使え る。
★1つの手法にたくさんのパッケージがある 例えば、コレスポンデンス分析の場合 • caパッケージのca()関数 • FactoMineRパッケージのCA()関数 • MASSパッケージのcorresp()関数 などなど。他にもある。 どれ使えばいいのよ……
• それぞれのヘルプでアウトプットを確認して、自分に必要なのはどれかを見極め る。 • もしくは r-wakalang の #r_beginners あたりで先達に聞く。
★三つの書式が混在する • base ◦ 基本形。簡潔で探索的な分析に便利。 1984年生まれのS言語由来の古い書式。 ◦ 枯れていて安心……と思ったら最近になってパイプ演算子が追加されたり。 • tidyverse
◦ tidyverseパッケージ。 ◦ モダンなR。可読性が高く効率的。とりあえず、これで書くのが無難。 ◦ 枯れてないので、書き方がしょっちゅう変わる。 • data.table ◦ data.tableパッケージ。 ◦ 従来のdata,frameを拡張し、効率が良く巨大なデータファイルを扱える。 ◦ 大規模データでも高速に処理できる。
三つの書式が混在する • 事前準備 ◦ taidyverseとdata.tableのパッケージを読み込む。 ◦ データフレームをデータテーブルに変換する。 library(tidyverse) library(data.table) diamonds.dt
<- data.table(diamonds, key=c("carat", "cut", "price"))
三つの書式が混在する • caratが1より大きい行を抽出。 ◦ base ◦ tidyverse ◦ data.table res.base1
<- diamonds[diamonds$carat > 1, ] res.tv1 <- diamonds %>% filter(carat > 1) res.dt1 <- diamonds.dt[carat > 1, , ]
三つの書式が混在する • 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"), ]
三つの書式が混在する • グループごとの平均。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)
三つの書式が混在する • 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]
三つの書式が混在する • まずは、tidyverseを身に付けましょう。 ◦ 可読性が高く理解しやすい。 ◦ ネット上の資料も多く、チートシートなども充実していて学びやすい。 • data.tableは大きなデータのとき重宝する。 ◦
tidyverseで処理の重さを感じるデータには data.tableを試してみましょう。
★古い情報と新しい情報が混在する • 歴史がある分、ググってもどれが最新の情報か分かりにくい。 • 特にtidyverseは全然枯れていないので、あっという間に知識が古くなる。 ◦ 僕「gather( )とspread( )、縦持ちデータと横持ちデータを変換するのに超便利!」 ◦
H.W.「gatherとspread廃止したから。これからはpivot_*()使って。」 ◦ 僕「mutate_at()とmutate_if()とmutate_all()の使い方がようやく理解できた!」 ◦ H.W.「mutate_*廃止したから。これからはacross()使って。」 ◦ 基本的には機能的な改善なので歓迎すべきことなのだが ……
余談:インデックスが1から始まる • 他のコンピュータ言語を学んできた人からすると、インデックスが1から始まるのは 気持ち悪い(らしい)。 • 多くのコンピュータ言語ではインデックスは0からはじまる。 • 例えば、pythonなら • Rだと
Enjoy! ★CUIが難しい ★1つの手法にたくさんのパッケージがある ★三つの書式が混在する ★古い情報と新しい情報が混在する