Lea conjuntos de datos R desde Python.
El paquete rdata ofrece una forma ligera de importar conjuntos de datos/objetos de R almacenados en los formatos ".rda" y ".rds" en Python. Sus principales ventajas son:
Es una implementación pura de Python, sin dependencias del lenguaje R ni de bibliotecas relacionadas. Por lo tanto, se puede utilizar en cualquier lugar donde se admita Python, incluida la web que utiliza Pyodide.
Intenta admitir todos los objetos R que puedan traducirse de manera significativa. A diferencia de otras soluciones, no está limitado a importar marcos de datos o datos con una estructura particular.
Permite a los usuarios personalizar fácilmente la conversión de clases de R a clases de Python. ¿Sus datos utilizan clases R personalizadas? No te preocupes más, ya que es posible definir conversiones personalizadas a las clases de Python que elijas.
Dispone de licencia permisiva (MIT). A diferencia de otros paquetes que dependen de bibliotecas R y, por lo tanto, deben cumplir con la licencia GPL, puede usar rdata como una dependencia de MIT, BSD o incluso proyectos de código cerrado.
rdata está en PyPi y se puede instalar usando pip
:
pip instalar rdata
También está disponible para conda
usando el canal conda-forge
:
instalación de conda -c conda-forge rdata
La versión actual de la rama de desarrollo se puede instalar como
pip instala git+https://github.com/vnmabus/rdata.git@develop
La documentación de rdata está en ReadTheDocs.
Ejemplos de uso están disponibles en ReadTheDocs.
La forma común de leer un conjunto de datos R es la siguiente:
importar rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda")convertido
lo que resulta en
{'test_vector': matriz([1., 2., 3.])}
Debajo del capó, esto es equivalente al siguiente código:
importar rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")convertido = rdata.conversion.convert(analizado)convertido
Este consta de dos pasos:
Primero, el archivo se analiza utilizando la función rdata.parser.parse_file. Esto proporciona una descripción literal del contenido del archivo como una jerarquía de objetos Python que representan los objetos básicos de R. Este paso es inequívoco y siempre el mismo.
Luego, cada objeto debe convertirse en un objeto Python apropiado. En este paso hay varias opciones sobre qué tipo de Python es el más apropiado como conversión para un objeto R determinado. Por lo tanto, proporcionamos una rutina rdata.conversion.convert predeterminada, que intenta seleccionar objetos Python que conserven la mayor parte de la información del objeto R original. Para clases R personalizadas, también es posible especificar rutinas de conversión a objetos Python.
La rutina de conversión básica solo construye un objeto SimpleConverter y llama a su método de conversión. Todos los argumentos de convert se pasan directamente al método de inicialización de SimpleConverter.
Es posible, aunque no trivial, crear un objeto Convertidor personalizado para cambiar la forma en que los objetos R básicos se transforman en objetos Python. Sin embargo, una situación más común es que no se desea cambiar la forma en que se convierten los objetos R básicos, sino que se desean proporcionar conversiones para clases R específicas. Esto se puede hacer pasando un diccionario al método de inicialización SimpleConverter, que contiene como claves los nombres de las clases de R y como valores, elementos invocables que convierten un objeto R de esa clase en un objeto Python. De forma predeterminada, el diccionario utilizado es DEFAULT_CLASS_MAP, que puede convertir clases R de uso común, como data.frame y factor.
Como ejemplo, así es como implementaríamos una rutina de conversión para la clase de factor a objetos de bytes, en lugar de la conversión predeterminada a objetos categóricos de Pandas:
import rdatadef factor_constructor(obj, atributos): valores = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else Ninguno para i en obj] return valoresnew_dict = { **rdata. conversion.DEFAULT_CLASS_MAP, "factor": factor_constructor}convertido = rdata.read_rda(rdata.TESTDATA_PATH / "test_dataframe.rda", constructor_dict=new_dict, )convertido
que tiene el siguiente resultado:
{'test_dataframe': valor de clase 1 b'a' 1 2 b'b' 2 3 b'b' 3}
Se pueden encontrar ejemplos adicionales que ilustran las funcionalidades de este paquete en la documentación de ReadTheDocs.