Python から R データセットを読み取ります。
rdata パッケージは、「.rda」および「.rds」形式で保存された R データセット/オブジェクトを Python にインポートする軽量の方法を提供します。その主な利点は次のとおりです。
これは純粋な Python 実装であり、R 言語や関連ライブラリに依存しません。したがって、Pyodide を使用する Web など、Python がサポートされている場所であればどこでも使用できます。
意味のある変換が可能なすべての R オブジェクトをサポートしようとします。他のソリューションとは異なり、データフレームや特定の構造を持つデータのインポートに制限はありません。
これにより、ユーザーは R クラスから Python クラスへの変換を簡単にカスタマイズできます。データはカスタム R クラスを使用していますか?選択した Python クラスへのカスタム変換を定義できるため、もう心配する必要はありません。
許容ライセンス (MIT) を持っています。 R ライブラリに依存するため GPL ライセンスに準拠する必要がある他のパッケージとは対照的に、rdata は MIT、BSD、さらにはクローズド ソース プロジェクトへの依存関係として使用できます。
rdata は PyPi 上にあり、 pip
使用してインストールできます。
pip インストール rdata
conda-forge
チャネルを使用してconda
でも使用できます。
conda install -c conda-forge rdata
開発ブランチの現在のバージョンは次のようにインストールできます。
pip install git+https://github.com/vnmabus/rdata.git@develop
rdata のドキュメントは ReadTheDocs にあります。
使用例は ReadTheDocs にあります。
R データセットを読み取る一般的な方法は次のとおりです。
import rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda")converted
その結果、
{'test_vector': array([1., 2., 3.])}
内部的には、これは次のコードと同等です。
import rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")converted = rdata.conversion.convert(parsed)converted
これは次の 2 つのステップで構成されます。
まず、関数 rdata.parser.parse_file を使用してファイルが解析されます。これは、基本的な R オブジェクトを表す Python オブジェクトの階層としてファイルの内容を文字通りに説明します。このステップは明確であり、常に同じです。
次に、各オブジェクトを適切な Python オブジェクトに変換する必要があります。このステップでは、特定の R オブジェクトの変換としてどの Python 型が最適であるかについて、いくつかの選択肢があります。したがって、デフォルトの rdata.conversion.convert ルーチンを提供します。これは、元の R オブジェクトのほとんどの情報を保持する Python オブジェクトの選択を試みます。カスタム R クラスの場合、Python オブジェクトへの変換ルーチンを指定することもできます。
基本的な変換ルーチンは、SimpleConverter オブジェクトを構築し、その Convert メソッドを呼び出すだけです。 Convert のすべての引数は、SimpleConverter 初期化メソッドに直接渡されます。
簡単ではありませんが、カスタム Converter オブジェクトを作成して、基本的な R オブジェクトを Python オブジェクトに変換する方法を変更することは可能です。ただし、より一般的な状況は、基本的な R オブジェクトの変換方法を変更したくないが、代わりに特定の R クラスに変換を提供したいという状況です。これは、R クラスの名前をキーとして含み、そのクラスの R オブジェクトを Python オブジェクトに変換する呼び出し可能オブジェクトを値として含む辞書を SimpleConverter 初期化メソッドに渡すことによって実行できます。デフォルトでは、使用されるディクショナリは DEFAULT_CLASS_MAP で、data.frame やactor などの一般的に使用される R クラスを変換できます。
例として、Pandas Categorical オブジェクトへのデフォルトの変換ではなく、因子クラスのバイト オブジェクトへの変換ルーチンを実装する方法を次に示します。
import rdatadefactor_constructor(obj, attrs):values = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else None for i in obj] return valuenew_dict = { **rdata. conversion.DEFAULT_CLASS_MAP, "factor":factor_constructor}converted = rdata.read_rda( rdata.TESTDATA_PATH / "test_dataframe.rda"、constructor_dict=new_dict、 )変換された
その結果は次のとおりです。
{'test_dataframe': クラス値 1 b'a' 1 2 b'b' 2 3b'b'3}
このパッケージの機能を示す追加の例は、ReadTheDocs ドキュメントにあります。