SlideShare a Scribd company logo
Shiny
Live / Shared / Explored
BARUG May 2013 Alex B Brown
Thursday, August 22, 13
Agenda
• Why Shiny?
• First steps in shiny - text and graphics
• Shiny and d3
• Resources
Thursday, August 22, 13
R today
) Excellent statistics platform
) Fabulous graphics
• A personal experience - not a shared one
( Graphics are typically static - manipulated
in code, not in the visualisation
( Too slow and memory hungry
( Single threaded
Thursday, August 22, 13
What’s Shiny?
• A Webserver for R
• Really simple - no httpd or JS knowledge
• A Functional Reactive system
• An application platform
• Addresses some of R’s limitations
Thursday, August 22, 13
Getting Started
• install.packages('shiny')
• Write your user interface in ui.R
• Write your application server.R
• runApp()
• Test / Debug / Enhance
• Share it with your team or the world
Thursday, August 22, 13
First Demo
library(shiny)
shinyUI(
	
  	
  textInput("who","Reviewed	
  by","nobody"),
	
  	
  selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy")),
	
  	
  h1(textOutput("review"))))
library(shiny)
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$rating)
	
  	
  	
  	
  })
ui.R
server.R
always use library(shiny)
at the start of ui.R and
server.R
Thursday, August 22, 13
First Demo >	
  runApp()
Thursday, August 22, 13
First Demo
Thursday, August 22, 13
library(shiny)
shinyUI(
	
  	
  textInput("who","Reviewed	
  by","nobody"),
	
  	
  selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy")),
	
  	
  h1(textOutput("review"))))
library(shiny)
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$review)
	
  	
  	
  	
  })
First Demoui.R
server.R
Thursday, August 22, 13
library(shiny)
shinyUI(
	
  	
  textInput("who","Reviewed	
  by","nobody"),
	
  	
  selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy")),
	
  	
  h1(textOutput("review"))))
library(shiny)
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$review)
	
  	
  	
  	
  })
input$who
First Demoui.R
server.R
textInput("who","Reviewed	
  by","nobody")
Thursday, August 22, 13
library(shiny)
shinyUI(
	
  	
  textInput("who","Reviewed	
  by","nobody"),
	
  	
  selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy")),
	
  	
  h1(textOutput("review"))))
selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy"))
library(shiny)
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$review)
	
  	
  	
  	
  })
First Demoui.R
server.R
input$rating
Thursday, August 22, 13
library(shiny)
shinyUI(
	
  	
  textInput("who","Reviewed	
  by","nobody"),
	
  	
  selectInput("rating",	
  "Rating"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c("Hard","Easy")),
	
  	
  h1(textOutput("review"))))
library(shiny)
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$review)
	
  	
  	
  	
  })
	
  	
  output$review	
  <-­‐	
  renderText({
	
  	
  	
  	
  paste(input$who,	
  
	
  	
  	
  	
  	
  	
  "thinks	
  shiny	
  is",	
  input$rating)
	
  	
  	
  	
  })
