美文网首页数据分析
在Python/IPython Notebook中使用R

在Python/IPython Notebook中使用R

作者: 小胡儿 | 来源:发表于2016-09-14 14:02 被阅读0次

想在Python中用R的初衷

从本科到硕士一直都用R,去年工作后才开始用Python。平时大部分工作中都是用Python。偶尔会怀念一些R特有的功能。比如:

  • ggplot: 年初在研究怎么在Python里面用R的一个主要原因就是想用ggplot,个人使用习惯的问题,和matplotlib比起来更喜欢用ggplot。当时看到Python里有个ggplot package, 不过当时这个package已经很久没有更新了。而且documentation也不全,哪些function能用哪些不能用也不是很清楚。所以就放弃了这个选项。现在又看了一下,好像作者在今年4月份又重开了一个repo来写这个package。试用了一下,会有些bug。感觉还是不是很成熟的样子。所以现在简单一点的图直接用seaborn,复杂一点的就还是call R用ggplot画
  • 因为R毕竟主要是统计学家在搞,所以很注重model的解释性。因此很多model output都把很多信息很干净整洁的display出来。比如最简单的lm, summary output 把 coefficients, p-values, R2 等等都很整洁的一次性列出来了, 但在Python的 scikit-learn package 中则很难做到。

使用前需要安装什么

In Python:
rpy2

pip install rpy2

In R:

install.packages('RJSONIO')
install.packages('httr')

但是装的时候在网上查资料说要在R装以上两个packages才能在IPython Notebook里面用R,不过不知道为什么我的电脑只成功安装了第二个,即使如此也能正常在notebook里用R。

Notes:
在更新到新的 El capitan之后R 的root directory有些问题。不能在command line execute. 解决方法就是重装R。

Optional:
如果想要打开一个窗口在里面画图的话 mac OSX 需要安装X11.

如何在Python中使用R

以下是我根据网上搜的资料按工作需要折腾出来的模板~

模板1
使用情况:不需要在单独窗口plot出来,直接将图片存档。

import pandas as pd
import psycopg2
from rpy2 import robjects
from rpy2.robjects import pandas2ri
R = robjects.r
pandas2ri.activate() # 这行很重要,有了这行之后所有的pandas dataframe都不用再手动转换到R里了。

# 读取数据,平时工作一般用psycopg2来从数据库抓数据。
SQL = """   """
 
with psycopg2.connect(DSN_HDD) as conn:
     data = pd.read_sql(SQL, conn, params={'autocommit':True})

# 用来画图的 R code 
R_script = """
library(ggplot2)
function(data){

gp = ggplot(data, aes(x=my_x, y=my_y, fill=my_category)) +
    geom_bar(stat='identity', position='stack') +
    geom_text(aes(label=label_string, y=label_y_position), size=5) +
    theme_gray(base_size = 20)
 
ggsave(filename='test.png', plot=gp, width=18, height=10, unit='in')
}
"""
 
r_plot = R(R_script)
r_plot(data)

模板2
使用情况:需要在单独窗口plot出来

import pandas as pd
import psycopg2
from rpy2 import robjects
import rpy2.robjects.lib.ggplot2 as ggplot2
from rpy2.robjects import pandas2ri
R = robjects.r
R.X11() # 会打开一个窗口
pandas2ri.activate()

# 读取数据
SQL = """   """
 
with psycopg2.connect(DSN_HDD) as conn:
     data = pd.read_sql(SQL, conn, params={'autocommit':True})

# 画图 
gp = ggplot2.ggplot(data)
p = gp + ggplot2.aes_string(x='my_x', y='my_y') + ggplot2.geom_bar(stat='identity')
 
p.plot() # 图就会出现在窗口里

如何在IPython Notebook中用R

这个网页上面有很详细的资料。不过有一点需要更新的就是import。
在上面这个资料里,用的%load_ext rmagic, 现在要用%load_ext rpy2.ipython

我一般最常用的如下。%%R表示这整个block都是可以用R code。 -i代表input,把python这边的数据传进R session,然后-u是用来定义画图display的size的单位。我一般用cm-h后面跟的是高度-w后面跟的是宽度。

%%R -i my_python_data -u cm -h 15 -w 30
library(ggplot2)

ggplot(my_python_data, aes(x=my_x, y=my_y, fill=my_category)) +
    geom_bar(stat='identity', position='stack') +
    geom_text(aes(label=label_string, y=label_y_position), size=5) +
    theme_gray(base_size = 20)

参考资料

相关文章

网友评论

    本文标题:在Python/IPython Notebook中使用R

    本文链接:https://www.haomeiwen.com/subject/rwyvettx.html