如何在 5 分钟内建立一个数据驱动的新型冠状病毒肺炎应用程序

2021-10-15 13:11:34 浏览数 (1)

在开始教程前,我们先来了解一个由加拿大 IVADO(Institute for Data Valorization)资助的项目:COVID-19 Data Hub(新型冠状病毒肺炎数据中心),它是一个致力于开发一个统一的数据集,有助于更好地理解新型冠状病毒肺炎数据。

The goal of COVID-19 Data Hub is to provide the research community with a unified data hub by collecting worldwide fine-grained case data, merged with exogenous variables helpful for a better understanding of COVID-19.

在本教程中,我们将使用 COVID-19 Data Hub 提供的 COVID19 这个 R 包来构建一个简单而完整的 Shiny 应用程序,这个应用程序正是通过 COVID19 这个 R 包来连接新型冠状病毒肺炎数据中心从而获得数据。你也可以点击文章左下角"阅读原文",直接体验该教程完整的应用。

我们假定大家对对 Shiny (web apps) 和 plotly (interactive plot) 有一个基本的了解,下面我们只需要通过简单的复制粘贴就可以构建一个功能完备的 app。加载以下软件包以便开始:

代码语言:javascript复制
library(shiny)
library(plotly)
library(COVID19)

COVID19

COVID19 的 R 包通过 COVID19() 函数提供了与新型冠状病毒肺炎数据中心的无缝集成。关于这个函数的更多参数说明,我们可以通过 ?covid19 进行查看。下面我们将使用:

  • country:国家名称或国际标准化组织代码的矢量。
  • level:粒度级别;按(1)国家、(2)地区、(3)城市分列的数据。
  • start:感兴趣的开始日期。
  • end:感兴趣的结束日期。

定义用户界面

定义以下输入。

  • country:国家名称。请注意,选项是使用covid19()函数中提供的国家名称。
  • type:使用的度量标准,可以是c("confirmed", "tests", "recovered", "deaths")中的一种 , 也可以是除此以外的其他值,完整的名单参考这里。
  • level:粒度级别(国家-地区-城市)。
  • date:开始和结束日期。

输出。

  • covid19plot:显示交互式图形的 plotly 输出。

将所有内容打包到 fluidPage 函数中:

代码语言:javascript复制
# Define UI for application
ui <- fluidPage(

    selectInput("country", label = "Country", multiple = TRUE, choices = unique(covid19()$administrative_area_level_1), selected = "Italy"),
    selectInput("type", label = "type", choices = c("confirmed", "tests", "recovered", "deaths")),
    selectInput("level", label = "Granularity", choices = c("Country" = 1, "Region" = 2, "City" = 3), selected = 2),
    dateRangeInput("date", label = "Date", start = "2020-01-01"),

    plotlyOutput("covid19plot")

)

服务器逻辑

在 UI 中定义了响应式输入之后,我们将这些输入连接到 covid19() 函数以获取数据。下面的代码片段显示了如何呈现交互式绘图 ,当任何输入发生更改时,交互式绘图会自动更新。注意,因为 covid19() 函数使用了内部的缓存系统(memory caching system),因此数据不会被下载两次。多次调用这个函数是非常高效和用户友好的。

代码语言:javascript复制
# Define server logic
server <- function(input, output) {

    output$covid19plot <- renderPlotly({
        if(!is.null(input$country)){
            x <- covid19(country = input$country, level = input$level, start = input$date[1], end = input$date[2])
            color <- paste0("administrative_area_level_", input$level)
            plot_ly(x = x[["date"]], y = x[[input$type]], color = x[[color]])
        }
    })

}

运行应用程序

这个示例应用程序在线可以通过下面的地址进行访问(参考"阅读原文"):

https://bioitee.shinyapps.io/covid-19-shiny-apps/

在本地 RStudio 运行后的截图如下:

简单总结

我们构建了一个简单的应用程序,将 Shiny 与 COVID19 的 R 包连接起来,呈现了一个可重用的通用体系结构。这个示例应用程序可以用作更高级的新型冠状病毒肺炎数据驱动应用程序的构建块。特别是,可以通过 covid19() 函数获得的数据集包括关于新型冠状病毒肺炎案例、政策措施、地理信息和其他相关的额外指标,这些指标使得数据集可以很容易地扩展到世界银行开放数据(World Bank Open Data)、谷歌移动报告(Google Mobility Reports)、苹果移动报告(Apple Mobility Reports)和当地政府数据。请参阅完整的数据集文档(full dataset documentation)和 COVID19 代码片段(COVID19 code snippets)。

截止本文章推送前(2020-05-29),小编在 COVID-19 Data Hub 官网看了一下,它们目前已经支持将近 190 个国家的 COVID-19 相关数据,但没有中国的。另外,该开源项目还提供基于 Python、MATLAB、Julia,以及 Node.js 等语言的 API,感兴趣的童鞋可以参考它们在 Github 的源码。

—END—

0 人点赞