Leia conjuntos de dados R do Python.
O pacote rdata oferece uma maneira leve de importar conjuntos de dados/objetos R armazenados nos formatos ".rda" e ".rds" para Python. Suas principais vantagens são:
É uma implementação Python pura, sem dependências da linguagem R ou de bibliotecas relacionadas. Assim, ele pode ser usado em qualquer lugar onde Python seja compatível, inclusive na web usando Pyodide.
Ele tenta suportar todos os objetos R que podem ser traduzidos de forma significativa. Ao contrário de outras soluções, você não está limitado a importar dataframes ou dados com uma estrutura específica.
Ele permite que os usuários personalizem facilmente a conversão de classes R em Python. Seus dados usam classes R personalizadas? Não se preocupe mais, pois é possível definir conversões personalizadas para as classes Python de sua escolha.
Possui licença permissiva (MIT). Ao contrário de outros pacotes que dependem de bibliotecas R e, portanto, precisam aderir à licença GPL, você pode usar o rdata como uma dependência do MIT, BSD ou até mesmo de projetos de código fechado.
rdata está no PyPi e pode ser instalado usando pip
:
pip instalar rdata
Também está disponível para conda
usando o canal conda-forge
:
conda install -c conda-forge rdata
A versão atual do branch de desenvolvimento pode ser instalada como
pip instalar git + https://github.com/vnmabus/rdata.git@develop
A documentação do rdata está em ReadTheDocs.
Exemplos de uso estão disponíveis em ReadTheDocs.
A maneira comum de ler um conjunto de dados R é a seguinte:
importar rdataconvertido = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda")convertido
o que resulta em
{'vetor_teste': array([1., 2., 3.])}
Nos bastidores, isso é equivalente ao seguinte código:
importar rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")convertido = rdata.conversion.convert(parsed)convertido
Isto consiste em duas etapas:
Primeiro, o arquivo é analisado usando a função rdata.parser.parse_file. Isso fornece uma descrição literal do conteúdo do arquivo como uma hierarquia de objetos Python que representa os objetos R básicos. Esta etapa é inequívoca e sempre a mesma.
Então, cada objeto deve ser convertido em um objeto Python apropriado. Nesta etapa existem várias escolhas sobre qual tipo Python é o mais apropriado como conversão para um determinado objeto R. Assim, fornecemos uma rotina padrão rdata.conversion.convert, que tenta selecionar objetos Python que preservam a maior parte das informações do objeto R original. Para classes R customizadas, também é possível especificar rotinas de conversão para objetos Python.
A rotina básica de conversão apenas constrói um objeto SimpleConverter e chama seu método convert. Todos os argumentos de convert são passados diretamente para o método de inicialização SimpleConverter.
É possível, embora não trivial, criar um objeto Converter personalizado para alterar a maneira como os objetos R básicos são transformados em objetos Python. No entanto, uma situação mais comum é que não se deseja alterar a forma como os objetos R básicos são convertidos, mas sim fornecer conversões para classes R específicas. Isso pode ser feito passando um dicionário para o método de inicialização SimpleConverter, contendo como chaves os nomes das classes R e como valores, callables que convertem um objeto R dessa classe em um objeto Python. Por padrão, o dicionário usado é DEFAULT_CLASS_MAP, que pode converter classes R comumente usadas, como data.frame e factor.
Como exemplo, aqui está como implementaríamos uma rotina de conversão para a classe factor para objetos bytes, em vez da conversão padrão para objetos Pandas Categorical:
import rdatadef factor_constructor(obj, attrs): valores = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else Nenhum para i em obj] return valoresnew_dict = { **rdata. conversão.DEFAULT_CLASS_MAP, "fator": fator_construtor}convertido = rdata.read_rda(rdata.TESTDATA_PATH / "test_dataframe.rda", construtor_dict=new_dict, )convertido
que tem o seguinte resultado:
{'test_dataframe': valor da classe 1 ba' 1 2 b'b' 2 3 b'b' 3}
Exemplos adicionais que ilustram as funcionalidades deste pacote podem ser encontrados na documentação do ReadTheDocs.