深入对比数据科学工具箱:Python和R 的 Web 编辑器

概述

工欲善其事必先利其器,如果现在要评选数据科学中最好用的Web 编辑器(注意一定是可以通过Web访问的),RStudio和Jupyter一定是角逐的最大热门,正确使用编辑器可以很大地提升我们的工作效率。本文将讲解一些RStudio和Jupyter的使用技巧。

RStudio

模块设计

RStudio编辑器整体被分为明显的四个模块,包括:

  1. 文本编辑区(写代码的地方)
  2. 控制台(跑代码的地方)
  3. 文档管理区(查看帮助、绘图预览、文件管理等等)
  4. 状态管理区(环境变量、版本控制、Spark链接管理等等)

我们可以根据自己的喜好在视图View菜单栏选项卡中选择各个pane的布局方式。
另外也可以通过快捷键快速在各个pane之间切换。
默认的快捷键(可以通过 atl + shift + k 查看更多快捷键)是:

  • ctrl + 1 :切换到文本编辑区
  • ctrl + 2 :切换到控制台(console)
  • ctrl + 3 :帮助文档
  • ctrl + 4 :历史命令
  • ctrl + 5 :文件夹


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)

集成的Git/SVN的版本控制,Diff、commit、pull等等操作都非常方便。通常用Git(利用分支)来管理代码,而SVN(利用文件夹)则用来管理文档。

2. 文档预览

(演讲Slides/PDF论文/HTML技术文档/WORD产品文档/Rnotebook试验文档)


参考前文 文档定义应用:数据科学的文档革命我们可以知道,
通过Rmarkdown、knitr、slidify、pandoc等等组件可以完美输出各式文档,满足不同场景下的编辑任务。(通过快捷键ctrl+shift+k(knitr)可以即时预览)

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

3. 大数据处理(Spark)

通过Sparklyrsparklyr::spark_install(version = 2.0.0)可以一键安装指定版本的Spark所需软件,通过Spark连接管理界面控制连接的状态,利用dplyr的api直接操作spark。

4. 项目管理(Build/Project)

通过 Project 可以建立一个项目,而项目可以将项目内的文件信息统一管理,配合版本控制工具在工程化中非常好用。

5. 插件系统(Addin)

通过 rstudioapi 和 miniUI 可以简单制作RStudio插件并且添加快捷键调用,常见的一些插件:

  • formatR 可以规范化代码书写,包括自定义换行、缩进等等
  • 比如通过liftr可以将Rmd文档直接作Dockerfile打包
  • LaTex公式转换器,则帮我们提供一个自动的LaTex生成器
  • rOpensci则提供了一个Citation的查询引用功能,等等。

6. Shell终端

通过Tool菜单可以直接进入Shell命令行,在Web服务器上相当于可以直接进入Web Console,这意味着我们可以利用RStudio直接远程操作服务器的shell,在一些特定的场合下非常好用,这一点深受运维同学的青睐。

7. 代码调试

R中自带的异常机制并不能令人满意,RStudio在这一点上补足了R本身的一些缺陷,我们可以简单的通过断点和traceback看到程序调用栈的情况。

8. 性能调优

通过profile模块,我们可以直接打印整个程序的火焰图,查看到程序的运行情况和瓶颈,在工程阶段非常管用。

  • 需要安装 devtools::install_github("rstudio/profvis")安装必要的包

9. 文档搜索

通过 ctrl + . 可以快速检索函数名称和文件名称,
通过 ctrl + f(find) 可以局部搜索文档,
通过 ctrl + shift + f(find) 可以全局搜索文档。

10. 包管理工具

  1. devtools::install_github() 直接可以安装github上的R包,大部分情况把rstudio相关的包安装好就可以了。
  2. 在菜单栏中可以选择默认的镜像源,国内可以选择清华的TUNA,且RStudio默认提供了全球的CDN加速。
  3. 一般情况可以直接通过install.packages() 直接安装CRAN(默认)上的R包
  4. 利用packrat::init()可以做包管理的虚拟化,类似于Python中的Virtualenv,结合容器技术可以更好地发布代码。

这里也可以不用命令行的方式来直接指定安装的方式,可以从压缩包或者CRAN上安装包到特定目录下

11. 多行编辑

按住alt键后鼠标会自动变成一个十字,此时选中文本可以进入多行编辑状态,非常实用的一个功能(类似Atom里面也是alt + 方向键)
当然我们也可以按住 ctrl + alt后通过鼠标点选,实现单独的多行编辑。

12. 代码提炼

由于数据的探索性,大多数时候,我们并不能很快就明确我们的函数应该写成什么样,函数的输入输出都并不太确定。在确定了一段代码后,我们可以利用 Extract Function 的功能把代码快速提炼出来,增强代码的复用性。

13. 权限管理

依赖于操作系统的用户管理,就可以轻松实现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)

Jupyter

除了RStudio,Jupyter则是我的另一个常用的编辑器。

模块设计

1. 文件管理

2. 代码编辑

3. 集群管理

代码编译与文档预览

新建notebook时可以通过一些第三方组件配置来支持多语言的编译(折腾起来有点麻烦)

功能设计

通过 iPython 中的 %% 操作符,可以拓展许多Jupyter的功能,最基础的就是%%bash操作符了,后续许多操作都依赖于它。

1. 版本控制

需要通过shell脚本来搞定。

2. 文档预览

支持多种文件格式输出,PDF依然需要安装LaTex相关套件稍微麻烦点。主要是技术文档类型的输出,word还是需要用命令行的pandoc来输出,slide也是需要通过如下命令完成
ipython nbconvert your_slides.ipynb --to slides

多格式的文档转化依然是依赖于pandoc这个轮子,技术文档的输出主要依赖于sphinx。

3. 大数据处理(Spark)

4. 项目管理(Virtualenv)

依然通过命令行的方式可以创建一个完全隔离的项目。

5. 插件系统

通过生写部分js和Python的方式也可以为系统添加插件。暂时没有类似于miniUI的方式来实现。

6. Shell终端

如果不满足于%%bash 也可以直接切入web terminal

7. 代码调试

Python自带的代码调试能力就已经很给力,不多赘述。

8. 性能调优

通过 profile包,我们也可以对Python进行性能调优。
通过graphViz也可以排查性能问题。

9. 文档搜索

参考Reddit上的讨论

我们依然可以通过下面命令解决

10. 包管理工具

通过%%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()或者直接通过界面查询(还支持历史命令的搜索和导出)

参考资料

1 3 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部