摘要:概述工欲善其事必先利其器,如果現(xiàn)在要評選數(shù)據(jù)科學(xué)中最好用的編輯器注意一定是可以通過訪問的,和一定是角逐的最大熱門,正確使用編輯器可以很大地提升我們的工作效率。
概述
工欲善其事必先利其器,如果現(xiàn)在要評選數(shù)據(jù)科學(xué)中最好用的Web 編輯器(注意一定是可以通過Web訪問的),RStudio和Jupyter一定是角逐的最大熱門,正確使用編輯器可以很大地提升我們的工作效率。本文將講解一些RStudio和Jupyter的使用技巧。
RStudio 模塊設(shè)計RStudio編輯器整體被分為明顯的四個模塊,包括:
文本編輯區(qū)(寫代碼的地方)
控制臺(跑代碼的地方)
文檔管理區(qū)(查看幫助、繪圖預(yù)覽、文件管理等等)
狀態(tài)管理區(qū)(環(huán)境變量、版本控制、Spark鏈接管理等等)
我們可以根據(jù)自己的喜好在視圖View菜單欄選項卡中選擇各個pane的布局方式。
另外也可以通過快捷鍵快速在各個pane之間切換。
默認(rèn)的快捷鍵(可以通過 atl + shift + k 查看更多快捷鍵)是:
ctrl + 1 :切換到文本編輯區(qū)
ctrl + 2 :切換到控制臺(console)
ctrl + 3 :幫助文檔
ctrl + 4 :歷史命令
ctrl + 5 :文件夾
...
shift + ctrl + 《N》 可以放大上述區(qū)域。比如 shift + ctrl + 1 放大編輯區(qū),放大之后我們就可以專注于某一項特定的任務(wù)上。
在文本編輯器中,我們支持C++、Shell、Python、HTML、SQL等語言的代碼高亮以及編譯。(暫時不支持Java)
通過 快捷鍵 ctrl + shift + s (source) 即可立即編譯代碼。
如果是R,通過 system2("sh","some.sh",stdout=TRUE)函數(shù)即可捕獲腳本的輸出值。
如果是 頁面或者文檔則通過 ctrl + shift + k (knitr) 即可立即預(yù)覽。
功能設(shè)計 1. 版本控制(Git/SVN)集成的Git/SVN的版本控制,Diff、commit、pull等等操作都非常方便。通常用Git(利用分支)來管理代碼,而SVN(利用文件夾)則用來管理文檔。
2. 文檔預(yù)覽(演講Slides/PDF論文/HTML技術(shù)文檔/WORD產(chǎn)品文檔/Rnotebook試驗文檔)
參考前文 文檔定義應(yīng)用:數(shù)據(jù)科學(xué)的文檔革命我們可以知道,
通過Rmarkdown、knitr、slidify、pandoc等等組件可以完美輸出各式文檔,滿足不同場景下的編輯任務(wù)。(通過快捷鍵ctrl+shift+k(knitr)可以即時預(yù)覽)
需要安裝 devtools::install_github("rstudio/rmarkdown")安裝若干必要的包
3. 大數(shù)據(jù)處理(Spark)通過Sparklyr的sparklyr::spark_install(version = 2.0.0)可以一鍵安裝指定版本的Spark所需軟件,通過Spark連接管理界面控制連接的狀態(tài),利用dplyr的api直接操作spark。
4. 項目管理(Build/Project)通過 Project 可以建立一個項目,而項目可以將項目內(nèi)的文件信息統(tǒng)一管理,配合版本控制工具在工程化中非常好用。
5. 插件系統(tǒng)(Addin)通過 rstudioapi 和 miniUI 可以簡單制作RStudio插件并且添加快捷鍵調(diào)用,常見的一些插件:
formatR 可以規(guī)范化代碼書寫,包括自定義換行、縮進(jìn)等等
比如通過liftr可以將Rmd文檔直接作Dockerfile打包
LaTex公式轉(zhuǎn)換器,則幫我們提供一個自動的LaTex生成器
rOpensci則提供了一個Citation的查詢引用功能,等等。
6. Shell終端通過Tool菜單可以直接進(jìn)入Shell命令行,在Web服務(wù)器上相當(dāng)于可以直接進(jìn)入Web Console,這意味著我們可以利用RStudio直接遠(yuǎn)程操作服務(wù)器的shell,在一些特定的場合下非常好用,這一點深受運維同學(xué)的青睞。
7. 代碼調(diào)試R中自帶的異常機(jī)制并不能令人滿意,RStudio在這一點上補足了R本身的一些缺陷,我們可以簡單的通過斷點和traceback看到程序調(diào)用棧的情況。
8. 性能調(diào)優(yōu)通過profile模塊,我們可以直接打印整個程序的火焰圖,查看到程序的運行情況和瓶頸,在工程階段非常管用。
需要安裝 devtools::install_github("rstudio/profvis")安裝必要的包
9. 文檔搜索通過 ctrl + . 可以快速檢索函數(shù)名稱和文件名稱,
通過 ctrl + f(find) 可以局部搜索文檔,
通過 ctrl + shift + f(find) 可以全局搜索文檔。
devtools::install_github() 直接可以安裝github上的R包,大部分情況把rstudio相關(guān)的包安裝好就可以了。
在菜單欄中可以選擇默認(rèn)的鏡像源,國內(nèi)可以選擇清華的TUNA,且RStudio默認(rèn)提供了全球的CDN加速。
一般情況可以直接通過install.packages() 直接安裝CRAN(默認(rèn))上的R包
利用packrat::init()可以做包管理的虛擬化,類似于Python中的Virtualenv,結(jié)合容器技術(shù)可以更好地發(fā)布代碼。
這里也可以不用命令行的方式來直接指定安裝的方式,可以從壓縮包或者CRAN上安裝包到特定目錄下
11. 多行編輯按住alt鍵后鼠標(biāo)會自動變成一個十字,此時選中文本可以進(jìn)入多行編輯狀態(tài),非常實用的一個功能(類似Atom里面也是alt + 方向鍵)
當(dāng)然我們也可以按住 ctrl + alt后通過鼠標(biāo)點選,實現(xiàn)多帶帶的多行編輯。
由于數(shù)據(jù)的探索性,大多數(shù)時候,我們并不能很快就明確我們的函數(shù)應(yīng)該寫成什么樣,函數(shù)的輸入輸出都并不太確定。在確定了一段代碼后,我們可以利用 Extract Function 的功能把代碼快速提煉出來,增強(qiáng)代碼的復(fù)用性。
13. 權(quán)限管理依賴于操作系統(tǒng)的用戶管理,就可以輕松實現(xiàn)RStudio的登陸權(quán)限管理。
SWOT分析 優(yōu)點與機(jī)會開源、方便、強(qiáng)大、私有、安全(類似于MatLab Web開源版),照顧到了數(shù)據(jù)科學(xué)領(lǐng)域的方方面面,而且深得DevOps喜愛。
拓展性強(qiáng),用戶可以自定義插件或者R包來擴(kuò)展編輯器的功能。
強(qiáng)大的包管理工具減少了90%的包管理工作(剩下大多數(shù)是gcc和jdk的問題,需要通過shell里的yum/apt-get/brew去解決)。
圖形界面非常強(qiáng)大,對于不熟悉命令行的使用者學(xué)習(xí)成本非常低。
缺點和威脅不過對于Java或者C++這樣的工程師來說并沒有太多的吸引力,因為Eclipse和VisualStudio基本可以滿足他們的特殊需求。
編輯器的運行性能有待提高,如果跑一個沒有經(jīng)過優(yōu)化的算法,引入不當(dāng)?shù)挠嬎銖?fù)雜度時可能導(dǎo)致Seesion卡死。
總結(jié)使用RStudio,處理數(shù)據(jù)時一定記得先處理sample數(shù)據(jù),而不是一開始就做全量數(shù)據(jù)。在跑全量數(shù)據(jù)時,最好使用terminal來運行代碼,避免在Web Console中直接運行,帶來不必要的麻煩。
編譯PDF需要額外安裝latex套件,中文的問題比較麻煩,需要特殊解決;不過也可以通過html的保存為PDF形式打印輸出(HTML的樣式可以通過CSS模板調(diào)整)。
如果結(jié)合Airflow使用,通過Git對Dags文件夾中的.py文件做相應(yīng)的版本控制,通過RStudio直接在Web端編輯就是一個非常方便的應(yīng)用。
相對而言,RStudio需要配置的選項還比較少,一般需要配置的選項都可以通過圖形化界面完成。
建議如果只是作為編輯器使用,RStudio不要安裝Docker版本,因為Docker版本無權(quán)限直接訪問宿主的磁盤(可以通過掛載曲線救國),在多人協(xié)同的時候會產(chǎn)生一些麻煩。
在編輯器中,想要指定Python引擎來運行Python腳本可以這樣做:(通常配合virtualenv)
</>復(fù)制代碼
#coding=utf-8
#/your/path/python
#e.g. /home/financeR/bin/python
Jupyter
除了RStudio,Jupyter則是我的另一個常用的編輯器。
模塊設(shè)計 1. 文件管理 2. 代碼編輯 3. 集群管理 代碼編譯與文檔預(yù)覽新建notebook時可以通過一些第三方組件配置來支持多語言的編譯(折騰起來有點麻煩)
功能設(shè)計通過 iPython 中的 %% 操作符,可以拓展許多Jupyter的功能,最基礎(chǔ)的就是%%bash操作符了,后續(xù)許多操作都依賴于它。
1. 版本控制</>復(fù)制代碼
%%bash
git add .
需要通過shell腳本來搞定。
2. 文檔預(yù)覽支持多種文件格式輸出,PDF依然需要安裝LaTex相關(guān)套件稍微麻煩點。主要是技術(shù)文檔類型的輸出,word還是需要用命令行的pandoc來輸出,slide也是需要通過如下命令完成
ipython nbconvert your_slides.ipynb --to slides
多格式的文檔轉(zhuǎn)化依然是依賴于pandoc這個輪子,技術(shù)文檔的輸出主要依賴于sphinx。
3. 大數(shù)據(jù)處理(Spark) 4. 項目管理(Virtualenv)</>復(fù)制代碼
%% bash
virtualenv your_dir
依然通過命令行的方式可以創(chuàng)建一個完全隔離的項目。
5. 插件系統(tǒng)通過生寫部分js和Python的方式也可以為系統(tǒng)添加插件。暫時沒有類似于miniUI的方式來實現(xiàn)。
</>復(fù)制代碼
python3 -m IPython notebook --notebook-dir=~ --NotebookApp.server_extensions="["extensions.server_ext"]"
6. Shell終端
如果不滿足于%%bash 也可以直接切入web terminal
7. 代碼調(diào)試Python自帶的代碼調(diào)試能力就已經(jīng)很給力,不多贅述。
8. 性能調(diào)優(yōu)通過 profile包,我們也可以對Python進(jìn)行性能調(diào)優(yōu)。
通過graphViz也可以排查性能問題。
參考Reddit上的討論
我們依然可以通過下面命令解決
</>復(fù)制代碼
%%bash
find /|grep somethin
10. 包管理工具
通過%%bash操作符其實可以任意拓展執(zhí)行shell腳本,包管理依然可以用shell中的pip或者conda
如果要指定pip版本、源等等操作需要自己寫命令或者修改配置文件,沒有圖形化界面稍微麻煩點。
11. 多行編輯同樣也是按住alt鍵的老套路。
13. 權(quán)限管理通過 jupyter hub 可以支持更加強(qiáng)大的權(quán)限管理方式。
SWOT分析 優(yōu)點和機(jī)會主要功能的拓展通過 %%bash 來完成,直接嫁接命令行的功能,對于熟悉shell腳本的程序員來說非常方便。
設(shè)計簡潔優(yōu)雅,盡量不重復(fù)造輪子,在組件開發(fā)上延續(xù)了Pythonic哲學(xué),底層代碼一覽無余,擴(kuò)展性優(yōu)秀。
代碼塊管理使得程序整體上有了很好的隔離性。
內(nèi)核切換非常方便,"%" 魔法非常好用。
缺點和威脅缺乏豐富直觀的圖形化界面,大多數(shù)任務(wù)需要更多的代碼來實現(xiàn),學(xué)習(xí)負(fù)擔(dān)比較大。
在拓展系統(tǒng)功能方面對使用者要求比較高,需要自定義許多配置文件和組件安裝。
缺乏足夠快速的文檔檢索能力和工作區(qū)劃分功能。
需要自己折騰的地方太多,比較耗費精力。
后起之秀Zeppelin有一統(tǒng)江湖的趨勢。
總結(jié)在更多的時候,我會選擇在Jupyter里面調(diào)試一些簡單的語法問題、requests請求API,或者集成一些markdown來制作交互式文檔。在真正工程化階段則直接使用vi和tmux進(jìn)行開發(fā), 因為代碼塊雖然有隔離性,不過相對于沉浸式編程還是效率低了一點。
利用iPython中的%history可以實現(xiàn)歷史命令的查看。在RStudio中則是history()或者直接通過界面查詢(還支持歷史命令的搜索和導(dǎo)出)
參考資料Jupyter 快捷鍵
Jupyter 文檔
RStudio 快捷鍵
Vim與Python真乃天作之合:打造強(qiáng)大的Python開發(fā)環(huán)境
</>復(fù)制代碼
更優(yōu)閱讀體驗可直接訪問原文地址:https://segmentfault.com/a/11...
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán),轉(zhuǎn)載請保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,如果涉及源代碼請注明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio
商業(yè)使用請聯(lián)系作者。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38099.html
摘要:概述在真實的數(shù)據(jù)科學(xué)世界里,我們會有兩個極端,一個是業(yè)務(wù),一個是工程。偏向業(yè)務(wù)的數(shù)據(jù)科學(xué)被稱為數(shù)據(jù)分析,也就是型數(shù)據(jù)科學(xué)。所以說,同時學(xué)會和這兩把刷子才是數(shù)據(jù)科學(xué)的王道。 showImg(https://segmentfault.com/img/bVAgki?w=980&h=596); 概述 在真實的數(shù)據(jù)科學(xué)世界里,我們會有兩個極端,一個是業(yè)務(wù),一個是工程。偏向業(yè)務(wù)的數(shù)據(jù)科學(xué)被稱為數(shù)據(jù)...
摘要:對于異常機(jī)制的合理運用是直接關(guān)系到碼農(nóng)飯碗的事情所以,本文將具體介紹一下和的異常處理機(jī)制,闡明二者在異常處理機(jī)制上的異同。下面將具體介紹二者的異常處理機(jī)制。 概述 showImg(https://segmentfault.com/img/remote/1460000006760426); 異常處理,是編程語言或計算機(jī)硬件里的一種機(jī)制,用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況(即超出程序正...
摘要:則在讀取數(shù)據(jù)時將兩個中文字段混淆成了一個字段,導(dǎo)致整個數(shù)據(jù)結(jié)構(gòu)錯亂。三條路子全軍覆沒,這讓我情何以堪,好在使用的經(jīng)驗頗豐,通過中文的轉(zhuǎn)換和切割就輕松解決了這個問題。 概述 showImg(https://segmentfault.com/img/bVylLL); 在現(xiàn)實場景中,由于數(shù)據(jù)來源的異構(gòu),數(shù)據(jù)源的格式往往是難以統(tǒng)一的,這就導(dǎo)致大量具有價值的數(shù)據(jù)通常是以非結(jié)構(gòu)化的形式聚合在一起的...
摘要:對于數(shù)據(jù)科學(xué)的研究可以說已經(jīng)是本文我將介紹如何以文檔定義應(yīng)用的方式成為數(shù)據(jù)科學(xué)中的標(biāo)準(zhǔn)交付。參考前文解密的數(shù)據(jù)科學(xué)部門如果構(gòu)建知識倉庫,作為一個謝大大的死忠,我很自然選擇了作為我文檔輸出的首選工具。 showImg(https://segmentfault.com/img/remote/1460000006760433?w=423&h=426); 概述 隨著近年來,Rstudio 通過...
摘要:另外一個我們同時使用兩種語言的原因是已有的統(tǒng)計學(xué)工具與包。對另一些為讀者寫數(shù)據(jù)科學(xué)工具的人來說他們從一開始就考慮了這些跨語言。和實際上是用實現(xiàn)的這是條阻力最小的路徑。無論是哪個贏得這場語言戰(zhàn)爭,和都將保持在數(shù)據(jù)科學(xué)屆的地位。 showImg(https://segmentfault.com/img/remote/1460000006762469); 概述 幾周前,我有幸在 Scipy ...
閱讀 3925·2021-11-24 09:38
閱讀 3107·2021-11-17 09:33
閱讀 3879·2021-11-10 11:48
閱讀 1245·2021-10-14 09:48
閱讀 3137·2019-08-30 13:14
閱讀 2555·2019-08-29 18:37
閱讀 3400·2019-08-29 12:38
閱讀 1423·2019-08-29 12:30