從 Python 讀取 R 資料集。
rdata 套件提供了一種輕量級方法,可以將以「.rda」和「.rds」格式儲存的 R 資料集/物件匯入 Python 。其主要優點為:
它是純Python實現,不依賴R語言或相關函式庫。因此,它可以在支援 Python 的任何地方使用,包括使用 Pyodide 的 Web。
它嘗試支援所有可以有意義翻譯的 R 物件。與其他解決方案相反,您不限於匯入資料框或具有特定結構的資料。
它允許用戶輕鬆自訂 R 類別到 Python 類別的轉換。您的資料是否使用自訂 R 類別?不用再擔心,因為可以定義到您選擇的 Python 類別的自訂轉換。
它有一個寬鬆的許可證(MIT)。與依賴 R 函式庫並因此需要遵守 GPL 授權的其他套件相反,您可以使用 rdata 作為 MIT、BSD 甚至閉源專案的依賴項。
rdata 在 PyPi 上,可以使用pip
安裝:
pip 安裝 rdata
它也可用於conda
使用conda-forge
通道:
conda install -c conda-forge rdata
開發分支的目前版本可以安裝為
pip install git+https://github.com/vnmabus/rdata.git@develop
rdata 的文檔位於 ReadTheDocs 中。
ReadTheDocs 中提供了使用範例。
讀取 R 資料集的常見方法如下:
匯入 rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda")converted
這導致
{'test_vector': array([1., 2., 3.])}
在底層,這相當於以下程式碼:
導入 rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")converted = rdata.conversion.convert(parsed)converted
這包括兩個步驟:
首先,使用函數 rdata.parser.parse_file 解析檔案。這提供了文件內容的文字描述,作為表示基本 R 物件的 Python 物件的層次結構。這一步是明確的並且始終是相同的。
然後,每個物件必須轉換為適當的 Python 物件。在此步驟中,有多種選擇,確定哪種 Python 類型最適合作為給定 R 物件的轉換。因此,我們提供了一個預設的 rdata.conversion.convert 例程,它嘗試選擇保留原始 R 物件大部分資訊的 Python 物件。對於自訂 R 類,也可以指定 Python 物件的轉換例程。
基本convert例程僅建構一個SimpleConverter物件並呼叫其convert方法。 Convert 的所有參數都直接傳遞給 SimpleConverter 初始化方法。
雖然不是微不足道,但可以建立自訂 Converter 物件來更改基本 R 物件轉換為 Python 物件的方式。然而,一種更常見的情況是,不想改變基本 R 物件的轉換方式,而是想為特定的 R 類別提供轉換。這可以透過將字典傳遞給 SimpleConverter 初始化方法來完成,其中包含 R 類別的名稱作為鍵,以及將該類別的 R 物件轉換為 Python 物件的可呼叫函數作為值。預設使用的字典是DEFAULT_CLASS_MAP,可以轉換data.frame、factor等常用的R類別。
作為範例,以下是我們如何實現將因子類別轉換為位元組物件的例程,而不是預設轉換為 Pandas 分類物件:
import rdatadef Factor_constructor(obj, attrs): value = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else None for i in obj] return valuenew_dict = { **rdata. conversion.DEFAULT_CLASS_MAP,“因子”:factor_constructor}轉換= rdata.read_rda(rdata.TESTDATA_PATH /“test_dataframe.rda”,constructor_dict = new_dict, ) 轉換
結果如下:
{'test_dataframe':類別值 1 b'a' 1 2 b'b' 2 3 b'b' 3}
說明該套件功能的其他範例可以在 ReadTheDocs 文件中找到。