使用 R 的 Shiny 构建仪表板

人工智能与机器学习

概述

人工智能(AI)和机器学习(ML)是当今科技领域最热门的话题之一。AI是指计算机系统能够执行通常需要人类智能的任务,如视觉识别、语音识别和决策制定。ML是AI的一个子集,专注于开发能够从数据中学习的算法。

关键技术

深度学习

深度学习是ML的一个分支,使用多层神经网络来处理复杂的数据模式。它在图像和语音识别方面取得了显著的成果。

强化学习

强化学习是一种通过试错来学习的ML方法。它通常用于游戏和机器人控制等领域。

应用领域

医疗保健

AI和ML在医疗诊断、药物发现和个性化治疗方面有广泛应用。

金融

在金融领域,AI用于风险管理、欺诈检测和算法交易。

挑战

数据隐私

随着AI和ML的发展,数据隐私成为一个重要问题。如何在不侵犯个人隐私的情况下利用数据是一个挑战。

伦理问题

AI系统的决策过程可能不透明,这引发了关于伦理和责任的讨论。

未来展望

AI和ML的未来充满希望,但也伴随着挑战。随着技术的进步,我们期待看到更多创新的应用和解决方案。

简介

Shiny 包提供了一种使用 R 轻松构建 Web 应用程序的方法。Quarto 仪表板可以包含嵌入的 Shiny 组件(例如,带有控制其输入的滑块的图表)。

本节涵盖将 Shiny 与 Quarto 集成,并假设您已经对 Shiny 有基本的了解。要了解更多关于 Shiny 的信息,请访问 https://shiny.posit.co/r/getstarted/shiny-basics/lesson1/index.html。如果您使用的是 Python 而不是 R,请参阅使用 Shiny for Python 的文档。

演练

在这里,我们将深入探讨一个涵盖许多在创建带有 Shiny 的仪表板时使用的技巧的示例,包括提取设置代码、反应式计算以及更高级的布局结构,如侧边栏和标签集。以下是我们将要构建的交互式文档:

Diamonds Explorer App 的屏幕截图。导航栏显示两个页面:Plot(活动)和 Data。左侧边栏包含八个输入:一个样本大小滑块;两个用于 Jitter 和 Smooth 的复选框(均已选中);以及每个 X、Y、Color、Facet Row 和 Facet Col 的下拉菜单。右侧是一个使用 clarity 着色的 cut 与 carat 的点图。

以下是此仪表板的源代码(点击右侧的数字以获取语法和机制的额外解释):

---
title: "Diamonds Explorer"
author: "Barkamian Analytics"
format: dashboard
server: shiny
---

```{r}
#| context: setup
library(ggplot2)
dataset <- diamonds
```

# {.sidebar}

```{r}
sliderInput('sampleSize', 'Sample Size', 
            min=1, max=nrow(dataset),
            value=min(1000, nrow(dataset)), 
            step=500, round=0)
br()
checkboxInput('jitter', 'Jitter')
checkboxInput('smooth', 'Smooth')
```

```{r}
selectInput('x', 'X', names(dataset)) 
selectInput('y', 'Y', names(dataset), names(dataset)[[2]])
selectInput('color', 'Color', c('None', names(dataset)))
```

```{r}
selectInput('facet_row', 'Facet Row',
  c(None='.', names(diamonds[sapply(diamonds, is.factor)])))
selectInput('facet_col', 'Facet Column',
  c(None='.', names(diamonds[sapply(diamonds, is.factor)])))
```

# Plot

```{r}
plotOutput('plot')
```

# Data

```{r}
tableOutput('data')
```

```{r}
#| context: server

dataset <- reactive({
  diamonds[sample(nrow(diamonds), input$sampleSize),]
})
 
output$plot <- renderPlot({
  
  p <- ggplot(
    dataset(), 
    aes_string(x=input$x, y=input$y)) + geom_point()
  
  if (input$color != 'None')
    p <- p + aes_string(color=input$color)
  
  facets <- paste(input$facet_row, '~', input$facet_col)
  if (facets != '. ~ .')
    p <- p + facet_grid(facets)
  
  if (input$jitter)
    p <- p + geom_jitter()
  if (input$smooth)
    p <- p + geom_smooth()
  
  p
  
})

output$data <- renderTable({
  dataset()
})
```
1
server: shiny 选项指示 Quarto 在文档背后运行一个 Shiny 服务器。
2
context: setup 单元格选项表示此代码单元格应在应用程序启动时运行(而不是在每个新客户端会话启动时运行)。昂贵的初始化代码(例如加载数据)应放置在 context: setup 中。
3
通过将 .sidebar 类添加到一级标题来创建全局侧边栏。侧边栏可以包括代码单元格以及图像、叙述和链接。
4
这些选择输入的内容由数据集中可用的列动态驱动。
5
一级标题(此处为 # Plots# Data)在仪表板内创建页面。
6
在具有 context: server 的单元格中包含服务器代码(计算值或渲染输出的反应式)。
7
dataset() 反应式将在每次样本大小更改时重新采样数据集。
8
renderPlot() 函数在 dataset() 反应式或其他输入选项更改时重新生成图表。
9
renderTable() 函数在 dataset() 反应式更改时重新生成表格。

学习更多

要了解更多关于 R 的 Shiny 交互式文档,请参阅以下文章:

输入布局 描述了各种布局 Shiny 输入的方式(侧边栏、输入面板、直接将输入附加到卡片等)。

运行文档 涵盖了如何在 RStudio 和命令行中运行交互式文档,以及如何将它们部署给最终用户。

执行上下文 深入探讨了不同的代码块(例如渲染与服务)何时运行,以及如何缓存昂贵的计算以获得更灵敏的文档。 外部资源 描述了如何确保 Shiny 能够定位您在文档中包含的资源(例如 CSS、JS、图像等)。