成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[原]文檔定義應用:數(shù)據(jù)科學的文檔革命

wh469012917 / 2226人閱讀

摘要:對于數(shù)據(jù)科學的研究可以說已經(jīng)是本文我將介紹如何以文檔定義應用的方式成為數(shù)據(jù)科學中的標準交付。參考前文解密的數(shù)據(jù)科學部門如果構建知識倉庫,作為一個謝大大的死忠,我很自然選擇了作為我文檔輸出的首選工具。

概述

隨著近年來,Rstudio 通過 shiny 將R語言推向Web化,Rmarkdown 借助 Shiny 已經(jīng)不斷演化形成了一個動態(tài)可交互文檔生態(tài)。對于數(shù)據(jù)科學的研究可以說已經(jīng)是Every Thing in Rmd!本文我將介紹Rmd如何以文檔定義應用的方式(Docs As an App)成為數(shù)據(jù)科學中的標準交付。

什么是Rmd

Rmd 是Rmarkdown的文件保存格式,而Rmarkdown 是一個由謝益輝老師(XRAN)十年磨一劍的動態(tài)可重復文檔解決方案。參考前文:基于RStudio Webinars的統(tǒng)計報告Web化與工程化實踐總結,我們可以知道,Rmarkdown緣起謝大大對LaTex論文寫作的深惡痛絕,在謝大大深入研究各種姿勢的論文撰寫方式后決定自成一派,于是推出了Rmarkdown極大地簡化了論文寫作的排版問題并快速成為了學界的論文寫作新標準。

借用謝大大的例子,你可以運行下面的代碼來生成一個pdf的beamer。

download.file("https://raw.githubusercontent.com/rstudio/webinars/master/13-R-Markdown-Ecosystem/presentation.Rmd",destfile = "presentation.Rmd") # 下載Rmd文件
download.file("https://raw.githubusercontent.com/rstudio/webinars/master/13-R-Markdown-Ecosystem/references.bib",destfile = "references.bib") # 下載bib引用
rmarkdown::render("presentation.Rmd", rmarkdown::pdf_document()) # 生成pdf

yaml中可以指定bibliography的路徑來解決引用文獻的問題。

---
title: "Sample Document"
output: html_document
bibliography: bibliography.bib
---

這里的引用我們可以很容易在Google Scholar生成,當然,除了BibTeX,Rmd 也支持 EndNote,RefMan,RefWorks以及直接在yaml中的引用方式。

---
references:
- id: fenner2012a
  title: One-click science marketing
  author:
  - family: Fenner
    given: Martin
  container-title: Nature Materials
  volume: 11
  URL: "http://dx.doi.org/10.1038/nmat3283"
  DOI: 10.1038/nmat3283
  issue: 4
  publisher: Nature Publishing Group
  page: 261-263
  type: article-journal
  issued:
    year: 2012
    month: 3
---
Rmd 原理分析

如果有用過APIDoc或者Swagger這樣的API文檔撰寫工具,或者利用Jekyll(Ruby)、Hexo(JS)、Pelican(Python)搭建個人網(wǎng)站的開發(fā)者應該很容易就明白,Rmarkdown的原理和這些應用非常類似。

靜態(tài)渲染

首先,我們利用markdown事先聲明好一定的文檔格式。其次,利用文檔解析器對markdown中的內容和dom樹做解析。最后,再用相應的css、js做渲染生成h5頁面,這樣一個文檔定義應用的過程就完成了。

動態(tài)渲染

而文檔的動態(tài)化則是用一個后端服務器來host這些前端html頁面資源。這里Rmarkdown可以利用Shiny-server作為后端服務器,在運行前端h5頁面的同時通過后端的服務器做實時的數(shù)據(jù)處理,實現(xiàn)文檔的動態(tài)化。(在文章最后會舉一些相應的例子)

注意,這里如果在shiny-server的相關目錄下同時存在shiny的app.R文件,shiny-server將會優(yōu)先識別app.R而不是.Rmd。

想要動手嘗試的同學可以參考前文:打造數(shù)據(jù)產(chǎn)品的快速原型:Shiny的Docker之旅。

數(shù)據(jù)科學與 Rmd

首先,參考前文:數(shù)據(jù)科學部門如何使用Python和R組合完成任務,讓我們來回顧一下之前談到了數(shù)據(jù)科學理論上會經(jīng)歷的幾個階段:

需求定義=》數(shù)據(jù)收集=》數(shù)據(jù)轉化=》數(shù)據(jù)分析=》數(shù)據(jù)可視化

而在需求快速變化的項目初期,為了快速確定需求,如何敏捷打造最小可用原型(MVP)顯然比項目工程化來得更有意義。

