[原]深刻對比數據科學工具箱:Python和R 的 Web 編輯器

概述

clipboard.png

工欲善其事必先利其器,若是如今要評選數據科學中最好用的Web 編輯器(注意必定是能夠經過Web訪問的),RStudio和Jupyter必定是角逐的最大熱門,正確使用編輯器能夠很大地提高咱們的工做效率。本文將講解一些RStudio和Jupyter的使用技巧。html

RStudio

模塊設計

RStudio編輯器總體被分爲明顯的四個模塊,包括:python

  1. 文本編輯區(寫代碼的地方)git

  2. 控制檯(跑代碼的地方)程序員

  3. 文檔管理區(查看幫助、繪圖預覽、文件管理等等)github

  4. 狀態管理區(環境變量、版本控制、Spark連接管理等等)web

咱們能夠根據本身的喜愛在視圖View菜單欄選項卡中選擇各個pane的佈局方式。
另外也能夠經過快捷鍵快速在各個pane之間切換。
默認的快捷鍵(能夠經過 atl + shift + k 查看更多快捷鍵)是:算法

  • ctrl + 1 :切換到文本編輯區shell

  • ctrl + 2 :切換到控制檯(console)編程

  • ctrl + 3 :幫助文檔segmentfault

  • ctrl + 4 :歷史命令

  • ctrl + 5 :文件夾
    ...

clipboard.png
shift + ctrl + 《N》 能夠放大上述區域。好比 shift + ctrl + 1 放大編輯區,放大以後咱們就能夠專一於某一項特定的任務上。

代碼編譯與文檔預覽

在文本編輯器中,咱們支持C++、Shell、Python、HTML、SQL等語言的代碼高亮以及編譯。(暫時不支持Java)
經過 快捷鍵 ctrl + shift + s (source) 便可當即編譯代碼。

若是是R,經過 system2("sh","some.sh",stdout=TRUE)函數便可捕獲腳本的輸出值。

若是是 頁面或者文檔則經過 ctrl + shift + k (knitr) 便可當即預覽。

功能設計

1. 版本控制(Git/SVN)

clipboard.png

集成的Git/SVN的版本控制,Diff、commit、pull等等操做都很是方便。一般用Git(利用分支)來管理代碼,而SVN(利用文件夾)則用來管理文檔。

clipboard.png

2. 文檔預覽

(演講Slides/PDF論文/HTML技術文檔/WORD產品文檔/Rnotebook試驗文檔)

clipboard.png
參考前文 文檔定義應用:數據科學的文檔革命咱們能夠知道,
經過Rmarkdown、knitr、slidify、pandoc等等組件能夠完美輸出各式文檔,知足不一樣場景下的編輯任務。(經過快捷鍵ctrl+shift+k(knitr)能夠即時預覽)

clipboard.png

  • 須要安裝 devtools::install_github("rstudio/rmarkdown")安裝若干必要的包

3. 大數據處理(Spark)

/img/bVz84G

經過Sparklyrsparklyr::spark_install(version = 2.0.0)能夠一鍵安裝指定版本的Spark所需軟件,經過Spark鏈接管理界面控制鏈接的狀態,利用dplyr的api直接操做spark。

4. 項目管理(Build/Project)

clipboard.png

經過 Project 能夠創建一個項目,而項目能夠將項目內的文件信息統一管理,配合版本控制工具在工程化中很是好用。

5. 插件系統(Addin)

clipboard.png

經過 rstudioapi 和 miniUI 能夠簡單製做RStudio插件而且添加快捷鍵調用,常見的一些插件:

  • formatR 能夠規範化代碼書寫,包括自定義換行、縮進等等

  • 好比經過liftr能夠將Rmd文檔直接做Dockerfile打包

  • LaTex公式轉換器,則幫咱們提供一個自動的LaTex生成器

  • rOpensci則提供了一個Citation的查詢引用功能,等等。

clipboard.png

6. Shell終端

經過Tool菜單能夠直接進入Shell命令行,在Web服務器上至關於能夠直接進入Web Console,這意味着咱們能夠利用RStudio直接遠程操做服務器的shell,在一些特定的場合下很是好用,這一點深受運維同窗的青睞。

7. 代碼調試

