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
870
RでPSM分析
bob3bob3
1
430
Rでコンジョイント分析 2024年版
bob3bob3
0
2.4k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.4k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
650
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
580
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
650
qeMLパッケージの紹介
bob3bob3
0
2.5k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
650
Other Decks in Programming
See All in Programming
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
360
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
300
20260514_its_the_context_window_stupid.pdf
heita
0
860
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.7k
Road to RubyKaigi: Play Hard(ware)
makicamel
1
560
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
150
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
680
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
770
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
380
Building on Bluesky's AT Protocol with Ruby
mackuba
0
110
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
430
実用!Hono RPC2026
yodaka
2
310
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Agile that works and the tools we love
rasmusluckow
331
21k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Six Lessons from altMBA
skipperchong
29
4.2k
The agentic SEO stack - context over prompts
schlessera
0
770
Marketing to machines
jonoalderson
1
5.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
350
Optimizing for Happiness
mojombo
378
71k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Become a Pro
speakerdeck
PRO
31
5.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つの手法にたくさんのパッケージがある ★三つの書式が混在する ★古い情報と新しい情報が混在する