数据分析

在Python/IPython Notebook中使用R

2016-09-14  本文已影响0人  小胡儿

想在Python中用R的初衷

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

使用前需要安装什么

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)

参考资料

上一篇下一篇

猜你喜欢

热点阅读