J'essaie donc d'obtenir des données de NFLfastR et mon code équivalent R est:
import rpy2.robjects as robjects from rpy2.robjects import pandas2ri import os os.environ["R_HOME"] = r"C:\Program Files\R\R-3.6.3" os.environ["PATH"] = r"C:\Program Files\R\R-3.6.3\bin\x64" + ";" + os.environ["PATH"] pandas2ri.activate() readRDS = robjects.r['readRDS'] df = readRDS(url('https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds')) df = pandas2ri.ri2py(df)
J'ai déjà essayé le module pyreadr mais cela n'a pas fonctionné pour moi. Actuellement, j'utilise le module rpy2 pour le faire fonctionner. Voici le code que j'essaye:
data <- readRDS(url('https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds')) data
3 Réponses :
Les fichiers Rds et Rdata sont difficiles à lire dans d'autres langues que R car le format bien qu'ouvert n'est pas documenté. Par conséquent, il n'y a pas beaucoup d'options sur la façon de les lire en python. L'un est ce que vous proposez. Une autre consiste à utiliser pyreadr, mais vous devez d'abord télécharger le fichier sur le disque car pyreadr ne peut pas lire directement à partir d'une URL:
import pyreadr url = "https://github.com/hadley/nycflights13/blob/master/data/airlines.rda?raw=true" dst_path = "/some/path/on/disk/airlines.rda" res = pyreadr.read_r(pyreadr.download_file(url, dst_path), dst_path)
ÉDITER
pyreadr 0.3.7 inclut désormais une fonction de téléchargement de fichiers:
import pyreadr from urllib.request import urlopen link="https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds" response = urlopen(link) content = response.read() fhandle = open( 'play_by_play_2019.rds', 'wb') fhandle.write(content) fhandle.close() result = pyreadr.read_r("play_by_play_2019.rds") print(result.keys())
Eh bien, si vous voulez simplement lire les données nflFastR, vous pouvez les lire directement en python comme suit:
import pandas as pd pd.read_csv('https://github.com/guga31bb/nflfastR-data/blob/master/data/' \ 'play_by_play_2019.csv.gz?raw=True', compression='gzip', low_memory=False)
Mais pour le moment, il n'existe aucun moyen de le faire via python. C'est déjà assez difficile de lire un fichier sur site (.rds) tout en lisant à partir d'une URL est quelque chose que je n'ai jamais vu implémenté. Vous devez donc télécharger le fichier sur site, puis vous pouvez l'avoir lu directement en utilisant le package pyreadr ou rpy2 (si vous avez installé R) comme vous l'avez mentionné.
Cela a aidé. Mais je suis toujours curieux de savoir comment lire un fichier (.Rds) à partir d'une URL en général.
@RetroInvader, voir ma réponse ci-dessous comment lire un .rds à partir d'une URL avec rpy2
.
Dans R, contrairement à Python, vous n'avez pas à qualifier chaque fonction avec sa source de package, sauf si vous êtes confronté à des conflits de nom. De plus, dans R, il n'y a pas de méthode intégrée. Chaque fonction que vous appelez réside dans un package. Mais R est livré avec des packages par défaut tels que utils
, base
, stats
pour les méthodes de routine.
Plus précisément, votre code R de travail appelle deux fonctions à partir du package de base
, comme indiqué avec des alias double-virgule:
from rpy2.robjects.packages import importr from rpy2.robjects import pandas2ri base = importr("base") nfl_url <- 'https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds' r_df <- base.readRDS(base.url(nfl_url)) pandas2ri.activate() py_df = pandas2ri.ri2py(r_df)
Par conséquent, vous devez exécuter la procédure analogue dans rpy2
de Python en rpy2
explicitement base
package de base
:
nfl_url <- 'https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds' data <- base::readRDS(base::url(NFL)) data
Et quel est le problème avec votre code? Veuillez publier des erreurs ou des résultats sous-estimés. Veuillez également publier les lignes de
library
utilisées dans le code R. Besoin de connaître les origines de l'url
.