1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RStudioでデータフレームをRとPythonの間でやり取りをする方法

Last updated at Posted at 2025-01-26

この記事のモチベーション

  • RStudioでRをメインに使用しているが、やりたいことがPythonでシンプルに可能である場合に、RとPythonのいいとこ取りをしたい。
  • Pythonで作成したデータフレームをRに読み込んでRの慣れた環境で解析できるようにしたい。

問題点

  • Pythonのpandasはデータ分析のライブラリを収載したパッケージである。
  • RStudio上でPythonでのpandas作成したデータフレームをreticulateライブラリで読み込むことはできるが、Pythonのデータフレーム名をそのままRで読み込むと、全く形式が異なってしまいRで再利用できない。
  • Rで作成したデータフレームはPythonで読み込み可能であることから、PythonからRのデータのやり取りをスムーズに行いたい。

解決方法

  • 参考記事に記載のPythonで作成したデータフレームをRで読み込める形のファイル(RDF形式)に出力し、Rで読み込むことで可能となった。
  • 本記事はmacOSかつminiconda/conda-forgeの環境でPythonを設定した条件で動作確認を行いました。

方法

必要なパッケージのインストール

今回はpandas, pyperの2つのパッケージをインストールする。

ターミナルにてRStudioで使用するPythonの仮想環境をアクティベートして、以下のコマンドで事前にインストールしておく。pyperパッケージはcondaではなくpipコマンドでインストールを行う。

まずはターミナルで仮想環境に切り替えてpandasパッケージをインストールする。

% conda activate DSCFA39
% conda install pandas

続いて、pyperパッケージをpipコマンドでインストールする。

% pip install pyper

RのデータフレームをPythonに読み込む

RStudioのPythonのエディタ内で以下のsave_rds関数をPythonで作成する。

save_rds.py
import pyper
import pandas as pd
from pathlib import Path, PosixPath
from typing import Union

def save_rds(df: pd.core.frame.DataFrame, file: Union[str, PosixPath]) -> bool:
    strfile = str(file)
    pathfile = Path(file)
    # datetime型があると変換エラーが起こるのでstrにする
    df = pd.concat([df.select_dtypes('datetime').astype(str), df.select_dtypes(exclude='datetime')], axis=1)
    # PosixPathがあると変換エラーが起こるのでstrにする
    df = pd.concat([df.select_dtypes('object').astype(str), df.select_dtypes(exclude='object')], axis=1)
    r = pyper.R(use_pandas='True')
    r.assign("df", df)
    r(f'saveRDS(df, file="{strfile}")')
    ret = r.get(f'readRDS("{strfile}")')
    if ret is None:
        print('Conversion failed')
        pathfile.unlink()
        return False
    else:
        return True

引用元:https://qiita.com/takano_tak/items/0be0305c2450dc81736e

上記Pythonスクリプトを実行して、RStudioの環境変数の確認画面で、Pythonにsave_rds関数が登録されていれば実行可能である。

RStudioのWorking directryの設定

上記関数を使用する前に、データフレームのやり取りを行うRおよびPythonのスクリプトを同じフォルダーに置いて、セッションのWorking Directoryを合わせておく。

各スクリプトを同じフォルダーに保存して、Session – Set working Directory のTo Source File Locationをクリックする。

Pythonの環境で、以下のコマンドで出力する。

export.py
    save_rds(df, "AAAA.RDS")

※ここで、dfは出力したいデータフレームのオブジェクト名、“AAAA.RDS”は区別ができるファイル名を指定する。

R環境で読み込み

Rの環境で、以下のコマンドでRに読み込んでオブジェクトに保存する。

Load_df.R
rdf_1 <- readRDS ("AAAA.RDS")
rdf_1

class()関数で読み込んだオブジェクトを確認し、data frameの型であることを確認する。

```Confirm.R
class(rdf_1)
```

class(rdf_1)
[1] "data.frame"

  • ここで、rdf_1は任意のオブジェクト名を指定する。
  • 後にPythonで読み込む際にはこのオブジェクト名を使用するため、ピリオド(.)などのPythonの動作に支障をきたす特殊文字は使用不可となる。

Rで作成したデータフレームをPythonで読み込む方法

Pythonのエディタ内で、 ”r.” をオブジェクトの前に付けることで、Pythonで読み込むことができる。

LoadRdf.py
	py_rdf1 = r.rdf_1
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?