使用 R 語(yǔ)言構(gòu)建一個(gè)可交互的 Web 應(yīng)用
數(shù)據(jù)分析已成為企業(yè)的當(dāng)務(wù)之急,并且對(duì)具有用戶(hù)友好界面的數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序有巨大的需求。本文介紹如何使用 R 語(yǔ)言中的 Shiny 包開(kāi)發(fā)交互式 Web 應(yīng)用程序,R 語(yǔ)言是一種流行的數(shù)據(jù)科學(xué)編程語(yǔ)言。
如今,世界各地幾乎所有企業(yè)都以某種形式依賴(lài)于數(shù)據(jù)。數(shù)據(jù)科學(xué)通過(guò)使用數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用程序幫助許多企業(yè)實(shí)現(xiàn)轉(zhuǎn)型,無(wú)論是在金融、銀行、零售、物流、電子商務(wù)、運(yùn)輸、航空還是任何其他領(lǐng)域。
高性能計(jì)算機(jī)和低成本存儲(chǔ)使我們現(xiàn)在能夠在幾分鐘內(nèi)預(yù)測(cè)結(jié)果,而不是像以前一樣以前需要花費(fèi)很多時(shí)間。數(shù)據(jù)科學(xué)家著眼于未來(lái),正在開(kāi)發(fā)具有高性能和多維可視化的便捷應(yīng)用。這一切都始于大數(shù)據(jù),它由三個(gè)組成部分組成:數(shù)量、多樣性和速度。算法和模型都是根據(jù)這些數(shù)據(jù)提供的。機(jī)器學(xué)習(xí)和人工智能領(lǐng)域最前沿的數(shù)據(jù)科學(xué)家正在創(chuàng)建能夠自我改進(jìn)、檢測(cè)錯(cuò)誤并從中學(xué)習(xí)的模型。
在數(shù)據(jù)科學(xué)領(lǐng)域,統(tǒng)計(jì)和計(jì)算用于將數(shù)據(jù)轉(zhuǎn)化為有用的信息,通常稱(chēng)為數(shù)據(jù)驅(qū)動(dòng)科學(xué)。數(shù)據(jù)科學(xué)是來(lái)自各個(gè)領(lǐng)域的方法的綜合,用于收集、分析和解釋數(shù)據(jù),以形成新的見(jiàn)解并做出選擇。構(gòu)成數(shù)據(jù)科學(xué)的技術(shù)學(xué)科包括統(tǒng)計(jì)學(xué)、概率、數(shù)學(xué)、機(jī)器學(xué)習(xí)、商業(yè)智能和一些編程。
數(shù)據(jù)科學(xué)可以應(yīng)用于各個(gè)領(lǐng)域(圖 1)。對(duì)大型、復(fù)雜數(shù)據(jù)集的分析是數(shù)據(jù)科學(xué)的重點(diǎn)。它幫助我們創(chuàng)建了一個(gè)以全新方式看待數(shù)據(jù)的新宇宙。亞馬遜、谷歌和 Facebook 等科技巨頭利用數(shù)據(jù)科學(xué)原理進(jìn)行商業(yè)智能和商業(yè)決策。
Figure 1 Key applications-and use cases of data science
R 語(yǔ)言:為數(shù)據(jù)科學(xué)量身打造的語(yǔ)言
由于海量的可用信息,我們迫切需要數(shù)據(jù)分析以得到新的見(jiàn)解,在多種技術(shù)的幫助下,原始數(shù)據(jù)轉(zhuǎn)化為成品數(shù)據(jù)產(chǎn)品。在數(shù)據(jù)研究、處理、轉(zhuǎn)換和可視化方面,沒(méi)有比 R 語(yǔ)言更好的工具了。
R 語(yǔ)言用于數(shù)據(jù)科學(xué)的主要功能包括:
- 數(shù)據(jù)預(yù)處理
- 社交媒體數(shù)據(jù)獲取和分析
- 對(duì)數(shù)據(jù)結(jié)構(gòu)的各種操作
- 提取、轉(zhuǎn)換、加載(ETL)
- 連接到各種數(shù)據(jù)庫(kù),包括 SQL 和電子表格
- 與 NoSQL 數(shù)據(jù)庫(kù)交互
- 使用模型進(jìn)行訓(xùn)練和預(yù)測(cè)
- 機(jī)器學(xué)習(xí)模型
- 聚類(lèi)
- 傅里葉變換
- 網(wǎng)頁(yè)抓取
R 語(yǔ)言是一種強(qiáng)大的編程語(yǔ)言,常用于統(tǒng)計(jì)計(jì)算和數(shù)據(jù)分析。有關(guān)優(yōu)化 R 語(yǔ)言用戶(hù)界面的努力由來(lái)已久。從簡(jiǎn)單的文本編輯器到更現(xiàn)代的交互式 R Studio 和 Jupyter Notebooks,世界各地的多個(gè)數(shù)據(jù)科學(xué)小組都在關(guān)注 R 語(yǔ)言的發(fā)展。
只有全世界 R 用戶(hù)的貢獻(xiàn)才使這一切成為可能。R 語(yǔ)言中包含的強(qiáng)大軟件包使其日益強(qiáng)大。許多開(kāi)源軟件包使處理大型數(shù)據(jù)集和可視化數(shù)據(jù)變得更加容易和高效。
使用 Shiny 在 R 語(yǔ)言中開(kāi)發(fā)交互式 Web 應(yīng)用
你可以使用 Shiny 包在 R 語(yǔ)言中構(gòu)建交互式 Web 應(yīng)用程序。應(yīng)用程序可以托管在網(wǎng)站上、嵌入 R Markdown 文檔中,或用于開(kāi)發(fā)控制面板板和可視化。CSS 主題、HTML 小部件和 JavaScript 操作都可以用于進(jìn)一步自定義你的 Shiny 應(yīng)用程序。
Shiny 是一款 R 語(yǔ)言工具,它可以輕松創(chuàng)建交互式的 Web 應(yīng)用程序。它允許你將你的 R 代碼擴(kuò)展到 Web 上,從而使更多的人能夠使用它,從中獲益。
除了 Shiny 內(nèi)置的功能外,還有許多第三方擴(kuò)展包可用,例如 shinythemes、shinydashboard 和 shinyjs。
使用 Shiny 可以開(kāi)發(fā)各種應(yīng)用程序。以下是其中一些:
- 基于 Web 應(yīng)用的機(jī)器學(xué)習(xí)
- 具有動(dòng)態(tài)控件的 Web 應(yīng)用程序
- 數(shù)據(jù)驅(qū)動(dòng)的儀表盤(pán)
- 多重?cái)?shù)據(jù)集的交互式應(yīng)用
- 實(shí)時(shí)數(shù)據(jù)可視化面板
- 數(shù)據(jù)收集表單
Shiny Web 應(yīng)用程序可以分為以下幾類(lèi):
- 用戶(hù)接口
- 服務(wù)功能邏輯
- Shiny 應(yīng)用邏輯
獲取更深理解,請(qǐng)?jiān)L問(wèn)以下網(wǎng)站 https://shiny.rstudio.com/gallery/ 。
其中某個(gè)用 Shiny 開(kāi)發(fā)的應(yīng)用如圖 2(https://shiny.rstudio.com/gallery/radiant.html )。
Figure 2: Shiny based app
銷(xiāo)售儀表盤(pán)的生成
下面是一個(gè)與銷(xiāo)售儀表盤(pán)相關(guān)的 Web 應(yīng)用程序的代碼片段。該儀表板具有多個(gè)控件和用戶(hù)界面模塊,用于查看數(shù)據(jù)。
首先,安裝 Shiny 包,然后在代碼中調(diào)用它,以便將輸出呈現(xiàn)為 Web 頁(yè)面的形式。
library(shiny)
library(dplyr)
sales <- vroom::vroom(“salesdata.csv”, na = “”)
ui <- fluidPage(
titlePanel(“Dashboard for Sales Data”),
sidebarLayout(
sidebarPanel(
selectInput(“territories”, “territories”, choices = unique(sales$territories)),
selectInput(“Customers”, “Customer”, choices = NULL),
selectInput(“orders”, “Order number”, choices = NULL, size = 5, selectize = FALSE),
),
mainPanel(
uiOutput(“customer”),
tableOutput(“data”)
)
)
)
server <- function(input, output, session) {
territories <- reactive({
req(input$territories)
filter(sales, territories == input$territories)
})
customer <- reactive({
req(input$Customers)
filter(territories(), Customers == input$Customers)
})
output$customer <- renderUI({
row <- customer()[1, ]
tags$div(
class = “well”,
tags$p(tags$strong(“Name: “), row$customers),
tags$p(tags$strong(“Phone: “), row$contact),
tags$p(tags$strong(“Contact: “), row$fname, “ “, row$lname)
)
})
order <- reactive({
req(input$order)
customer() %>%
filter(ORDER == input$order) %>%
arrange(OLNUMBER) %>%
select(pline, qty, price, sales, status)
})
output$data <- renderTable(order())
observeEvent(territories(), {
updateSelectInput(session, “Customers”, choices = unique(territories()$Customers), selected = character())
})
observeEvent(customer(), {
updateSelectInput(session, “order”, choices = unique(customer()$order))
})
}
shinyApp(ui, server)
運(yùn)行 Shiny 應(yīng)用程序的代碼后,生成了圖 3 所示的輸出,可以在任何 Web 瀏覽器上查看。銷(xiāo)售儀表盤(pán)具有多個(gè)控件,并且具有不同的用戶(hù)界面模塊,非?;?dòng)。
Figure 3: Sales dashboard with multiple controls
通過(guò)使用 Shiny Cloud,可以將這個(gè)應(yīng)用程序部署和托管在云上,以便隨時(shí)隨地在互聯(lián)網(wǎng)上使用。
Figure 4: Cloud for hosting and deployment of Shiny app
Shiny Cloud 的免費(fèi)版本允許在 25 個(gè)活動(dòng)小時(shí)內(nèi)部署五個(gè)應(yīng)用程序。研究人員和數(shù)據(jù)科學(xué)家可以使用 R 的 Shiny 庫(kù)開(kāi)發(fā)基于實(shí)時(shí)數(shù)據(jù)驅(qū)動(dòng)的用戶(hù)友好應(yīng)用程序。這個(gè)庫(kù)也可以用于在 Web 平臺(tái)上部署他們的機(jī)器學(xué)習(xí)應(yīng)用程序。