所以在現(xiàn)實中,這時候流程常常就會縮短成:

需求定義=》數(shù)據(jù)整理=》數(shù)據(jù)可視化

場景一:需求分析多格式文檔交付

需求定義階段,我們需要通過大量的Email、word、paper、keynote、訪談等等資料針對相關的業(yè)務場景進行初步了解,這一階段我們最大的需求不是著急碼代碼,而是在起跑之前看準方向,系好鞋帶,弄明白真實的業(yè)務需求,對實際需求進行優(yōu)先級排序(做什么)。

在需求定義階段,每次訪談、實地考察、活動會議等等都需要我們產(chǎn)出相應的研究紀錄。經(jīng)過來來回回的幾輪討論,我們還需要畫很多流程圖、示意圖等等,最后產(chǎn)出一份完整的產(chǎn)品需求分析報告(為什么做)和產(chǎn)品需求文檔(怎么做)。

在這個過程中,很多細節(jié)都需要反復推敲,多方論證(撕逼),而這個環(huán)節(jié)也是數(shù)據(jù)科學最有趣的一環(huán)。

面對大量的文檔輸出,很多人跟我一樣都會首先想到馬克飛象。馬克飛象名聲在外,是很優(yōu)秀的一款產(chǎn)品。不過對于文檔的同步目前是收費的服務,很可惜,因為預算有限,所以我還是沒有考慮它,暫時是通過svn/git的方式解決云端同步的問題。

參考前文:解密Airbnb的數(shù)據(jù)科學部門如果構建知識倉庫,作為一個謝大大的死忠,我很自然選擇了 Rmarkdown 作為我文檔輸出的首選工具。一方面,我不僅可以方便地嵌入本地或者網(wǎng)絡上的圖片,通過"[@]"語法也可以利用yaml中的信息直接引用相關的參考文獻。另一方面,在網(wǎng)絡情況非常糟糕的情況下,我也不必擔心通過Web編輯無法編輯的問題,而所有的編輯結果都會被存放在Rstudio的.Rdata文件中,實現(xiàn)和Web編輯器類似的實時編輯功能。

通過設置自己喜歡的css樣式,我還可以個性化導出html文檔,統(tǒng)一輸出團隊的VI系統(tǒng),這方面Airbnb是一個很好的榜樣,我們可以參考前文:解密Airbnb的數(shù)據(jù)科學部門如何使用R語言。你也可以參考V2EX里大家對于Markdown樣式的熱烈討論。

在需求報告的討論環(huán)節(jié),在yaml中簡單聲明shiny的runtime,再將Rmd文檔上傳到shiny-server上就可以在網(wǎng)絡上(內網(wǎng)或外網(wǎng))多人多端同步瀏覽,在Mac找不到轉化頭做投影的時候非常有用。

---
title: "文檔定義應用:數(shù)據(jù)科學 Everything in Rmd"
author: "Harry Zhu"
date: "May 13, 2016"
output: html_document
runtime: shiny
---

更為實用的是,如果需要評審修改文檔,我們也可以導出word來互相評審修改,我們甚至還能直接導出目錄,完全不需要自己再手動生成目錄。

在word和html之間自由切換,進可審閱、退可編輯,顯然,在現(xiàn)實中我們沒法決定我們身邊的人是喜歡word還是喜歡html。

當然,除了html和word,Rmd還可以在多種酷炫的keynote、dashboard、pdf之間相互轉化,不過這里由于篇幅有限暫時不展開討論。

更多高級的Rmarkdown文檔轉換技巧可以前往rmarkdown官網(wǎng)

場景二:數(shù)據(jù)整理多語言混編

之所以說原來 數(shù)據(jù)收集=》數(shù)據(jù)轉化=》數(shù)據(jù)分析 的流程可以簡化為數(shù)據(jù)整理主要是因為這里數(shù)據(jù)源獲取的方式一般比較dirty,比如從一個Excel的 xlsx文件讀取、通過現(xiàn)場勘查記錄自己制作的臨時數(shù)據(jù)又或者通過Python爬蟲抓取的一部分數(shù)據(jù)、從某些文章中直接復制粘貼的數(shù)據(jù)等等。而處理這些dirty的數(shù)據(jù)往往都會采用比較crud的方式,并不會做非常詳細的分析工作(很多公司的數(shù)據(jù)分析實習生工作都是從這里起步的)。

在數(shù)據(jù)整理的過程中,我們可能會用到多種編程語言或者工具(比如Python、R、awk)、多種文件格式(比如csv、xlsx、json、pdf、word),這時候為了兼容多種工具并保證研究的可重復性,我們非常需要在一個文檔中運行多種編程語言。

