J'ai un tas de fichiers de séries chronologiques .RData et je voudrais les charger directement dans Python sans d'abord convertir les fichiers en une autre extension (comme .csv). Toutes les idées sur le meilleur moyen d'accomplir cela?
Les gens demandent ce genre de chose sur la liste R-help et R-dev et la réponse habituelle est que le code est la documentation du .RData
format de fichier. Ainsi, toute autre implémentation dans un autre langage est hard ++ .
Je pense que la seule façon raisonnable est d'installer RPy2 et d'utiliser la fonction load
de R à partir de cela, en convertissant en objets appropriés python au fur et à mesure. Le .RData
Le fichier peut contenir des objets structurés ainsi que des tableaux simples, alors faites attention.
Linky: http://rpy.sourceforge.net/rpy2/doc-2.4/html/
Quicky:
>>> import rpy2.robjects as robjects
>>> robjects.r['load'](".RData")
les objets sont maintenant chargés dans l'espace de travail R.
>>> robjects.r['y']
<FloatVector - Python:0x24c6560 / R:0xf1f0e0>
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317]
C'est un simple scalaire, d est un bloc de données, je peux sous-ensemble pour obtenir des colonnes:
>>> 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]
Comme alternative pour ceux qui préfèrent ne pas avoir à installer R pour accomplir cette tâche (r2py l'exige), il existe un nouveau package "pyreadr" qui permet de lire les fichiers RData et Rds directement dans python sans dépendances.
C'est un wrapper autour de la librdata de la bibliothèque C, donc c'est très rapide.
Vous pouvez l'installer facilement avec pip:
pip install pyreadr
Par exemple, vous feriez:
import pyreadr
result = pyreadr.read_r('/path/to/file.RData') # also works for Rds
# done! let's see what we got
# result is a dictionary where keys are the name of objects and the values python
# objects
print(result.keys()) # let's check what objects we got
df1 = result["df1"] # extract the pandas data frame for object df1
Le repo est ici: https://github.com/ofajardo/pyreadr
Avertissement: je suis le développeur de ce package.
Si vous utilisez le bloc-notes Jupyter, vous devez effectuer 2 étapes:
Étape 1: allez sur http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2 et téléchargez Python interface vers le langage R (intégré R) dans mon cas, j'utiliserai rpy2-2.8.6-cp36-cp36m-win_AMD64.whl
Placez ce fichier dans le même répertoire de travail que vous vous trouvez actuellement.
Étape 2: accédez à votre bloc-notes Jupyter et écrivez les commandes suivantes
# This is to install rpy2 library in Anaconda
!pip install rpy2-2.8.6-cp36-cp36m-win_AMD64.whl
puis
# This is important if you will be using rpy2
import os
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2'
puis
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
Cela devrait vous permettre d'utiliser les fonctions R en python. Maintenant, vous devez importer le readRDS
comme suit
readRDS = robjects.r['readRDS']
df = readRDS('Data1.rds')
df = pandas2ri.ri2py(df)
df.head()
Toutes nos félicitations! vous avez maintenant le Dataframe que vous vouliez
Cependant, je vous conseille de l'enregistrer dans un fichier pickle pour une utilisation ultérieure dans python as
df.to_pickle('Data1')
La prochaine fois, vous pouvez simplement l'utiliser en
df1=pd.read_pickle('Data1')
Il existe une bibliothèque tierce appelée rpy
, et vous pouvez utiliser cette bibliothèque pour charger .RData
des dossiers. Vous pouvez l'obtenir via un pip
install pip instally rpy
fera l'affaire, si vous n'avez pas rpy
, alors je vous suggère de regarder comment l'installer. Sinon, vous pouvez simplement faire:
from rpy import *
r.load("file name here")
Il semble que je sois un peu vieille école là-bas, s rpy2 maintenant, vous pouvez donc l'utiliser.