データシステム演習(スライド資料3回)
「Shiny によるデータシステム演習」では,Web 情報システムに関する次のことを演習形式で学ぶ.
- Shiny では「ウィジェット」を組み合わせて,Web 画面を組み立てる.これは ui.R に書く.
- ユーザが Web 画面で操作するたび,その情報がサーバに送られる.そして,サーバが返答する.これは server.R に書く.
1. Shiny のギャラリー
YouTube 動画: https://www.youtube.com/watch?v=POOORv2BFCM 資料: Shiny のギャラリー [PDF], [パワーポイント]
URL: https://shiny.rstudio.com/gallery/
- Shiny は,ビジュアルでインタラクティブ
Webブラウザでボタン,スライダ,メニュー 等を操作すると,直ちに結果が得られる
- データ解析機能は Rシステムが担う
Shiny の機能
- Webページの中に,さまざま配置できる
- テーブル
- グラフ
- 画像
- 数式
- ウィジェット
- Word, PDF等でのレポート生成機能もある
2. Shiny の仕組み
YouTube 動画: https://www.youtube.com/watch?v=-Qb2LNNovZY 資料: Shiny の仕組み [PDF], [パワーポイント]
Shiny の機能
- Webサーバ
- データ解析機能
- データ解析機能での解析結果をHTML化する機能
- Webブラウザでのユーザからの指示やデータ入力をデータ解析機能に伝える機能
R システムの標準オブジェクト
- R システムのコンソールで,「faithful」と打ち込む.データが出てくる.
faithful はオブジェクト名.標準オブジェクトである.
米国イエローストン公園内の間欠泉「オールド・フェイスフル・ガイザー」 その噴出持続時間 (erupition)と、噴出間隔 (waiting)
- R システムのコンソールで, 「data()」と打ち込む.標準オブジェクトの一覧が表示される
shiny のインストール
install.packages("shiny")
shiny を動かしてみる
- 次の 2つのファイルを作成.
ファイル名はこの通りにすること. 2つのファイルは、同じディレクトリ(フォルダ) に置くこと
ui.R
library(shiny) shinyUI(fluidPage( sidebarLayout( sidebarPanel( sliderInput("breaks", "please select a number:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) ))
server.R
library(shiny) shinyServer(function(input, output) { output$distPlot <- renderPlot({ hist(faithful[,2], breaks = input$breaks) }) })
- ui.R, server.R のディレクトリ名(フォルダ名)を確認
- R システムのコンソールで,次のように操作
「C:/Users/user」の部分は、
実際に ui.R, server.R があるディレクトリに読み替える
library(shiny) runApp("C:/Users/user")
3. Shiny のウィジェット
YouTube 動画: https://www.youtube.com/watch?v=qA-BVSfzbYQ 資料: Shiny のウィジェット [PDF], [パワーポイント]
library(shiny)
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("breaks",
"please select a number:",
min = 1,
max = 50,
value = 30)
),
mainPanel(
textOutput("distPrint")
)
)
))
library(shiny)
shinyServer(function(input, output) {
output$distPrint <- renderText({
input$breaks * 12
})
})
library(shiny)
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel (
numericInput("breaks",
"value = ?", value=0)
),
mainPanel(
textOutput("distPrint")
)
)
))