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.1k
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
0
170
Rでコンジョイント分析 2024年版
bob3bob3
0
650
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
630
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
460
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
410
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
480
qeMLパッケージの紹介
bob3bob3
0
1.6k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
460
パーマーステーションのペンギンたち#3 探索的データ分析(EDA)編
bob3bob3
1
580
Other Decks in Programming
See All in Programming
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
9
970
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
400
Vue3の一歩踏み込んだパフォーマンスチューニング2024
hal_spidernight
3
3.1k
Nuxt UI Pro、NuxtHub、Nuxt Scripts、Nuxtエコシステムをふんだんに利用して開発するコーポレートサイト@Vue Fes Japan 2024
shingangan
3
880
Universal Linksの実装方法と陥りがちな罠
kaitokudou
1
220
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.2k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
380
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
Android 15 でアクションバー表示時にステータスバーが白くなってしまう問題
tonionagauzzi
0
130
offers_20241022_imakiire.pdf
imakurusu
2
360
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
220
Pinia Colada が実現するスマートな非同期処理
naokihaba
2
150
Featured
See All Featured
Docker and Python
trallard
40
3.1k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
What's in a price? How to price your products and services
michaelherold
243
12k
How to Think Like a Performance Engineer
csswizardry
19
1.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Statistics for Hackers
jakevdp
796
220k
Making Projects Easy
brettharned
115
5.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.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つの手法にたくさんのパッケージがある ★三つの書式が混在する ★古い情報と新しい情報が混在する