R中自帶的異常機制並不能使人滿意,RStudio在這一點上補足了R自己的一些缺陷,咱們能夠簡單的經過斷點和traceback看到程序調用棧的狀況。

8. 性能調優

clipboard.png

經過profile模塊,咱們能夠直接打印整個程序的火焰圖,查看到程序的運行狀況和瓶頸,在工程階段很是管用。

  • 須要安裝 devtools::install_github("rstudio/profvis")安裝必要的包

9. 文檔搜索

經過 ctrl + . 能夠快速檢索函數名稱和文件名稱,
經過 ctrl + f(find) 能夠局部搜索文檔,
經過 ctrl + shift + f(find) 能夠全局搜索文檔。

10. 包管理工具

clipboard.png

  1. devtools::install_github() 直接能夠安裝github上的R包,大部分狀況把rstudio相關的包安裝好就能夠了。

  2. 在菜單欄中能夠選擇默認的鏡像源,國內能夠選擇清華的TUNA,且RStudio默認提供了全球的CDN加速。

  3. 通常狀況能夠直接經過install.packages() 直接安裝CRAN(默認)上的R包

  4. 利用packrat::init()能夠作包管理的虛擬化,相似於Python中的Virtualenv,結合容器技術能夠更好地發佈代碼。

clipboard.png

這裏也能夠不用命令行的方式來直接指定安裝的方式,能夠從壓縮包或者CRAN上安裝包到特定目錄下

11. 多行編輯

按住alt鍵後鼠標會自動變成一個十字,此時選中文本能夠進入多行編輯狀態,很是實用的一個功能(相似Atom裏面也是alt + 方向鍵)
固然咱們也能夠按住 ctrl + alt後經過鼠標點選,實現單獨的多行編輯。

12. 代碼提煉

因爲數據的探索性,大多數時候,咱們並不能很快就明確咱們的函數應該寫成什麼樣,函數的輸入輸出都並不太肯定。在肯定了一段代碼後,咱們能夠利用 Extract Function 的功能把代碼快速提煉出來,加強代碼的複用性。

clipboard.png

13. 權限管理

clipboard.png

依賴於操做系統的用戶管理,就能夠輕鬆實現RStudio的登錄權限管理。

SWOT分析

優勢與機會

  1. 開源、方便、強大、私有、安全(相似於MatLab Web開源版),照顧到了數據科學領域的方方面面,並且深得DevOps喜好。

  2. 拓展性強,用戶能夠自定義插件或者R包來擴展編輯器的功能。

  3. 強大的包管理工具減小了90%的包管理工做(剩下大多數是gcc和jdk的問題,須要經過shell裏的yum/apt-get/brew去解決)。

  4. 圖形界面很是強大,對於不熟悉命令行的使用者學習成本很是低。

缺點和威脅

  1. 不過對於Java或者C++這樣的工程師來講並無太多的吸引力,由於Eclipse和VisualStudio基本能夠知足他們的特殊需求。

  2. 編輯器的運行性能有待提升,若是跑一個沒有通過優化的算法,引入不當的計算複雜度時可能致使Seesion卡死。

總結

  1. 使用RStudio,處理數據時必定記得先處理sample數據,而不是一開始就作全量數據。在跑全量數據時,最好使用terminal來運行代碼,避免在Web Console中直接運行,帶來沒必要要的麻煩。

  2. 編譯PDF須要額外安裝latex套件,中文的問題比較麻煩,須要特殊解決;不過也能夠經過html的保存爲PDF形式打印輸出(HTML的樣式能夠經過CSS模板調整)。

  3. 若是結合Airflow使用,經過GitDags文件夾中的.py文件作相應的版本控制,經過RStudio直接在Web端編輯就是一個很是方便的應用。

  4. 相對而言,RStudio須要配置的選項還比較少,通常須要配置的選項均可以經過圖形化界面完成。

  5. 建議若是隻是做爲編輯器使用,RStudio不要安裝Docker版本,由於Docker版本無權限直接訪問宿主的磁盤(能夠經過掛載曲線救國),在多人協同的時候會產生一些麻煩。

  6. 在編輯器中,想要指定Python引擎來運行Python腳本能夠這樣作:(一般配合virtualenv)

