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
Rコードのベンチマーク
Search
bob3bob3
October 20, 2022
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rコードのベンチマーク
Rコードのベンチマーク手法
bob3bob3
October 20, 2022
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
1k
RでPSM分析
bob3bob3
1
470
Rでコンジョイント分析 2024年版
bob3bob3
0
2.6k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
660
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
610
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
680
qeMLパッケージの紹介
bob3bob3
0
2.9k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
680
Other Decks in Technology
See All in Technology
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
140
Reference-Free Image Quality Assessment for Virtual Try-On via Human Feedback
zozotech
PRO
0
650
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
160
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
Genie Codeハンズオン応用編
taka_aki
0
130
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
420
AIのためのEthernet技術動向 (SerDes)
markunet
1
220
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
25k
TypeScript入門 2026
recruitengineers
PRO
3
700
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.4k
How to make the Groovebox
asonas
2
2.3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
500
The Curious Case for Waylosing
cassininazir
1
460
Optimising Largest Contentful Paint
csswizardry
37
3.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
Exploring anti-patterns in Rails
aemeredith
3
470
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
270
Being A Developer After 40
akosma
91
590k
Transcript
Rコードのベンチマーク Tokyo.R #102 2022/10/22 LT @bob3bob3
Rコードの実行時間を計る • Rの中級者になり、コードのいろいろな書き方が身についてくると「どんな書 き方をすると処理の効率がいいんだろう?」という疑問が湧いてくることが あります。 • 今回はRの実行時間を計る以下の三つの方法をお話しします。 ◦ base::system.time() ◦
tictocパッケージ ◦ microbenchmarkパッケージ
準備 • nycflights13のデータを使い、「月、 飛行機会社、出発地、目的地毎に 件数、飛行時間の平均値、中央 値、標準偏差を算出する」処理を dplyr、dtplyr、data.tableで書き、そ れぞれの実行速度を計る。 • デモデータは約33万行。
# ライブラリ library(tidyverse) library(dtplyr) library(data.table) library(nycflights13) # デモデータ dat <- flights |> left_join(planes, by = "tailnum")
準備:各処理の関数化 # dplyrでの処理を関数化 f_dplyr <- function(){ dat |> group_by(month, carrier,
origin, dest) |> summarise( 件数 = n(), 平均 = mean(air_time, na.rm = TRUE), 中央値 = median(air_time, na.rm = TRUE), .groups = "drop" ) } # dtplyrでの処理を関数化 f_dtplyr <- function(){ dat |> lazy_dt() |> group_by(month, carrier, origin, dest) |> summarise( 件数 = n(), 平均 = mean(air_time, na.rm = TRUE), 中央値 = median(air_time, na.rm = TRUE), .groups = "drop" ) |> as_tibble() }
準備:各処理の関数化 # data.tableでの処理を関数化 f_data.table <- function(){ dt <- dat |>
data.table( key=c("month", "carrier", "origin", "dest") ) dt[ , .( 件数 = .N, 平均 = air_time |> mean(na.rm = TRUE), 中央値 = air_time |> median(na.rm = TRUE) ), by = list(month, carrier, origin, dest) ] |> as_tibble() }
base::system.time() system.time()の第一引数に測定したい 処理を入れるだけ。
tictocパッケージ # tic()とtoc()で測定したい処理を挟む library(tictoc) tic() f_dplyr() toc() tic() f_dtplyr() toc()
tic() f_data.table() toc()
microbenchmarkパッケージ (1/3) • 複数の処理を一度に測定できる。 • 同じ処理を複数回試行して測定できる。 • 結果を可視化できる。
library(microbenchmark) res_micro <- microbenchmark( "dplyr"= f_dplyr(), "dtplyr" = f_dtplyr(), "data.table" = f_data.table(), times = 30 )
microbenchmarkパッケージ (2/3)
microbenchmarkパッケージ (3/3) # 測定結果の可視化 res_micro |> autoplot() # 素のdata.tableよりdtplyrの方が速いのは #
どこか書き方が悪いのだろうか?
Enjoy!