Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
hoxo_m
5,321 views
Shinyユーザのための非同期プログラミング入門
第81回R勉強会@東京(#TokyoR)発表資料 https://tokyor.connpass.com/event/141318/
Data & Analytics
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 47
2
/ 47
3
/ 47
4
/ 47
5
/ 47
6
/ 47
7
/ 47
8
/ 47
9
/ 47
10
/ 47
11
/ 47
12
/ 47
13
/ 47
14
/ 47
15
/ 47
16
/ 47
17
/ 47
18
/ 47
19
/ 47
20
/ 47
21
/ 47
22
/ 47
23
/ 47
24
/ 47
25
/ 47
26
/ 47
27
/ 47
28
/ 47
29
/ 47
30
/ 47
31
/ 47
32
/ 47
33
/ 47
34
/ 47
35
/ 47
36
/ 47
37
/ 47
38
/ 47
39
/ 47
40
/ 47
41
/ 47
42
/ 47
43
/ 47
44
/ 47
45
/ 47
46
/ 47
47
/ 47
More Related Content
PDF
ざっくり DDD 入門!!
by
Yukei Wachi
PPTX
5分で分かる自己組織化マップ
by
Daisuke Takai
PDF
バンディットアルゴリズム入門と実践
by
智之 村上
PPTX
NLPにおけるAttention~Seq2Seq から BERTまで~
by
Takuya Ono
PDF
Jaccard係数の計算式と特徴(1)
by
khcoder
PDF
SAT/SMTソルバの仕組み
by
Masahiro Sakai
PPTX
距離とクラスタリング
by
大貴 末廣
PDF
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
by
Kazuhide Okamura
ざっくり DDD 入門!!
by
Yukei Wachi
5分で分かる自己組織化マップ
by
Daisuke Takai
バンディットアルゴリズム入門と実践
by
智之 村上
NLPにおけるAttention~Seq2Seq から BERTまで~
by
Takuya Ono
Jaccard係数の計算式と特徴(1)
by
khcoder
SAT/SMTソルバの仕組み
by
Masahiro Sakai
距離とクラスタリング
by
大貴 末廣
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
by
Kazuhide Okamura
What's hot
PDF
先端技術とメディア表現1 #FTMA15
by
Yoichi Ochiai
PDF
相関係数は傾きに影響される
by
Mitsuo Shimohata
PDF
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
by
Koichi Hamada
PPTX
社会心理学者のための時系列分析入門_小森
by
Masashi Komori
PPTX
優れた研究論文の書き方
by
Masanori Kado
PDF
BlackBox モデルの説明性・解釈性技術の実装
by
Deep Learning Lab(ディープラーニング・ラボ)
PDF
Probabilistic Graphical Models 輪読会 #1
by
Takuma Yagi
PDF
大規模な組合せ最適化問題に対する発見的解法
by
Shunji Umetani
PDF
距離まとめられませんでした
by
Haruka Ozaki
PDF
Marp Tutorial
by
Rui Watanabe
PDF
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
by
Kenyu Uehara
PDF
pymcとpystanでベイズ推定してみた話
by
Classi.corp
PDF
4 データ間の距離と類似度
by
Seiichi Uchida
PDF
CV分野におけるサーベイ方法
by
Hirokatsu Kataoka
PDF
cvpaper.challenge 研究効率化 Tips
by
cvpaper. challenge
PDF
Newman アルゴリズムによるソーシャルグラフのクラスタリング
by
Atsushi KOMIYA
PDF
言語モデル入門 (第二版)
by
Yoshinari Fujinuma
PDF
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
by
宏喜 佐野
PDF
MICの解説
by
logics-of-blue
PDF
状態空間モデルの考え方・使い方 - TokyoR #38
by
horihorio
先端技術とメディア表現1 #FTMA15
by
Yoichi Ochiai
相関係数は傾きに影響される
by
Mitsuo Shimohata
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
by
Koichi Hamada
社会心理学者のための時系列分析入門_小森
by
Masashi Komori
優れた研究論文の書き方
by
Masanori Kado
BlackBox モデルの説明性・解釈性技術の実装
by
Deep Learning Lab(ディープラーニング・ラボ)
Probabilistic Graphical Models 輪読会 #1
by
Takuma Yagi
大規模な組合せ最適化問題に対する発見的解法
by
Shunji Umetani
距離まとめられませんでした
by
Haruka Ozaki
Marp Tutorial
by
Rui Watanabe
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
by
Kenyu Uehara
pymcとpystanでベイズ推定してみた話
by
Classi.corp
4 データ間の距離と類似度
by
Seiichi Uchida
CV分野におけるサーベイ方法
by
Hirokatsu Kataoka
cvpaper.challenge 研究効率化 Tips
by
cvpaper. challenge
Newman アルゴリズムによるソーシャルグラフのクラスタリング
by
Atsushi KOMIYA
言語モデル入門 (第二版)
by
Yoshinari Fujinuma
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
by
宏喜 佐野
MICの解説
by
logics-of-blue
状態空間モデルの考え方・使い方 - TokyoR #38
by
horihorio
Similar to Shinyユーザのための非同期プログラミング入門
PDF
Rにおける大規模データ解析(第10回TokyoWebMining)
by
Shintaro Fukushima
PPTX
Rによる高速処理 まだfor使ってるの?
by
jundoll
PDF
はじめてのShiny
by
Kazuya Wada
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
by
Katsuhiro Morishita
PPTX
Rによる繰り返しの並列処理
by
wada, kazumi
PDF
async/await不要論
by
bleis tift
PPTX
大規模分散システムの現在 -- Twitter
by
maruyama097
PPTX
たのしいNode.js
by
ishiki-takai
PPTX
モダン JavaScript における非同期処理 - Promise, async/await -
by
Kazunori Hashikuchi
PDF
Shinyを自由に使ってみる
by
Masanori Takano
PPTX
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
PDF
TokyoR24 - PerformanceRvsC#
by
ta2c
PPTX
Reactive
by
Akihiro Ikezoe
PDF
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
PDF
20160121 データサイエンティスト協会 木曜セミナー #5
by
Koichiro Sasaki
PDF
SQL Server 2016 R Services + Microsoft R Server 技術資料
by
Koichiro Sasaki
PPTX
Rjpusers1218kawamura
by
KAWAMURAYUSUKE
PPTX
Reactive Programming
by
maruyama097
PPTX
Too difficult concurrent processing
by
鈴木 セシル
PDF
初心者講習会資料(Osaka.r#6)
by
Masahiro Hayashi
Rにおける大規模データ解析(第10回TokyoWebMining)
by
Shintaro Fukushima
Rによる高速処理 まだfor使ってるの?
by
jundoll
はじめてのShiny
by
Kazuya Wada
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
by
Katsuhiro Morishita
Rによる繰り返しの並列処理
by
wada, kazumi
async/await不要論
by
bleis tift
大規模分散システムの現在 -- Twitter
by
maruyama097
たのしいNode.js
by
ishiki-takai
モダン JavaScript における非同期処理 - Promise, async/await -
by
Kazunori Hashikuchi
Shinyを自由に使ってみる
by
Masanori Takano
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
TokyoR24 - PerformanceRvsC#
by
ta2c
Reactive
by
Akihiro Ikezoe
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
20160121 データサイエンティスト協会 木曜セミナー #5
by
Koichiro Sasaki
SQL Server 2016 R Services + Microsoft R Server 技術資料
by
Koichiro Sasaki
Rjpusers1218kawamura
by
KAWAMURAYUSUKE
Reactive Programming
by
maruyama097
Too difficult concurrent processing
by
鈴木 セシル
初心者講習会資料(Osaka.r#6)
by
Masahiro Hayashi
More from hoxo_m
PDF
協調フィルタリング入門
by
hoxo_m
PDF
機械学習のためのベイズ最適化入門
by
hoxo_m
PDF
Prophet入門【Python編】Facebookの時系列予測ツール
by
hoxo_m
PDF
階層モデルの分散パラメータの事前分布について
by
hoxo_m
PDF
トピックモデルの評価指標 Perplexity とは何なのか?
by
hoxo_m
PDF
トピックモデルの評価指標 Coherence 研究まとめ #トピ本
by
hoxo_m
PDF
非制約最小二乗密度比推定法 uLSIF を用いた外れ値検出
by
hoxo_m
PDF
Prophet入門【理論編】Facebookの時系列予測ツール
by
hoxo_m
PDF
Prophet入門【R編】Facebookの時系列予測ツール
by
hoxo_m
PDF
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
by
hoxo_m
PDF
シンギュラリティを知らずに機械学習を語るな
by
hoxo_m
PDF
経験過程
by
hoxo_m
PDF
Stan で欠測データの相関係数を推定してみた
by
hoxo_m
PDF
確率論基礎
by
hoxo_m
PPTX
高速なガンマ分布の最尤推定法について
by
hoxo_m
PDF
学習係数
by
hoxo_m
PDF
チェビシェフの不等式
by
hoxo_m
PDF
データの不備を統計的に見抜く (Gelman’s secret weapon)
by
hoxo_m
PDF
AJAXサイトの情報をWebスクレイピング
by
hoxo_m
PDF
カップルが一緒にお風呂に入る割合をベイズ推定してみた
by
hoxo_m
協調フィルタリング入門
by
hoxo_m
機械学習のためのベイズ最適化入門
by
hoxo_m
Prophet入門【Python編】Facebookの時系列予測ツール
by
hoxo_m
階層モデルの分散パラメータの事前分布について
by
hoxo_m
トピックモデルの評価指標 Perplexity とは何なのか?
by
hoxo_m
トピックモデルの評価指標 Coherence 研究まとめ #トピ本
by
hoxo_m
非制約最小二乗密度比推定法 uLSIF を用いた外れ値検出
by
hoxo_m
Prophet入門【理論編】Facebookの時系列予測ツール
by
hoxo_m
Prophet入門【R編】Facebookの時系列予測ツール
by
hoxo_m
トピックモデルによる統計的潜在意味解析読書会 3.7 評価方法 - 3.9 モデル選択 #トピ本
by
hoxo_m
シンギュラリティを知らずに機械学習を語るな
by
hoxo_m
経験過程
by
hoxo_m
Stan で欠測データの相関係数を推定してみた
by
hoxo_m
確率論基礎
by
hoxo_m
高速なガンマ分布の最尤推定法について
by
hoxo_m
学習係数
by
hoxo_m
チェビシェフの不等式
by
hoxo_m
データの不備を統計的に見抜く (Gelman’s secret weapon)
by
hoxo_m
AJAXサイトの情報をWebスクレイピング
by
hoxo_m
カップルが一緒にお風呂に入る割合をベイズ推定してみた
by
hoxo_m
Shinyユーザのための非同期プログラミング入門
1.
Shiny ユーザのための 非同期プログラミング入門 2019/09/28 @hoxo_m
2.
株式会社 ホクソエム • 牧山幸史(まきやまこうじ) • ホクソエムの社長 •
人工知能によって人々が 笑って暮らせる社会を作る
3.
既刊・新刊 R による SNS 分析 (12月ごろ)
4.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
5.
非同期プログラミング • 同期処理 • プログラムを1行ずつ順番に実行する •
1つの処理を実行している間、他の処理は行わない(待ち) • 非同期処理 • 複数の処理を同時に実行する • 非同期プログラミング=非同期処理のコードを書くこと
6.
なぜ非同期プログラミング? • R言語は「シングルスレッド」 • 歴史的に
R は1台の PC で単一ユーザでの利用が主流 だったので問題なかった • Shiny アプリでは、複数のユーザからのリクエストを 処理する必要がある ➡ 非同期処理のニーズが高まる
7.
• Shiny における複数ユーザの同時処理のやりかた •
ユーザからのリクエストを細かいタスクに分ける • CSS の読み込み、JavaScript の読み込みなど • それぞれのタスクを交互に実行する ユーザA ユーザB タスク1 タスク1 タスク2 タスク2
8.
ところが・・ ユーザA ユーザB 長いタスク (DB接続など) 短いタスク ユーザAが 長いタスクを 実行すると、 ユーザBは 短いタスクしか 実行してないのに とばっちりで 待たされてしまう
9.
非同期処理 ユーザA ユーザB 長いタスク 長いタスクを 非同期処理に 変えることで 他のユーザの 待ち時間を 削減できる 別プロセス
10.
まとめ① • R は「シングルスレッド」 •
Shiny の登場によって非同期プログラミングのニーズ が高まった • 非同期処理によってユーザの待ち時間が削減できる
11.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
12.
Shiny における非同期プログラミング • Shiny
に非同期処理を組み込むには、 • 次の2つのパッケージを使う • promises: プロミスAPIの提供 • future: 非同期処理の実行
13.
パッケージの読み込みと初期設定 • 次の3つ組(トリニティ)を server.R
に書く library(promises) library(future) plan(multiprosess)
14.
output$table <- renderTable({ long_task()
%>% head(input$n) }) output$table <- renderTable({ future({ long_task() }) %...>% head(input$n) }) 非同期化
15.
まとめ② • Shiny に非同期処理を組み込むには「トリニティ」 •
同期処理を非同期化するのは簡単
16.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
17.
future パッケージ • Rで非同期処理を実行するためのパッケージ f
<- future({ # 時間のかかる処理 download_lots_of_data() })
18.
plan の選択 • 非同期処理をどのように実行するかを
plan() で選択する • plan(multisession) • 新しいバックグラウンドプロセスを起動し、そこで実行する • plan(multicore) • 現在のプロセスからフォークしたプロセスで実行する • メモリ状態を共有するため高速だが、Windows では使えない • plan(multiprosess) • multicore が利用可能ならば multicore を、そうでなければ multisession を使う
19.
非同期処理 メインプロセス 別のプロセス 長いタスク ポイント: どのプランを 選択したとしても 非同期処理は 別のプロセスで 実行される
20.
注意点 • フューチャコードブロック future({
処理 }) の内部 ではメインプロセスで生成されたリソースは使えない • データベース接続、ネットワークソケットなど • 参照クラスオブジェクトや環境のようなミュータブル オブジェクトは使えるが、変更はメインプロセスの オブジェクトには反映されない • R6 や data.table など
21.
まとめ③ • future パッケージによる 非同期化は簡単 •
future({ 処理 }) • 非同期化された処理は別の プロセスで実行されること を意識する必要がある
22.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
23.
非同期処理 メインプロセス 別のプロセス 長いタスク 疑問: 非同期処理の 結果は どうやって 取得するの? ?
24.
プロミス • renderXXX() 関数は「プロミス」を受け取ることができる •
プロミスとは、非同期処理によって「いずれ得られる結果」を 表すオブジェクト • future() の返り値はプロミスとみなせる output$table <- reanderTable({ future({ read.csv(filepath) }) })
25.
プロミス • renderTable() の最終行はテーブルを返す必要があるはず •
しかし、プロミスを受け取った場合だけ特別な動作をする • このプロミスは「いずれテーブルを返す」オブジェクト • renderTable() はプロミスが結果を得るまで出力を待機する • テーブルの表示は future() の処理が終わってから行われる ➡ 非同期処理の結果を明示的に取得せずに済む
26.
• 非同期処理の結果はどうやって取得するの? ➡ Shiny
が勝手にやってくれる • プロミスは取り扱い方が特殊 ➡ promises パッケージ
27.
promises パッケージ • プロミスを扱う便利な関数を提供 •
例えば、filter() はプロミスには適用できない output$table <- renderTable({ future({ read.csv(filepath) }) %>% filter(date == input$date) })
28.
プロミスパイプ %...>% • プロミスに関数を連鎖する演算子 output$table
<- renderTable({ future({ read.csv(filepath) }) %...>% filter(date == input$date) }) • 結果は再びプロミスになる
29.
まとめ④ • プロミスを使えば、非同期処理の結果を明示的に取得 する必要がない • これは非同期処理におけるバグの混入を防ぐ •
promises パッケージはプロミスを扱う便利な関数を 提供する
30.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
31.
Shiny への組み込み • プロミスを
Shiny に組み込むにはいくつか制約がある • future() の中でリアクティブ式は使えない • プロミスを組み込めるのは次の3つ ① renderXXX() ② オブザーバ ③ リアクティブ式
32.
future() の中でリアクティブ式は使えない r1 <-
reactive({ ... }) r2 <- reactive({ future({ r1() }) # Error! }) r1 <- reactive({ ... }) r2 <- reactive({ val <- r1() future({ val }) # OK! })
33.
① renderXXX() への組み込み output$table
<- renderTable({ read.csv(url) %>% filter(date == input$date) }) output$table <- renderTable({ future({ read.csv(url) }) %...>% filter(date == input$date) })
34.
ここでクイズです
35.
どこが違う?(結果は同じ) output$table <- renderTable({ input_date
<- input$date future({ read.csv(url) %>% filter(date == input_date) }) }) output$table <- renderTable({ future({ read.csv(url) }) %...>% filter(date == input$date) })
36.
どこが違う? output$table <- renderTable({ input_date
<- input$date future({ read.csv(url) %>% filter(date == input_date) }) }) output$table <- renderTable({ future({ read.csv(url) }) %...>% filter(date == input$date) }) 別プロセスで実行 メインプロセス で実行
37.
どこに問題がある? output$plot <- renderPlot({ future({
read.csv(url) %>% plot() }) })
38.
どこに問題がある? output$plot <- renderPlot({ future({
read.csv(url) %>% plot() }) }) • plot() を別プロセスで行っている • メインプロセスに別プロセスのプロットを返すことができない 別プロセスで実行
39.
どこに問題がある? output$plot <- renderPlot({ future({
read.csv(url)}) %...>% plot() }) • plot() をメインプロセスで行うことで回避できる • print() も同様
40.
② オブザーバへの組み込み • refesh_data
ボタンが押されたときにデータを更新する data <- reactiveVal(readRDS(“cache.rds”)) observerEvent(input$refresh_data, { df <- read.csv(url) saveRDS(df, “cache.rds”) data(df) })
41.
② オブザーバへの組み込み data <-
reactiveVal(readRDS(“cache.rds”)) observerEvent(input$refresh_data, { future({ df <- read.csv(url) saveRDS(df, “cache.rds”) }) %...>% data() })
42.
③ リアクティブ式への組み込み • プロミスはリアクティブ式の内部でも使える •
リアクティブ式は最終的に renderXXX() 関数に出力されるため • リアクティブ式の内部では、プロミスは普通のオブジェクトと 同様に扱われる • ただし、プロミスであることを意識して扱う必要がある
43.
③ リアクティブ式への組み込み data <-
eventReactive({ read.csv(url) }) filteredData <- reactive({ data() %>% filter(date == input$date) }) output$table <- renderTable({ filteredData() %>% head(5) })
44.
③ リアクティブ式への組み込み data <-
eventReactive({ future({ read.csv(url) }) }) filteredData <- reactive({ data() %...>% filter(date == input$date) }) output$table <- renderTable({ filteredData() %...>% head(5) })
45.
まとめ⑤ • 非同期処理を Shiny
に組み込むときは、どのプロセスで実行 されるかを意識する必要がある
46.
目次 ① 非同期プログラミングとは ② Shiny
における非同期プログラミング ③ future パッケージ ④ promises パッケージ ⑤ Shiny への組み込み ⑥ まとめ
47.
まとめ • 非同期プログラミングにより、 • Shiny
アプリの待ち時間を削減できる ① トリニティ ② フューチャー ③ プロミス
Download