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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
bob3bob3
April 13, 2022
Programming
3
3.3k
Tokyo.R #98 Rを学ぶのは難しい
R言語を学ぶのは難しい、という話のLT。
(2022/04/17: 誤記を修正)
bob3bob3
April 13, 2022
Tweet
Share
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
790
RでPSM分析
bob3bob3
1
400
Rでコンジョイント分析 2024年版
bob3bob3
0
2.1k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.3k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
620
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
560
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
630
qeMLパッケージの紹介
bob3bob3
0
2.3k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
620
Other Decks in Programming
See All in Programming
Oxlintはいいぞ
yug1224
5
1.3k
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.7k
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
120
AI & Enginnering
codelynx
0
110
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.9k
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
120
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
230
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
190
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
160
今から始めるClaude Code超入門
448jp
7
8.3k
組織で育むオブザーバビリティ
ryota_hnk
0
170
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
320
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
920
Believing is Seeing
oripsolob
1
50
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
56
50k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
820
The Curse of the Amulet
leimatthew05
1
8.2k
Scaling GitHub
holman
464
140k
How to Talk to Developers About Accessibility
jct
2
120
Mind Mapping
helmedeiros
PRO
0
75
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つの手法にたくさんのパッケージがある ★三つの書式が混在する ★古い情報と新しい情報が混在する