通過knitr的代碼塊管理,我們可以輕松選擇代碼編譯環(huán)境來兼容多種編程語言,比如這樣:

```{python}
x = "hello, python world!"
print(x)
print(x.split(" "))
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()
```
當然我們也可以自定義代碼編譯引擎:

> system("which python") # 查到 python 引擎的默認路徑
/Users/harryzhu/Library/Enthought/Canopy_64bit/User/bin/python

進一步定義 python 引擎的路徑:

```{r engine=python,engine.path="/Users/harryzhu/Library/Enthought/Canopy_64bit/User/bin/python"}
x = "hello, python world!"
print(x)
print(x.split(" "))
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()
```

更多高級的knitr代碼塊使用技巧可以移步謝大大的knitr官網(wǎng)

場景三:數(shù)據(jù)產(chǎn)品敏捷響應

數(shù)據(jù)科學部門在推進項目的過程中如果只是拿著一些示意圖和文檔就去和各個部門討論而沒有拿出實際可用的產(chǎn)品必然會出現(xiàn)幾個問題:

交流低效。對產(chǎn)品和需求的理解停留在紙面,往往多方反復溝通后對產(chǎn)品依賴概念模糊。

信心不足。當我們沒有拿出實際可用的產(chǎn)品,項目戰(zhàn)線上的成員對項目的認可度比較低,各自相應的投入也就不會太多。

眾所周知,數(shù)據(jù)可視化是R非常擅長的領域。得益于R語言社區(qū)大量開發(fā)者對大量JS作圖框架熱情洋溢的封裝,我們可以利用R接口調用諸如echats、highcharts、leaflet、datatable這樣的前端組件,輕松完成數(shù)據(jù)產(chǎn)品的快速原型。

現(xiàn)在通過shinydashoboard、flexdashboard,我們可以快速開始數(shù)據(jù)產(chǎn)品的原型構建,而這一切都可以輕松集成在一個.Rmd文件中。

shinydashboard

shinydashboard官網(wǎng) Demo: https://gallery.shinyapps.io/...

GitHub源碼地址:https://github.com/rstudio/sh...

這里你可以執(zhí)行運行示例。

# 安裝依賴
install.packages(c("shiny", "dplyr", "htmlwidgets", "digest", "bit"))
devtools::install_github("rstudio/shinydashboard")
devtools::install_github("jcheng5/bubbles")
devtools::install_github("hadley/shinySignals")
# 運行
shiny::runGitHub("rstudio/shiny-examples",subdir = "087-crandash")


引用官網(wǎng)的另外一個例子,當然你也可以在Rmd中直接省去定義ui和server的步驟,寫成這樣:

---
title: "something"
author: "Harry Zhu"
date: "May 13, 2016"
output: html_document
runtime: shiny
---

library(shinydashboard)
dashboardBody(
    tabItems(
      # 第一個tab
      tabItem(tabName = "dashboard",
        fluidRow(
          box(plotOutput("plot1", height = 250)),

          box(
            title = "Controls",
            sliderInput("slider", "Number of observations:", 1, 100, 50)
          )
        )
      ),

      # 第二個tab
      tabItem(tabName = "widgets",
        h2("Widgets tab content")
      )
    )
  )
# 直接在后面定義作圖函數(shù)
set.seed(122)
  histdata <- rnorm(500)

  output$plot1 <- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
  })

省去的ui和server的定義,直接渲染Rmd。

flexdashboard

flexdashboard Demo: https://beta.rstudioconnect.c...

開源源碼如下:

```
---
title: "Sales Report with Highcharter"
author: "Joshua Kunst"
output:
flexdashboard::flex_dashboard:

orientation: columns
social: menu
source_code: embed

---
```
```{r setup, include=FALSE}
library(highcharter)
library(dplyr)
library(viridisLite)
library(forecast)
library(treemap)
library(flexdashboard)

thm <-
hc_theme(

colors = c("#1a6ecc", "#434348", "#90ed7d"),
chart = list(
  backgroundColor = "transparent",
  style = list(fontFamily = "Source Sans Pro")
),
xAxis = list(
  gridLineWidth = 1
)

)

```

Column {data-width=600}
-----------------------------------------------------------------------

### Sales Forecast

```{r}
AirPassengers %>%
forecast(level = 90) %>%
hchart() %>%
hc_add_theme(thm)
```

### Sales by State

