概述
工欲善其事必先利其器,如果现在要评选数据科学中最好用的Web 编辑器(注意一定是可以通过Web访问的),RStudio和Jupyter一定是角逐的最大热门,正确使用编辑器可以很大地提升我们的工作效率。本文将讲解一些RStudio和Jupyter的使用技巧。
RStudio
模块设计
RStudio编辑器整体被分为明显的四个模块,包括:
文本编辑区(写代码的地方)
控制台(跑代码的地方)
文档管理区(查看帮助、绘图预览、文件管理等等)
状态管理区(环境变量、版本控制、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)
通过Sparklyr
的sparklyr::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. 包管理工具
devtools::install_github() 直接可以安装github上的R包,大部分情况把rstudio相关的包安装好就可以了。
在菜单栏中可以选择默认的镜像源,国内可以选择清华的TUNA,且RStudio默认提供了全球的CDN加速。
一般情况可以直接通过install.packages() 直接安装CRAN(默认)上的R包
利用packrat::init()可以做包管理的虚拟化,类似于Python中的Virtualenv,结合容器技术可以更好地发布代码。
这里也可以不用命令行的方式来直接指定安装的方式,可以从压缩包或者CRAN上安装包到特定目录下
11. 多行编辑
按住alt键
后鼠标会自动变成一个十字,此时选中文本可以进入多行编辑状态,非常实用的一个功能(类似Atom里面也是alt + 方向键)
当然我们也可以按住 ctrl + alt
后通过鼠标点选,实现单独的多行编辑。
12. 代码提炼
由于数据的探索性,大多数时候,我们并不能很快就明确我们的函数应该写成什么样,函数的输入输出都并不太确定。在确定了一段代码后,我们可以利用 Extract Function 的功能把代码快速提炼出来,增强代码的复用性。
13. 权限管理
依赖于操作系统的用户管理,就可以轻松实现RStudio的登陆权限管理。
SWOT分析
优点与机会
开源、方便、强大、私有、安全(类似于MatLab Web开源版),照顾到了数据科学领域的方方面面,而且深得DevOps喜爱。
拓展性强,用户可以自定义插件或者R包来扩展编辑器的功能。
强大的包管理工具减少了90%的包管理工作(剩下大多数是gcc和jdk的问题,需要通过shell里的yum/apt-get/brew去解决)。
图形界面非常强大,对于不熟悉命令行的使用者学习成本非常低。
缺点和威胁
不过对于Java或者C++这样的工程师来说并没有太多的吸引力,因为Eclipse和VisualStudio基本可以满足他们的特殊需求。
编辑器的运行性能有待提高,如果跑一个没有经过优化的算法,引入不当的计算复杂度时可能导致Seesion卡死。
总结
使用RStudio,处理数据时一定记得先处理sample数据,而不是一开始就做全量数据。在跑全量数据时,最好使用terminal来运行代码,避免在Web Console中直接运行,带来不必要的麻烦。
编译PDF需要额外安装latex套件,中文的问题比较麻烦,需要特殊解决;不过也可以通过html的保存为PDF形式打印输出(HTML的样式可以通过CSS模板调整)。
如果结合
Airflow
使用,通过Git
对Dags文件夹
中的.py
文件做相应的版本控制,通过RStudio
直接在Web端编辑就是一个非常方便的应用。相对而言,RStudio需要配置的选项还比较少,一般需要配置的选项都可以通过图形化界面完成。
建议如果只是作为编辑器使用,RStudio不要安装Docker版本,因为Docker版本无权限直接访问宿主的磁盘(可以通过挂载曲线救国),在多人协同的时候会产生一些麻烦。
在编辑器中,想要指定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终端
如果不满足于%%bash
也可以直接切入web terminal
7. 代码调试
Python自带的代码调试能力就已经很给力,不多赘述。
8. 性能调优
通过 profile包,我们也可以对Python进行性能调优。
通过graphViz也可以排查性能问题。
9. 文档搜索
我们依然可以通过下面命令解决
%%bash
find /|grep somethin
10. 包管理工具
通过%%bash
操作符其实可以任意拓展执行shell脚本,包管理依然可以用shell中的pip或者conda
如果要指定pip版本、源等等操作需要自己写命令或者修改配置文件,没有图形化界面稍微麻烦点。
11. 多行编辑
同样也是按住alt
键的老套路。
13. 权限管理
通过 jupyter hub 可以支持更加强大的权限管理方式。
SWOT分析
优点和机会
主要功能的拓展通过
%%bash
来完成,直接嫁接命令行的功能,对于熟悉shell脚本的程序员来说非常方便。设计简洁优雅,尽量不重复造轮子,在组件开发上延续了Pythonic哲学,底层代码一览无余,扩展性优秀。
代码块管理使得程序整体上有了很好的隔离性。
内核切换非常方便,'%' 魔法非常好用。
缺点和威胁
缺乏丰富直观的图形化界面,大多数任务需要更多的代码来实现,学习负担比较大。
在拓展系统功能方面对使用者要求比较高,需要自定义许多配置文件和组件安装。
缺乏足够快速的文档检索能力和工作区划分功能。
需要自己折腾的地方太多,比较耗费精力。
后起之秀Zeppelin有一统江湖的趋势。
总结
在更多的时候,我会选择在Jupyter里面调试一些简单的语法问题、requests请求API,或者集成一些markdown来制作交互式文档。在真正工程化阶段则直接使用
vi
和tmux
进行开发, 因为代码块虽然有隔离性,不过相对于沉浸式编程还是效率低了一点。利用iPython中的
%history
可以实现历史命令的查看。在RStudio中则是history()
或者直接通过界面查询(还支持历史命令的搜索和导出)
参考资料
更优阅读体验可直接访问原文地址:https://segmentfault.com/a/11...
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。