在Python/IPython Notebook中使用R

想在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)

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容