要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗“贝壳”~

———————————————————————————

看了看往期的博客,这个话题竟然是第一次涉及,还真是学无止境啊。

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实现交互式界面布置与搭建(案例讲解+学习笔记)的更多相关文章

  1. R Shiny app | 交互式网页开发

    网页开发,尤其是交互式动态网页的开发,是有一定门槛的,如果你有一定的R基础,又不想过深的接触PHP和MySQL,那R的shiny就是一个不错的选择. 现在R shiny配合R在统计分析上的优势,可以做 ...

  2. Tomcat环境的搭建(web基础学习笔记一)

    一.下载和安装Tomcat服务器 下载Tomcat安装程序包:http://tomcat.apache.org/ 点击[Download]跳转到如下图所示的下载页面 二.点击左侧要下载的版本,选择To ...

  3. Qt界面UI之QML初见(学习笔记四)

    拖了大半年,今天终于有更新了...我自己都不好意思,最近太忙了! 今天讲一下:QML语法 一 概述 QML是一种专门用于构建用户界面的编程语言,它允许用户构建高性能,具有流畅特效的可视化应用程序,QM ...

  4. deepin linux学习笔记(四)进不去图形界面怎么办?

    目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...

  5. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  6. R shiny 小工具Windows本地打包部署

    目录 服务器部署简介 windows打包部署 1. 部署基本框架 2.安装shiny脚本需要的依赖包 3.创建运行shiny的程序 [报错解决]无法定位程序输入点EXTPTE_PTR于动态链接库 将小 ...

  7. Building [Security] Dashboards w/R & Shiny + shinydashboard(转)

    Jay & I cover dashboards in Chapter 10 of Data-Driven Security (the book) but have barely mentio ...

  8. Mininet python代码创建拓扑、交互式界面创建主机、交换机

          python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...

  9. HTML51-清除浮动overflow、网易注册界面基本结构搭建

    一.overflow:hidden;作用 (1)可以将超出标签范围的内容裁剪掉 (2)清除浮动 .box1{ background-color: red; /*border:1px white sol ...

随机推荐

  1. 【转】IGS相关

    目 前,全球260多个lGS跟踪站中,我国占20多个,分布在武汉.拉萨.乌鲁木齐.昆明.上海等地,全球IGS网的GPS数据,由单台接收机交换 (RINEX)格式生成的日观测和导航数据文件组成,其存储方 ...

  2. 极其蛋疼的if else 中的break用法

    主要原因是if不是循环语句 像这样的: while(...) { ==res) { break; } printf("A"); } 跳出的就是while循环.而不是if判断语句 补 ...

  3. ABP官方文档翻译 3.8 数据过滤器

    数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局 ...

  4. git stash暂存文件

    git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码,但又不想提交代码.先git stash暂存,pull之后,用git stash pop或者git stash apply取 ...

  5. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  6. 济南清北学堂游记 Day 4.

    不知不觉,行程已经过半了啊. 基本上已经熟悉了这里的环境,这其实也意味着我应该很快就要走了. 明天和后天还有最后四场模拟赛,虽然以我的实力拿不到奖,但我也会尽力做好我自己. 我大概反思了一下这几天,其 ...

  7. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  8. BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]

    2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...

  9. Sql2012数据库还原

    Sql2012数据库还原(通过.bak数据库备份文件) 昨天系统挂了,那叫一个悲惨,重装了系统,但是sql2012的数据没有备份,同事帮忙发来备份文件(.bak),开始还原数据. 步骤:1 自己新建一 ...

  10. CentOS7关闭/开启防火墙出现 Unit iptables.service failed to load

    在vm中安装好tomcat,而且在liunx中使用nc命令可以返回成功,但是更换到window中访问不到tomcat的情况,是由于linux防火墙的问题造成的,传统的解决方式有2中 第一种解决方案: ...