R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗“贝壳”~
———————————————————————————
看了看往期的博客,这个话题竟然是第一次涉及,还真是学无止境啊。
Web Service 这个概念比较成功了, 在SOAP服务之后, Restful服务的普及, 使得数据库的CRUD操作通过网络无限延伸。 普遍的好处是:
1) 你不需要安装任何程序, 携带数据, 只要有网的地方, 你就能演示。(远程)
2) 只要安装一次, 可以多人使用, 可以让别人试用。(多用户)
3) 不用担心软件或者代码泄密, 可以控制用户使用时间和权限。 (服务)
——————————————————————————————————
案例一:中文词云
昨天自己动手实践了一把,做了一个简单的低版本词云实现的web,同时里面内嵌了jiebaR分词,导入文本即可分词、画词云,效果如下图:
——————————————————————————————
案例二:社交网络
网络上的一个社交网络案例——打开网页即可使用:
https://kehaowu.shinyapps.io/SocialNetwork/
这个是个非常简单的应用,我们输入的数据包括人物关系和一些简单的参数。其中人物关系是这样定义的:
比如A和B是friend关系,那么:
输入数据中的Former Person就是A;Later Person就是B,Label就是friend。
依次类推,如果A和B是friend关系,A和C是couples关系,B和C是classmate关系,那么输入数据就应该是:
Former Person: A,A,B
Later Person: B,C,C
Label:friend,couples,classmate
参考博客:
R语言 用shiny开发一个简单的画人物关系应用
——————————————————————————————
案例三:官网的案例库
http://shiny.rstudio.com/gallery/
有案例库,你就知道怎么做了吧?——别告诉我,你没做过PPT,copy一下他们的代码就行啦~
——————————————————————————————
一、Shiny安装
. 直接通过包管理器安装
install.packages("shiny")
2. 利用devtools通过github安装
if (!require("devtools"))
install.packages("devtools")devtools::install_github("rstudio/shiny")
这里要注意, 如果需要利用代理
library(httr)set_config(
use_proxy(url="18.91.12.23", port=8080, username="user",password="password"))
或者要设定专门的版本号
devtools::install_version("shiny", version = "0.10.2.2")
————————————————————————————————————————————
二、ui.R+server.R+global.R
看到网上大多给你扯ui.R+server.R,很少会提到global.R,笔者在自己实践的时候遇到的了global.R的使用问题,网上教程只能自己参悟了。
ui.R:搭框架,控件;
server.R:每个控件背后的算法代码;
global.R:server.R中,万一有很长的代码与调用很多其他packages就可以用global写一个函数集合,然后统一在server.R调用。
基本的框架就是:
# ui.R
library(shiny)
shinyUI(fluidPage(
))
# server.R
library(shiny)
shinyServer(function(input, output) {
})
往里面的函数里面写东西就行。
1、ui.R——界面设计
library(shiny)
# Define UI for application that plots random distributions
shinyUI(pageWithSidebar(
# Application title
headerPanel("Hello Shiny!"),
# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 0,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
))
sidebarPanel就是侧面的控件,mainPanel就是右边的控件(默认位置),一般mainPanel通过plotOutput画图。
sliderInput是一个滑动的窗口。
2、server.R
library(shiny)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
dist <- rnorm(input$obs)
hist(dist)
})
})
server.R是数据处理的地方,后端,数据来源都来自于ui.R,譬如obs,可能server处理好的图才是返回给ui.R。譬如dist
要调用ui里面的内容的话就是Input$obs就是上面sliderInput里面输入的内容。
Shiny提供一些缓存优化的机制, 其中最有效的是Reactive Expression 反冲表达式。
Reactive机制使得交互渲染的效率大幅度提高。 举个例子, server.R返回一个数据绘图, 但是每次运行需要重新读取数据。 但是当如果输入没有变化的时候, 这种重复的数据读取会极大的延迟反应, 浪费资源。
基于这种考虑, 我们使用reactive关键词重写了数据读取模块。reactive像一个带cache的模块, 并且当reactive检查到数据输入没有任何变化, 那么输出也不会有变化的时候, reactive就会使用缓存的数据,避免了重复运算, 加速了反应。
3、global.R
那么关系现在是这样的,ui.R负责前端,是数据获取的地方,server.R是处理的地方,返回的是处理好后的数据列;那么global.R是用来补充server.R的功能的。
一般是用来写一个函数,然后直接在server.R调用。
来看一个官网里面的global的案例:
library(tm)
library(wordcloud)
library(memoise)
# The list of valid books
books <<- list("A Mid Summer Night's Dream" = "summer",
"The Merchant of Venice" = "merchant",
"Romeo and Juliet" = "romeo")
# Using "memoise" to automatically cache the results
getTermMatrix <- memoise(function(book) {
# Careful not to let just any name slip in here; a
# malicious user could manipulate this value.
if (!(book %in% books))
stop("Unknown book")
text <- readLines(sprintf("./%s.txt.gz", book),
encoding="UTF-8")
myCorpus = Corpus(VectorSource(text))
myCorpus = tm_map(myCorpus, content_transformer(tolower))
myCorpus = tm_map(myCorpus, removePunctuation)
myCorpus = tm_map(myCorpus, removeNumbers)
myCorpus = tm_map(myCorpus, removeWords,
c(stopwords("SMART"), "thy", "thou", "thee", "the", "and", "but"))
myDTM = TermDocumentMatrix(myCorpus,
control = list(minWordLength = 1))
m = as.matrix(myDTM)
sort(rowSums(m), decreasing = TRUE)
})
主要就是写了一个函数,一开始把调用的包都给出来了,然后跟函数一样了。这里的memoise函数是缓存的功能,之后就跟正常使用的代码一样。
————————————————————————————————————————————
三、shiny的部署
很简单的是,一般写完之后放在一个文件夹里面,然后runApp一下那个路径的文件夹就行了。
或者Rstudio里面可以直接:”Run App“按钮,你把三个文件导入Rstudio随便点一下就可以,Rstudio会帮你识别。
其中,你想要最右边的那三个代码栏目的话,把”DESCRIPTION“+”Readme.md“复制到那个文件夹里面,自动会显示出来,而且所有的APP都可以复制同一份内容,上面的两个东西可以到library的example里找得到。
————————————————————————————————————————————
四、Shiny 服务器
假如你有创建了很多的Shiny服务, 那么一个专门的Shiny服务器会方便部署。
一般可以有两种部署, 一种是自己搭建一个Shiny Server。 这样就可以同时使用很多的Shiny 应用了。
另外一种是直接部署到Shiny云服务上去, 譬如“www.shinyapps.io” 注册一个云账号, 然后把服务部署到云上去。在注册完成后, 你只要遵照详细的链接, 授权, 和部署的步骤,就可以把本地Shiny App上传部署。
参考来自微信公众号: AIaidddzcAI2ML人工智能to机器学习
————————————————————————————————————————————
参考文献:
1、中文教程:http://yanping.me/shiny-tutorial/
2、英文官网:http://shiny.rstudio.com/
3、R powered web applications with Shiny:一些讲解,比较深入讲解每个模块内容
R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)的更多相关文章
- R Shiny app | 交互式网页开发
网页开发,尤其是交互式动态网页的开发,是有一定门槛的,如果你有一定的R基础,又不想过深的接触PHP和MySQL,那R的shiny就是一个不错的选择. 现在R shiny配合R在统计分析上的优势,可以做 ...
- Tomcat环境的搭建(web基础学习笔记一)
一.下载和安装Tomcat服务器 下载Tomcat安装程序包:http://tomcat.apache.org/ 点击[Download]跳转到如下图所示的下载页面 二.点击左侧要下载的版本,选择To ...
- Qt界面UI之QML初见(学习笔记四)
拖了大半年,今天终于有更新了...我自己都不好意思,最近太忙了! 今天讲一下:QML语法 一 概述 QML是一种专门用于构建用户界面的编程语言,它允许用户构建高性能,具有流畅特效的可视化应用程序,QM ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- R shiny 小工具Windows本地打包部署
目录 服务器部署简介 windows打包部署 1. 部署基本框架 2.安装shiny脚本需要的依赖包 3.创建运行shiny的程序 [报错解决]无法定位程序输入点EXTPTE_PTR于动态链接库 将小 ...
- Building [Security] Dashboards w/R & Shiny + shinydashboard(转)
Jay & I cover dashboards in Chapter 10 of Data-Driven Security (the book) but have barely mentio ...
- Mininet python代码创建拓扑、交互式界面创建主机、交换机
python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...
- HTML51-清除浮动overflow、网易注册界面基本结构搭建
一.overflow:hidden;作用 (1)可以将超出标签范围的内容裁剪掉 (2)清除浮动 .box1{ background-color: red; /*border:1px white sol ...
随机推荐
- 【转】IGS相关
目 前,全球260多个lGS跟踪站中,我国占20多个,分布在武汉.拉萨.乌鲁木齐.昆明.上海等地,全球IGS网的GPS数据,由单台接收机交换 (RINEX)格式生成的日观测和导航数据文件组成,其存储方 ...
- 极其蛋疼的if else 中的break用法
主要原因是if不是循环语句 像这样的: while(...) { ==res) { break; } printf("A"); } 跳出的就是while循环.而不是if判断语句 补 ...
- ABP官方文档翻译 3.8 数据过滤器
数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局 ...
- git stash暂存文件
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码,但又不想提交代码.先git stash暂存,pull之后,用git stash pop或者git stash apply取 ...
- UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...
- 济南清北学堂游记 Day 4.
不知不觉,行程已经过半了啊. 基本上已经熟悉了这里的环境,这其实也意味着我应该很快就要走了. 明天和后天还有最后四场模拟赛,虽然以我的实力拿不到奖,但我也会尽力做好我自己. 我大概反思了一下这几天,其 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- Sql2012数据库还原
Sql2012数据库还原(通过.bak数据库备份文件) 昨天系统挂了,那叫一个悲惨,重装了系统,但是sql2012的数据没有备份,同事帮忙发来备份文件(.bak),开始还原数据. 步骤:1 自己新建一 ...
- CentOS7关闭/开启防火墙出现 Unit iptables.service failed to load
在vm中安装好tomcat,而且在liunx中使用nc命令可以返回成功,但是更换到window中访问不到tomcat的情况,是由于linux防火墙的问题造成的,传统的解决方式有2中 第一种解决方案: ...