#coding=utf-8
#/your/path/python
#e.g. /home/financeR/bin/python

Jupyter

除了RStudio,Jupyter則是個人另外一個經常使用的編輯器。

模塊設計

1. 文件管理

2. 代碼編輯

3. 集羣管理

代碼編譯與文檔預覽

新建notebook時能夠經過一些第三方組件配置來支持多語言的編譯(折騰起來有點麻煩)

功能設計

經過 iPython 中的 %% 操做符,能夠拓展許多Jupyter的功能,最基礎的就是%%bash操做符了,後續許多操做都依賴於它。

1. 版本控制

%%bash
git add .

須要經過shell腳原本搞定。

2. 文檔預覽

支持多種文件格式輸出,PDF依然須要安裝LaTex相關套件稍微麻煩點。主要是技術文檔類型的輸出,word仍是須要用命令行的pandoc來輸出,slide也是須要經過以下命令完成
ipython nbconvert your_slides.ipynb --to slides

多格式的文檔轉化依然是依賴於pandoc這個輪子,技術文檔的輸出主要依賴於sphinx。

3. 大數據處理(Spark)

4. 項目管理(Virtualenv)

%% bash
virtualenv your_dir

依然經過命令行的方式能夠建立一個徹底隔離的項目。

5. 插件系統

經過生寫部分js和Python的方式也能夠爲系統添加插件。暫時沒有相似於miniUI的方式來實現。

python3 -m IPython  notebook --notebook-dir=~ --NotebookApp.server_extensions="['extensions.server_ext']"

6. Shell終端

clipboard.png

若是不知足於%%bash 也能夠直接切入web terminal

7. 代碼調試

Python自帶的代碼調試能力就已經很給力,很少贅述。

8. 性能調優

經過 profile包,咱們也能夠對Python進行性能調優。
經過graphViz也能夠排查性能問題。

9. 文檔搜索

參考Reddit上的討論

clipboard.png

咱們依然能夠經過下面命令解決

%%bash
find /|grep somethin

10. 包管理工具

clipboard.png

經過%%bash操做符其實能夠任意拓展執行shell腳本,包管理依然能夠用shell中的pip或者conda

若是要指定pip版本、源等等操做須要本身寫命令或者修改配置文件,沒有圖形化界面稍微麻煩點。

11. 多行編輯

一樣也是按住alt鍵的老套路。

13. 權限管理

經過 jupyter hub 能夠支持更增強大的權限管理方式。

SWOT分析

優勢和機會

  1. 主要功能的拓展經過 %%bash 來完成,直接嫁接命令行的功能,對於熟悉shell腳本的程序員來講很是方便。

  2. 設計簡潔優雅,儘可能不重複造輪子,在組件開發上延續了Pythonic哲學,底層代碼盡收眼底,擴展性優秀。

  3. 代碼塊管理使得程序總體上有了很好的隔離性。

  4. 內核切換很是方便,'%' 魔法很是好用。

缺點和威脅

  1. 缺少豐富直觀的圖形化界面,大多數任務須要更多的代碼來實現,學習負擔比較大。

  2. 在拓展系統功能方面對使用者要求比較高,須要自定義許多配置文件和組件安裝。

  3. 缺少足夠快速的文檔檢索能力和工做區劃分功能。

  4. 須要本身折騰的地方太多,比較耗費精力。

  5. 後起之秀Zeppelin有一統江湖的趨勢。

總結

  1. 在更多的時候,我會選擇在Jupyter裏面調試一些簡單的語法問題、requests請求API,或者集成一些markdown來製做交互式文檔。在真正工程化階段則直接使用vitmux進行開發, 由於代碼塊雖然有隔離性,不過相對於沉浸式編程仍是效率低了一點。

  2. 利用iPython中的%history能夠實現歷史命令的查看。在RStudio中則是history()或者直接經過界面查詢(還支持歷史命令的搜索和導出)

參考資料

更優閱讀體驗可直接訪問原文地址:https://segmentfault.com/a/11...
做爲分享主義者(sharism),本人全部互聯網發佈的圖文均聽從CC版權,轉載請保留做者信息並註明做者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,若是涉及源代碼請註明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio商業使用請聯繫做者。

相關文章
相關標籤/搜索