```{r}
data("USArrests", package = "datasets")
data("usgeojson")

USArrests <- USArrests %>%
mutate(state = rownames(.))

n <- 4
colstops <- data.frame(
q = 0:n/n,
c = substring(viridis(n + 1), 0, 7)) %>%
list.parse2()

highchart() %>%
hc_add_series_map(usgeojson, USArrests, name = "Sales",

                value = "Murder", joinBy = c("woename", "state"),
                dataLabels = list(enabled = TRUE,
                                  format = "{point.properties.postalcode}")) %>%

hc_colorAxis(stops = colstops) %>%
hc_legend(valueDecimals = 0, valueSuffix = "%") %>%
hc_mapNavigation(enabled = TRUE) %>%
hc_add_theme(thm)
```

Column {.tabset data-width=400}
-----------------------------------------------------------------------

### Sales by Category

data("Groceries", package = "arules")
dfitems <- tbl_df(Groceries@itemInfo)

set.seed(10)

dfitemsg <- dfitems %>%
  mutate(category = gsub(" ", "-", level1),
         subcategory = gsub(" ", "-", level2)) %>%
  group_by(category, subcategory) %>% 
  summarise(sales = n() ^ 3 ) %>% 
  ungroup() %>% 
  sample_n(31)

tm <- treemap(dfitemsg, index = c("category", "subcategory"),
              vSize = "sales", vColor = "sales",
              type = "value", palette = rev(viridis(6)))

highchart() %>% 
  hc_add_series_treemap(tm, allowDrillToNode = TRUE,
                        layoutAlgorithm = "squarified") %>% 
  hc_add_theme(thm)

### Best Sellers

```{r}
set.seed(2)

nprods <- 10

dfitems %>%
sample_n(nprods) %>%
.$labels %>%
rep(times = sort(sample( 1e4:2e4, size = nprods), decreasing = TRUE)) %>%
factor(levels = unique(.)) %>%
hchart(showInLegend = FALSE, name = "Sales", pointWidth = 10) %>%
hc_add_theme(thm) %>%
hc_chart(type = "bar")

```

我們可以看到這里的排版方式被大大的簡化了,我們只需要定義好Column和Row,然后在相應的代碼塊里盡情的作圖就可以在前端頁面上可視化了,相比之下css真是操碎了心。

更多關于flexdashboard的高級技巧可以前往flexdashboard官網(wǎng)

echarts

由于大家對echarts的呼聲很高,這里再演示一下echart在R中的調用。

# 下載包
install.packages(
  "recharts",
  repos = c("http://yihui.name/xran", "http://cran.rstudio.com")
)
# 畫圖
recharts::echart(iris, ~Sepal.Length, ~Sepal.Width, series = ~Species)

另外一個牛逼的功能是,通過REmap這個包(已經(jīng)封裝了各種百度API),我們可以將物流的收貨地址直接輸入不必太規(guī)則的中文文本即可實現(xiàn)地圖數(shù)據(jù)的可視化。而且,最近特別火的莆田系醫(yī)院數(shù)據(jù)爬取及分布可視化大多也是通過REmap包實現(xiàn)的。

更多echarts的作圖這里不一一介紹,高級技巧可以前往recharts官網(wǎng)或者SupStat 郎大為:REmap。

Notebook

根據(jù)雪晴數(shù)據(jù)網(wǎng)的最新消息,RStudio 也已經(jīng)實現(xiàn)了類似iPython的Notebook功能。

下面是雪晴數(shù)據(jù)網(wǎng)的教程:

配置步驟

下載最新的RStudio每日版

下載最新版本的Rmarkdown包:

devtools::install_github("rstudio/rmarkdown")

設置選項:Tools -> Global Options -> Rmarkdown -> Enable R Notebook -> Apply

像往常一樣打開一個新的Rmarkdown文件

設置YAML輸出選項:將output: html_document 改為 output: html_notebook: default

Rmd + Docker = liftr

liftr 視頻教程

躺坑排雷

在安裝最新版本后,由于我的鏡像源設成了 MRAN,導致這里更新的 evaluateknitr包的版本過低需要指定CRAN源重新升級。

> getOption("repos")
                                                      CRAN 
"https://mran.revolutionanalytics.com/snapshot/2015-08-27" 
install.packages(c("evaluate","knitr"),repos="http://mirror.bjtu.edu.cn/cran/")
Notebook API

通過 Notebook API,我們還可以把任意的Rmd文檔輸出成Notebook。

rmarkdown::render("FinanceR.Rmd",out_format="html_notebook")
notebook <- parse_html_notebook("FinanceR.nb.html")
參考資料

R Markdown: Integrating A Reproducible Analysis Tool into Introductory Statistics

R Markdown example showing figures & tables with captions, equations, inline R values and references with a Zotero library

