一、引言

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”:

  1. conda install -c r r-essentials

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

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

2. 常见问题与解决

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

  1. $ R
  2. ......
  3. *** caught segfault ***
  4. address 0x20, cause 'memory not mapped'
  5. Traceback:
  6. 1: dyn.load(libPath)
  7. ......
  8. Possible actions:
  9. 1: abort (with core dump, if enabled)
  10. 2: normal R exit
  11. 3: exit R without saving workspace
  12. 4: exit R saving workspace
  13. Selection:
  14. Selection:
  15. Warning message:
  16. In doTryCatch(return(expr), name, parentenv, handler) :
  17. unable to load shared object '/usr/local/software/anaconda3/lib/R/modules//R_X11.so':
  18. libXdmcp.so.6: cannot open shared object file: No such file or directory
  19. > quit()

解决方法:

  1. conda install -c clinicalgraphics libxdmcp

三、在 Jupyter Notebook 中使用 R

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

  1. jupyter notebook

创建一个新的 R 笔记:

使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图1

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

1. Jupyter Notebook R 笔记示例

  • 导入数据整理 R 包,dplyr:
  1. In [1]: library(dplyr)
  • 调用一个可用的数据集,如 iris
  1. In [2]: iris
  2. Out[2]:
  3. Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  4. 1 5.1 3.5 1.4 0.2 setosa
  5. 2 4.9 3 1.4 0.2 setosa
  6. ...
  • 计算物种的平均萼片宽度:
  1. In [3]: iris %>%
  2. group_by(Species) %>%
  3. summarise(Sepal.Width.Avg = mean(Sepal.Width)) %>%
  4. arrange(Sepal.Width.Avg)
  5. Out [3]:
  6. Species Sepal.Width.Avg
  7. 1 versicolor 2.77
  8. 2 virginica 2.974
  9. 3 setosa 3.428
  • 导入可视化 R 包 ggplot2:
  1. In [4]: library(ggplot2)
  • 绘图 Sepal.Width vs. Sepal.Length:
  1. In [5]: ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) + geom_point(size=3)

使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图2

2. 转换笔记为幻灯片

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

要将笔记本转换为 reveal.js 演示文稿,请将 “单元格工具栏(Cell Toolbar)” 设置为“幻灯片放映(Slideshow”)”:
使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图3

将单元格(cells)组织成幻灯片(slides)和副幻灯片(subslides):
使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图4

执行转化命令:

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

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

使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图5

3. 常见问题与解决

① jupyter notebook 中 R 画图,不显示文字、标签。
使用 conda 和 Jupyter 在 R 中实现数据科学分析 - 图6

解决方法:

  1. # This is because the fonts are missing in anaconda, what we need is to install it:
  2. 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 即可:

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

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

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

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

  1. 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/