First Demoui.R
server.R
h1(textOutput("review"))
Thursday, August 22, 13
First Demo - Review
• html input “who” is linked to R input$who
• R output$review is linked to html #review
• updates re-evaluate code automatically
• no javascript knowledge required
• this is the Function Reactive Web-server at
work
Thursday, August 22, 13
First Plot
shinyUI(div(
	
  	
  numericInput("binwidth","Bin	
  width",1),
	
  	
  selectInput("measurement","Measurement",
c("mpg","hp")),
	
  	
  plotOutput("myplot")))
shinyServer(function(input,	
  output)	
  {	
  
	
  	
  output$myplot	
  <-­‐	
  renderPlot({
	
  print(ggplot(data=mtcars,
	
  	
  aes_string(x=input$measurement))+
	
  	
  geom_dotplot(binwidth=input$binwidth))	
  	
  	
  	
  
})})
ui.R
server.R
Here ggplot2 needs to be
‘required’ at the start of
server.R only.
Thursday, August 22, 13
First Plot >	
  runApp()
Thursday, August 22, 13
First Plot Review
• Shiny supports all R plot types via ‘PNG’
• renderPlot foo is linked to plotOutput #foo
• Anything can be parameterised - numbers,
strings, functions, columns, methods, code
• Enables powerful ‘exploration’ of design
parameters for you
• Enables final user to adjust parameters
Thursday, August 22, 13
Live, Shared, Explored
Shiny reports are
live because the R
is executed every:
session
user
input
...continuously
DEMO
Thursday, August 22, 13
Live, Shared, Explored
Your reports are shared because:
Your whole team can see the most recent
version of the report - just share the URL
Your whole team can get involved in the
analysis
You can save and share where you navigated to
(* extra work required)
Thursday, August 22, 13
Live, Shared, Explored
Using tabs to select between datasets, reports
and visualisation - each with custom inputs and
outputs, you can enable your team to make
new discoveries in the data you already have.
Tabs allow whole new sets of inputs and graphs
to appear - completely customised in R using
ReactiveUI
Thursday, August 22, 13
Examples - stocks
• http://glimmer.rstudio.com/winston/stocks/
Thursday, August 22, 13
Making it super-
interactive
• Shiny has built-in support for PNG output
• Cutting edge web graphs zoomable and
clickable - for this we need javascript
• Tools like d3 and googleVis enable this
• Various projects are working on integrating
shiny and (d3...) right now
Thursday, August 22, 13
d3 - http://d3js.org
• Javascript library by Mike Bostock of New
York Times
• Many, Many visualisation types
• detailed control over output
• Shiny integration (beta):
• http://ramnathv.github.io/rCharts/r2js/
• http://glimmer.rstudio.com/alexbbrown/
g3plot/
Thursday, August 22, 13
d3 examples
Thursday, August 22, 13
• Popular JS graphing library
• R package available
• Integration with Shiny (beta)
Google Chart Tools /
GoogleVis
http://lamages.blogspot.co.uk/2013/02/first-
steps-of-using-googlevis-on-shiny.html
Thursday, August 22, 13
http://lamages.blogspot.co.uk/2013/02/first-steps-of-using-
googlevis-on-shiny.html
Thursday, August 22, 13
Shiny Resources
• Homepage - http://www.rstudio.com/shiny/
• Tutorial - rstudio.github.io/shiny/tutorial/
• Group - groups.google.com/group/shiny-discuss
• Source - https://github.com/rstudio/shiny/
• Examples - http://ramnathv.github.io/shinyExamples/
Thursday, August 22, 13
Review
• Shiny is easy and powerful
• You can make your analyses Shared, Live,
Explorable
• It’s going to get more powerful - interactive
graphics like d3 are coming
• You can get support from the community
and RStudio
• Start coding - and show us what you can
achieve
Thursday, August 22, 13
Q&A
• End of presentation
Thursday, August 22, 13

More Related Content

What's hot

Cocoa heads 09112017
Cocoa heads 09112017Cocoa heads 09112017
Cocoa heads 09112017
Vincent Pradeilles
 
Architecture for scalable Angular applications (with introduction and extende...
Architecture for scalable Angular applications (with introduction and extende...Architecture for scalable Angular applications (with introduction and extende...
Architecture for scalable Angular applications (with introduction and extende...
Paweł Żurowski
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
Andrew Rota
 
GDG Kuwait - Modern android development
GDG Kuwait - Modern android developmentGDG Kuwait - Modern android development
GDG Kuwait - Modern android development
GDGKuwaitGoogleDevel
 
Graphql with Flamingo
Graphql with FlamingoGraphql with Flamingo
Graphql with Flamingo
i-love-flamingo
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
CocoaHeads France
 
Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
Troy Miles
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
Seiya Mizuno
 
Exploring Angular 2 - Episode 2
Exploring Angular 2 - Episode 2Exploring Angular 2 - Episode 2
Exploring Angular 2 - Episode 2
Ahmed Moawad
 
08. session 08 intoduction to javascript
08. session 08   intoduction to javascript08. session 08   intoduction to javascript
08. session 08 intoduction to javascriptPhúc Đỗ
 
Exploring Angular 2 - Episode 1
Exploring Angular 2 - Episode 1Exploring Angular 2 - Episode 1
Exploring Angular 2 - Episode 1
Ahmed Moawad
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
Codemotion
 
React native-firebase startup-mtup
React native-firebase startup-mtupReact native-firebase startup-mtup
React native-firebase startup-mtup
t k
 
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Raj Lal
 
Flamingo Core Concepts
Flamingo Core ConceptsFlamingo Core Concepts
Flamingo Core Concepts
i-love-flamingo
 
ruby-on-rails-and-ember-cli
ruby-on-rails-and-ember-cliruby-on-rails-and-ember-cli
ruby-on-rails-and-ember-cli
jks8787
 
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinHome Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
Jorge Ortiz
 
React native tour
React native tourReact native tour
React native tour
Magdiel Duarte
 
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloudOUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
Jacek Gebal
 

What's hot (20)

Cocoa heads 09112017
Cocoa heads 09112017Cocoa heads 09112017
Cocoa heads 09112017
 
Architecture for scalable Angular applications (with introduction and extende...
Architecture for scalable Angular applications (with introduction and extende...Architecture for scalable Angular applications (with introduction and extende...
Architecture for scalable Angular applications (with introduction and extende...
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
 
GDG Kuwait - Modern android development
GDG Kuwait - Modern android developmentGDG Kuwait - Modern android development
GDG Kuwait - Modern android development
 
Graphql with Flamingo
Graphql with FlamingoGraphql with Flamingo
Graphql with Flamingo
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
Chapter 3 - part1
Chapter 3 - part1Chapter 3 - part1
Chapter 3 - part1
 
Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
 
Exploring Angular 2 - Episode 2
Exploring Angular 2 - Episode 2Exploring Angular 2 - Episode 2
Exploring Angular 2 - Episode 2
 
08. session 08 intoduction to javascript
08. session 08   intoduction to javascript08. session 08   intoduction to javascript
08. session 08 intoduction to javascript
 
Exploring Angular 2 - Episode 1
Exploring Angular 2 - Episode 1Exploring Angular 2 - Episode 1
Exploring Angular 2 - Episode 1
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
 
React native-firebase startup-mtup
React native-firebase startup-mtupReact native-firebase startup-mtup
React native-firebase startup-mtup
 
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
 
Flamingo Core Concepts
Flamingo Core ConceptsFlamingo Core Concepts
Flamingo Core Concepts
 
ruby-on-rails-and-ember-cli
ruby-on-rails-and-ember-cliruby-on-rails-and-ember-cli
ruby-on-rails-and-ember-cli
 
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinHome Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
 
React native tour
React native tourReact native tour
React native tour
 
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloudOUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud
 

Similar to Shiny r, live shared and explored

Go react codelab
Go react codelabGo react codelab
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
Gabriele Bartolini
 
Build web apps with R
Build web apps with RBuild web apps with R
Build web apps with R
Aep Hidayatuloh
 
How to automate all your SEO projects
How to automate all your SEO projectsHow to automate all your SEO projects
How to automate all your SEO projects
Vincent Terrasi
 
Exploring Google (Cloud) APIs with Python & JavaScript
Exploring Google (Cloud) APIs with Python & JavaScriptExploring Google (Cloud) APIs with Python & JavaScript
Exploring Google (Cloud) APIs with Python & JavaScript
wesley chun
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP TestingRan Mizrahi
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
anamarisaguedes
 
GR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk KönigGR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf
 
Introduction to Android Development with Java
Introduction to Android Development with JavaIntroduction to Android Development with Java
Introduction to Android Development with Java
Jim McKeeth
 
Web futures
Web futuresWeb futures
Web futures
Brendan Eich
 
OpenSIPS Workshop
OpenSIPS WorkshopOpenSIPS Workshop
OpenSIPS Workshop
Saúl Ibarra Corretgé
 
Andriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tipsAndriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tips
OWASP Kyiv
 
Reactive datastore demo (2020 03-21)
Reactive datastore demo (2020 03-21)Reactive datastore demo (2020 03-21)
Reactive datastore demo (2020 03-21)
YangJerng Hwa
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
Edge AI and Vision Alliance
 
Mockist vs. Classicists TDD
Mockist vs. Classicists TDDMockist vs. Classicists TDD
Mockist vs. Classicists TDD
David Völkel
 
GDayX - Advanced Angular.JS
GDayX - Advanced Angular.JSGDayX - Advanced Angular.JS
GDayX - Advanced Angular.JS
Nicolas Embleton
 
How to lock a Python in a cage? Managing Python environment inside an R project
How to lock a Python in a cage?  Managing Python environment inside an R projectHow to lock a Python in a cage?  Managing Python environment inside an R project
How to lock a Python in a cage? Managing Python environment inside an R project
WLOG Solutions
 
Everything You Should Know About the New Angular CLI
Everything You Should Know About the New Angular CLIEverything You Should Know About the New Angular CLI
Everything You Should Know About the New Angular CLI
Amadou Sall
 
Node azure
Node azureNode azure
Node azure
Emanuele DelBono
 
Web App Prototypes with Google App Engine
Web App Prototypes with Google App EngineWeb App Prototypes with Google App Engine
Web App Prototypes with Google App Engine
Vlad Filippov
 

Similar to Shiny r, live shared and explored (20)

Go react codelab
Go react codelabGo react codelab
Go react codelab
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
 
Build web apps with R
Build web apps with RBuild web apps with R
Build web apps with R
 
How to automate all your SEO projects
How to automate all your SEO projectsHow to automate all your SEO projects
How to automate all your SEO projects
 
Exploring Google (Cloud) APIs with Python & JavaScript
Exploring Google (Cloud) APIs with Python & JavaScriptExploring Google (Cloud) APIs with Python & JavaScript
Exploring Google (Cloud) APIs with Python & JavaScript
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
 
GR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk KönigGR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk König
 
Introduction to Android Development with Java
Introduction to Android Development with JavaIntroduction to Android Development with Java
Introduction to Android Development with Java
 
Web futures
Web futuresWeb futures
Web futures
 
OpenSIPS Workshop
OpenSIPS WorkshopOpenSIPS Workshop
OpenSIPS Workshop
 
Andriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tipsAndriy Shalaenko - GO security tips
Andriy Shalaenko - GO security tips
 
Reactive datastore demo (2020 03-21)
Reactive datastore demo (2020 03-21)Reactive datastore demo (2020 03-21)
Reactive datastore demo (2020 03-21)
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
 
Mockist vs. Classicists TDD
Mockist vs. Classicists TDDMockist vs. Classicists TDD
Mockist vs. Classicists TDD
 
GDayX - Advanced Angular.JS
GDayX - Advanced Angular.JSGDayX - Advanced Angular.JS
GDayX - Advanced Angular.JS
 
How to lock a Python in a cage? Managing Python environment inside an R project
How to lock a Python in a cage?  Managing Python environment inside an R projectHow to lock a Python in a cage?  Managing Python environment inside an R project
How to lock a Python in a cage? Managing Python environment inside an R project
 
Everything You Should Know About the New Angular CLI
Everything You Should Know About the New Angular CLIEverything You Should Know About the New Angular CLI
Everything You Should Know About the New Angular CLI
 
Node azure
Node azureNode azure
Node azure
 
Web App Prototypes with Google App Engine
Web App Prototypes with Google App EngineWeb App Prototypes with Google App Engine
Web App Prototypes with Google App Engine
 

Recently uploaded

ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 

Recently uploaded (20)

ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 

Shiny r, live shared and explored

  • 1. Shiny Live / Shared / Explored BARUG May 2013 Alex B Brown Thursday, August 22, 13
  • 2. Agenda • Why Shiny? • First steps in shiny - text and graphics • Shiny and d3 • Resources Thursday, August 22, 13
  • 3. R today ) Excellent statistics platform ) Fabulous graphics • A personal experience - not a shared one ( Graphics are typically static - manipulated in code, not in the visualisation ( Too slow and memory hungry ( Single threaded Thursday, August 22, 13
  • 4. What’s Shiny? • A Webserver for R • Really simple - no httpd or JS knowledge • A Functional Reactive system • An application platform • Addresses some of R’s limitations Thursday, August 22, 13
  • 5. Getting Started • install.packages('shiny') • Write your user interface in ui.R • Write your application server.R • runApp() • Test / Debug / Enhance • Share it with your team or the world Thursday, August 22, 13
  • 6. First Demo library(shiny) shinyUI(    textInput("who","Reviewed  by","nobody"),    selectInput("rating",  "Rating"                            c("Hard","Easy")),    h1(textOutput("review")))) library(shiny) shinyServer(function(input,  output)  {      output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$rating)        }) ui.R server.R always use library(shiny) at the start of ui.R and server.R Thursday, August 22, 13
  • 7. First Demo >  runApp() Thursday, August 22, 13
  • 9. library(shiny) shinyUI(    textInput("who","Reviewed  by","nobody"),    selectInput("rating",  "Rating"                            c("Hard","Easy")),    h1(textOutput("review")))) library(shiny) shinyServer(function(input,  output)  {      output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$review)        }) First Demoui.R server.R Thursday, August 22, 13
  • 10. library(shiny) shinyUI(    textInput("who","Reviewed  by","nobody"),    selectInput("rating",  "Rating"                            c("Hard","Easy")),    h1(textOutput("review")))) library(shiny) shinyServer(function(input,  output)  {      output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$review)        }) input$who First Demoui.R server.R textInput("who","Reviewed  by","nobody") Thursday, August 22, 13
  • 11. library(shiny) shinyUI(    textInput("who","Reviewed  by","nobody"),    selectInput("rating",  "Rating"                            c("Hard","Easy")),    h1(textOutput("review")))) selectInput("rating",  "Rating"                        c("Hard","Easy")) library(shiny) shinyServer(function(input,  output)  {      output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$review)        }) First Demoui.R server.R input$rating Thursday, August 22, 13
  • 12. library(shiny) shinyUI(    textInput("who","Reviewed  by","nobody"),    selectInput("rating",  "Rating"                            c("Hard","Easy")),    h1(textOutput("review")))) library(shiny) shinyServer(function(input,  output)  {      output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$review)        })    output$review  <-­‐  renderText({        paste(input$who,              "thinks  shiny  is",  input$rating)        }) First Demoui.R server.R h1(textOutput("review")) Thursday, August 22, 13
  • 13. First Demo - Review • html input “who” is linked to R input$who • R output$review is linked to html #review • updates re-evaluate code automatically • no javascript knowledge required • this is the Function Reactive Web-server at work Thursday, August 22, 13
  • 14. First Plot shinyUI(div(    numericInput("binwidth","Bin  width",1),    selectInput("measurement","Measurement", c("mpg","hp")),    plotOutput("myplot"))) shinyServer(function(input,  output)  {      output$myplot  <-­‐  renderPlot({  print(ggplot(data=mtcars,    aes_string(x=input$measurement))+    geom_dotplot(binwidth=input$binwidth))         })}) ui.R server.R Here ggplot2 needs to be ‘required’ at the start of server.R only. Thursday, August 22, 13
  • 15. First Plot >  runApp() Thursday, August 22, 13
  • 16. First Plot Review • Shiny supports all R plot types via ‘PNG’ • renderPlot foo is linked to plotOutput #foo • Anything can be parameterised - numbers, strings, functions, columns, methods, code • Enables powerful ‘exploration’ of design parameters for you • Enables final user to adjust parameters Thursday, August 22, 13
  • 17. Live, Shared, Explored Shiny reports are live because the R is executed every: session user input ...continuously DEMO Thursday, August 22, 13
  • 18. Live, Shared, Explored Your reports are shared because: Your whole team can see the most recent version of the report - just share the URL Your whole team can get involved in the analysis You can save and share where you navigated to (* extra work required) Thursday, August 22, 13
  • 19. Live, Shared, Explored Using tabs to select between datasets, reports and visualisation - each with custom inputs and outputs, you can enable your team to make new discoveries in the data you already have. Tabs allow whole new sets of inputs and graphs to appear - completely customised in R using ReactiveUI Thursday, August 22, 13
  • 20. Examples - stocks • http://glimmer.rstudio.com/winston/stocks/ Thursday, August 22, 13
  • 21. Making it super- interactive • Shiny has built-in support for PNG output • Cutting edge web graphs zoomable and clickable - for this we need javascript • Tools like d3 and googleVis enable this • Various projects are working on integrating shiny and (d3...) right now Thursday, August 22, 13
  • 22. d3 - http://d3js.org • Javascript library by Mike Bostock of New York Times • Many, Many visualisation types • detailed control over output • Shiny integration (beta): • http://ramnathv.github.io/rCharts/r2js/ • http://glimmer.rstudio.com/alexbbrown/ g3plot/ Thursday, August 22, 13
  • 24. • Popular JS graphing library • R package available • Integration with Shiny (beta) Google Chart Tools / GoogleVis http://lamages.blogspot.co.uk/2013/02/first- steps-of-using-googlevis-on-shiny.html Thursday, August 22, 13
  • 26. Shiny Resources • Homepage - http://www.rstudio.com/shiny/ • Tutorial - rstudio.github.io/shiny/tutorial/ • Group - groups.google.com/group/shiny-discuss • Source - https://github.com/rstudio/shiny/ • Examples - http://ramnathv.github.io/shinyExamples/ Thursday, August 22, 13
  • 27. Review • Shiny is easy and powerful • You can make your analyses Shared, Live, Explorable • It’s going to get more powerful - interactive graphics like d3 are coming • You can get support from the community and RStudio • Start coding - and show us what you can achieve Thursday, August 22, 13
  • 28. Q&A • End of presentation Thursday, August 22, 13