python vector_"攻略" : "R 语言格式数据导入python进行分析"

我们在使用python进行数据分析时 ,有时会遇到这样的情况:

python没有现成的包,但是R语言有,使用R包获得的结果是 .RData数据;又或者我们需要用到 .RData 格式的开源数据。

此时我们就面临着将.RData的数据导入python进行后续分析的场景。

这篇文章将完整讲述如何将.RData的数据导入python,以及如何在python中简单调用R的接口。

整篇文章将分为两部分:

  1. 安装rpy2 及注意细节
  2. .RData 数据导入python,转化成dataframe,numpy array,dict

1.安装rpy2 及注意细节:

python 读.RData数据的包有两个:rpy2 和 pyreadr。

  • pyreadr 提供了四个函数,可以对一些简单的RData 和 python 数据之间进行转换,如 下图。但是如果你需要导入的数据并非以下格式,如list,array等,请考虑使用rpy2

dc553eae9396bf5107a7ab1f579274c6.png
R 和 python可转换的数据类型

5df617ed7cf2c6c467d56c8bf6958603.png
四个读写函数
  • rpy2 提供了非常多调用R语言的接口,在这篇文章中仅介绍导入.RData数据相关的一部分。

1.下载rpy2 (存在编译环境)

安装命令:

 pip install rpy2

2.下载并安装对应的轮子.whl文件(无编译环境,新手推荐)[1]

许多第三方包需要预编译,whl文件可以理解为已经编译好,直接能用的第三方包。

如果没有安装wheel,先需要用pip安装wheel

pip install wheel

然后下载rpy2.whl:rpy2.whl文件下载地址

f6accc429cbdac6f12f621969b45345c.png

进入命令行,在.whl文件对应目录下,输入安装命令:

pip3 install rpy2-2.9.5-cp37-cp37m-win_amd64.whl

注意事项:需要下载与python版本,window版本对应的.whl文件。如截图所示为python3.7,win64位系统。

3.添加系统环境变量:

变量名为:R_HOME, R_USER

变量值:R 语言安装路径

b077bf96cd8b6023817d7fbbd724cdca.png

be357f1244b7ee5d470477563a8007ac.png

注意事项:添加系统变量而非用户变量,使用pycharm等IDE时,只能读到系统变量。

4.测试rpy2是否安装成功

import 

ae197faa8a6786e2036ca8276d776da4.png

2. .RData 数据导入python

import rpy2.robjects as robjects
import numpy as np

robjects.r['load']("yourfile.Rdata")

.RData文件相当于R语言的workspace,包含了多个变量,通过上面的代码就把.RData中所有变量导入到了robjects里面了。

  • [2]如果你的数据是dataframe,例如叫d,你可以很方便的用columns和rows进行索引
>>> robjects.r['d'][0]
<IntVector - Python:0x24c9248 / R:0xbbc6c0>
[       1,        2,        3, ...,        8,        9,       10]

>>> robjects.r['d'][1]
<FloatVector - Python:0x24c93b0 / R:0xf1f230>
[0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136]
  • 如果你的数据是matrix 或者array,例如变量名叫a
a = robjects.r['a']
print(type(a))
a = np.array(a)
print(type(a))
print(a.shape)

7b79b121aa71e26b5d0b4477598e5795.png
a 输出结果
  • [3]如果你的数据是list,list中元素有名称,实际上跟python的中dictionary没什么区别,可以使用names索引元素,可以使用代码转化,如下:
def as_dict(vector):
    """Convert an RPy2 ListVector to a Python dict"""
    result = {}
    for i, name in enumerate(vector.names):
        if isinstance(vector[i], robjects.ListVector):
            result[name] = as_dict(vector[i])
        elif len(vector[i]) == 1:
            result[name] = vector[i][0]
        else:
            result[name] = vector[i]
    return result

参考

  1. ^https://www.cnblogs.com/lyrichu/p/6819079.html
  2. ^参考文章:Loading .RData files into Python https://stackoverflow.com/questions/21288133/loading-rdata-files-into-python
  3. ^参考文章:Converting an RPy2 ListVector to a Python dictionary https://stackoverflow.com/questions/24152160/converting-an-rpy2-listvector-to-a-python-dictionary
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值