Playing with R, Shiny Dashboard and Google Analytics Data

阿里巴巴阿外:基于R的數(shù)據(jù)分析平臺

R Markdown Notebooks

Setting Up New R Notebook

This Week In Startups #634: Hadley Wickham

容器定義應用:數(shù)據(jù)科學的容器革命

推薦工具

文末,推薦一款類似于 Airbnb 用 Flask 生成博客的解決方案,可以有效在團隊內部做知識倉庫的共享:

Leanote:專為碼農(nóng)打造的免費開源私有云筆記

比較可惜的是,我嘗試了多個 Leanote 的Docker方案都沒有成功,如果讀者有成功案例歡迎在留言區(qū)留言。

另外,還推薦一個類似于 Endnote 的論文神器:

Zotero

利用 Zotero 我們可以輕松的通過 drap and drop 實現(xiàn)多人協(xié)同論文跟蹤管理的功能,并且支持Chrome插件、多平臺客戶端。

作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權,轉載請保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,如果涉及源代碼請注明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio
商業(yè)使用請聯(lián)系作者。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/37918.html

相關文章

  • []深入對比數(shù)據(jù)科學工具箱:Python和R Web 編輯器

    摘要:概述工欲善其事必先利其器,如果現(xiàn)在要評選數(shù)據(jù)科學中最好用的編輯器注意一定是可以通過訪問的,和一定是角逐的最大熱門,正確使用編輯器可以很大地提升我們的工作效率。 概述 showImg(https://segmentfault.com/img/bVAdol); 工欲善其事必先利其器,如果現(xiàn)在要評選數(shù)據(jù)科學中最好用的Web 編輯器(注意一定是可以通過Web訪問的),RStudio和Jupyt...

    RobinQu 評論0 收藏0
  • [] 容器定義應用數(shù)據(jù)科學容器革命

    摘要:概述隨著容器化技術的興起,數(shù)據(jù)科學現(xiàn)在最大的一場運動已經(jīng)不是由一個新的算法或者統(tǒng)計方法發(fā)起的了,而是來自的容器化技術。本文將介紹利用容器技術如何加速數(shù)據(jù)科學在生產(chǎn)環(huán)境中的實際應用。 showImg(https://segmentfault.com//img/bVxzYL); 概述 隨著容器化技術的興起,數(shù)據(jù)科學現(xiàn)在最大的一場運動已經(jīng)不是由一個新的算法或者統(tǒng)計方法發(fā)起的了,而是來自Doc...

    alin 評論0 收藏0
  • [] 容器定義應用數(shù)據(jù)科學容器革命

    摘要:概述隨著容器化技術的興起,數(shù)據(jù)科學現(xiàn)在最大的一場運動已經(jīng)不是由一個新的算法或者統(tǒng)計方法發(fā)起的了,而是來自的容器化技術。本文將介紹利用容器技術如何加速數(shù)據(jù)科學在生產(chǎn)環(huán)境中的實際應用。 showImg(https://segmentfault.com//img/bVxzYL); 概述 隨著容器化技術的興起,數(shù)據(jù)科學現(xiàn)在最大的一場運動已經(jīng)不是由一個新的算法或者統(tǒng)計方法發(fā)起的了,而是來自Doc...

    novo 評論0 收藏0
  • []打造數(shù)據(jù)產(chǎn)品快速型:DjangoDocker之旅

    摘要:而大多數(shù)數(shù)據(jù)科學研究的場景下,更快的速度也意味著更早地發(fā)現(xiàn)問題和完成檢驗假設的閉環(huán)。通常,數(shù)據(jù)科學被認為研究成果立即應用到生產(chǎn)環(huán)境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數(shù)據(jù)科學研究中,快速驗證想法是非常關鍵的一環(huán),而如何快速開發(fā)出數(shù)據(jù)產(chǎn)品則可以有效推動整個數(shù)據(jù)科學項...

    zhoutao 評論0 收藏0
  • []打造數(shù)據(jù)產(chǎn)品快速型:DjangoDocker之旅

    摘要:而大多數(shù)數(shù)據(jù)科學研究的場景下,更快的速度也意味著更早地發(fā)現(xiàn)問題和完成檢驗假設的閉環(huán)。通常,數(shù)據(jù)科學被認為研究成果立即應用到生產(chǎn)環(huán)境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數(shù)據(jù)科學研究中,快速驗證想法是非常關鍵的一環(huán),而如何快速開發(fā)出數(shù)據(jù)產(chǎn)品則可以有效推動整個數(shù)據(jù)科學項...

    zhangqh 評論0 收藏0

發(fā)表評論

0條評論

wh469012917

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<