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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
bob3bob3
April 13, 2022
Programming
3.3k
3
Share
Tokyo.R #98 Rを学ぶのは難しい
R言語を学ぶのは難しい、という話のLT。
(2022/04/17: 誤記を修正)
bob3bob3
April 13, 2022
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
890
RでPSM分析
bob3bob3
1
440
Rでコンジョイント分析 2024年版
bob3bob3
0
2.4k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.4k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
650
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
590
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
660
qeMLパッケージの紹介
bob3bob3
0
2.7k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
660
Other Decks in Programming
See All in Programming
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
320
Talking to terminals (and how they talk back) (KotlinConf 2026)
jakewharton
PRO
1
160
CSC307 Lecture 17
javiergs
PRO
0
290
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.3k
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
120
今さら聞けないCancellationToken
htkym
0
210
New "Type" system on PicoRuby
pocke
1
390
Claspは野良GASの夢をみるか
takter00
0
140
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
760
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3k
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
200
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
Skip the Path - Find Your Career Trail
mkilby
1
130
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
150
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
320
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Cult of Friendly URLs
andyhume
79
6.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
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つの手法にたくさんのパッケージがある ★三つの書式が混在する ★古い情報と新しい情報が混在する