一、引言


Jupyter(以前叫 iPython)已经被数据科学家,研究人员和分析师广泛采用。Jupyter 的笔记本用户界面可以将可执行代码与叙述性文本,方程式,交互式可视化和图像混合在一起,以加强团队合作,并推动可重复的研究和培训向前发展。Jupyter 开始于 Python 语言,现在拥有50种不同语言的内核,而 IRKernel 是用于 Jupyter 的本地 R 内核。


数据科学家、研究人员和分析师使用 conda  软件包管理器来安装和组织项目依赖。通过 conda,他们可以轻松地构建和共享元数据包,这些元数据包是可下载的软件包。conda 可以在 Linux, OS X, 和 Windows 下工作,并且是与语言无关的,因此我们可以将它用于任何编程语言以及依赖于多种语言的项目。


接下来,让我们使用 conda 和 Jupyter 在 R 中开始一个数据科学项目。




二、安装


1. 创建"R Essentials"


Anaconda 团队已经创建了一个 "R Essentials" 把 IRKernel 和数据科学分析中最常用的超过 80 个 R 包捆绑在了一起,这些包包括:dplyr、shiny、ggplot2、tidyr、caretnnet


"R Essentials" 下载需要通过 conda 命令。Miniconda 已经包含了 conda、Python 以及其他的一些必须包,而 Anaconda 则包含了 miniconda 的所有东西,以及用于科学,数学,工程和数据分析的 200 多个最受欢迎的 Python 软件包。用户可以选择安装 Anaconda 一次安装所有的包;也可以先安装 Miniconda ,然后再使用 conda 命令安装他们需要的包,包括在 Anaconda 中的任何包。


如果你已经拥有了 conda,你可以为当前环境安装 "R Essentials":



conda install -c r r-essentials


或者创建一个专门用于 "R essentials" 的新环境:



conda create -n my-r-env -c r r-essentials




2. 常见问题与解决


① conda 安装完 r-essentials,命令行下启动 R 出错:



$ R
......

 *** caught segfault ***
address 0x20, cause 'memory not mapped'

Traceback:
 1: dyn.load(libPath)

......

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection: 
Selection: 
Warning message:
In doTryCatch(return(expr), name, parentenv, handler) :
  unable to load shared object '/usr/local/software/anaconda3/lib/R/modules//R_X11.so':
  libXdmcp.so.6: cannot open shared object file: No such file or directory
> quit()


解决方法:

conda install -c clinicalgraphics libxdmcp




三、在 Jupyter Notebook 中使用 R


Jupyter 提供了一个强大的笔记本交互界面来写你的分析,并与同行分享。打开一个 shell 并运行下面这个命令来启动浏览器中的 Jupyter 笔记本界面:

jupyter notebook


创建一个新的 R 笔记:



接下来,你就可以在 notebook cells 中编写和运行你的 R 代码了。



1. Jupyter Notebook R 笔记示例



In [1]: library(dplyr)



In [2]: iris
 
Out[2]:
    Sepal.Length    Sepal.Width     Petal.Length    Petal.Width     Species
1            5.1            3.5              1.4            0.2      setosa
2            4.9              3              1.4            0.2      setosa
...



In [3]: iris %>%
 group_by(Species) %>%
 summarise(Sepal.Width.Avg = mean(Sepal.Width)) %>%
 arrange(Sepal.Width.Avg)
 
Out [3]:
        Species     Sepal.Width.Avg
1    versicolor                2.77
2     virginica               2.974
3        setosa               3.428



In [4]: library(ggplot2)



In [5]: ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) + geom_point(size=3)



2. 转换笔记为幻灯片


Jupyter 可以把笔记转换为在线幻灯片,供讲座和教程使用。


要将笔记本转换为 reveal.js 演示文稿,请将 "单元格工具栏(Cell Toolbar)" 设置为“幻灯片放映(Slideshow”)”:


将单元格(cells)组织成幻灯片(slides)和副幻灯片(subslides):


执行转化命令:


jupyter nbconvert my_r_notebook.ipynb --to slides --post serve


最后,打开浏览器展示幻灯片:




3. 常见问题与解决


① jupyter notebook 中 R 画图,不显示文字、标签。


解决方法:

# This is because the fonts are missing in anaconda, what we need is to install it:
conda install -c anaconda fonts-anaconda


参考:https://github.com/ContinuumIO/anaconda-issues/issues/7455



四、创建自定义 R 包


出于用户使用方便考虑,Anaconda 已经在 “R Essentials” 中打包了一些最常用的数据科学 R 包。使用 conda metapackage 命令创建您自己的 R 软件包以便与同行共享也非常容易。例如,提供一个只包含在我们的示例笔记本中使用的库,名字为 custom-r-bundle 的下载程序,只需创建 metapackage 即可:

conda metapackage custom-r-bundle 0.1.0 --dependencies r-irkernel jupyter r-ggplot2 r-dplyr --summary "My custom R bundle"


把我们自定义的 R 包上传到 Anaconda.org 与同事分享:

conda install anaconda-client
anaconda login
anaconda upload path/to/custom-r-bundle-0.1.0-0.tar.bz2


现在,任何人都可以通过运行下面的命令来获取所有这些包和依赖关系:

conda install -c <your anaconda.org username> custom-r-bundle



五、总结


本博客文章探讨 Jupyter 如何为 R 用户提供一个漂亮的笔记本界面来进行开发,叙述和分享 R 中的数据科学项目。同样的,对于开始,打包和跟踪必要的依赖关系以便用 conda 和 "R essentials" 复制分析和结果,也是非常简单的。



六、参考资料


  1. https://www.anaconda.com/developer-blog/jupyter-and-conda-r/