美文网首页数据分析
在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