[原]深刻对比数据科学工具箱: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商业使用请联系做者。

相关文章
相关标签/搜索