Python에서 R 데이터세트를 읽습니다.
rdata 패키지는 ".rda" 및 ".rds" 형식으로 저장된 R 데이터 세트/개체를 Python으로 가져오는 간단한 방법을 제공합니다. 주요 장점은 다음과 같습니다.
이는 R 언어나 관련 라이브러리에 대한 종속성이 없는 순수한 Python 구현입니다. 따라서 Pyodide를 사용하는 웹을 포함하여 Python이 지원되는 모든 곳에서 사용할 수 있습니다.
의미있게 번역될 수 있는 모든 R 개체를 지원하려고 시도합니다. 다른 솔루션과 달리 데이터 프레임이나 특정 구조의 데이터를 가져오는 데 제한이 없습니다.
이를 통해 사용자는 R 클래스를 Python 클래스로 쉽게 변환할 수 있습니다. 데이터가 사용자 정의 R 클래스를 사용합니까? 선택한 Python 클래스에 대한 사용자 지정 변환을 정의할 수 있으므로 더 이상 걱정하지 마세요.
MIT(Permissive License)가 있습니다. R 라이브러리에 의존하여 GPL 라이선스를 준수해야 하는 다른 패키지와 달리 rdata를 MIT, BSD 또는 비공개 소스 프로젝트에 대한 종속성으로 사용할 수 있습니다.
rdata는 PyPi에 있으며 pip
사용하여 설치할 수 있습니다.
pip 설치 rdata
conda-forge
채널을 사용하여 conda
에도 사용할 수 있습니다.
conda install -c conda-forge rdata
개발 지점의 현재 버전은 다음과 같이 설치할 수 있습니다.
pip 설치 git+https://github.com/vnmabus/rdata.git@develop
rdata 문서는 ReadTheDocs에 있습니다.
사용 예는 ReadTheDocs에서 확인할 수 있습니다.
R 데이터 세트를 읽는 일반적인 방법은 다음과 같습니다.
import rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_Vector.rda")converted
그 결과
{'테스트_벡터': 배열([1., 2., 3.])}
내부적으로 이는 다음 코드와 동일합니다.
import rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_Vector.rda")converted = rdata.conversion.convert(parsed)converted
이는 두 단계로 구성됩니다.
먼저 rdata.parser.parse_file 함수를 사용하여 파일을 구문 분석합니다. 이는 기본 R 개체를 나타내는 Python 개체의 계층 구조로 파일 내용에 대한 문자 그대로 설명을 제공합니다. 이 단계는 명확하며 항상 동일합니다.
그런 다음 각 개체를 적절한 Python 개체로 변환해야 합니다. 이 단계에는 주어진 R 객체에 대한 변환으로 가장 적합한 Python 유형에 대한 몇 가지 선택 사항이 있습니다. 따라서 우리는 원래 R 객체의 대부분의 정보를 보존하는 Python 객체를 선택하려고 시도하는 기본 rdata.conversion.convert 루틴을 제공합니다. 사용자 정의 R 클래스의 경우 Python 객체로의 변환 루틴을 지정할 수도 있습니다.
기본 변환 루틴은 SimpleConverter 객체만 생성하고 해당 변환 메서드를 호출합니다. 모든 변환 인수는 SimpleConverter 초기화 메서드에 직접 전달됩니다.
간단하지는 않지만 사용자 정의 Converter 객체를 만들어 기본 R 객체가 Python 객체로 변환되는 방식을 변경하는 것이 가능합니다. 그러나 더 일반적인 상황은 기본 R 개체가 변환되는 방식을 변경하고 싶지 않고 대신 특정 R 클래스에 대한 변환을 제공하려는 것입니다. 이는 R 클래스의 이름을 키로 포함하고 해당 클래스의 R 개체를 Python 개체로 변환하는 호출 가능 항목을 값으로 포함하는 사전을 SimpleConverter 초기화 메서드에 전달하여 수행할 수 있습니다. 기본적으로 사용되는 사전은 DEFAULT_CLASS_MAP이며, data.frame, Factor 등 일반적으로 사용되는 R 클래스를 변환할 수 있습니다.
예를 들어, Pandas Categorical 객체로의 기본 변환 대신 Factor 클래스에 대한 변환 루틴을 바이트열 객체로 구현하는 방법은 다음과 같습니다.
import rdatadef Factor_constructor(obj, attrs): 값 = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else None for i in obj] return valuenew_dict = { **rdata. 변환.DEFAULT_CLASS_MAP, "계수": Factor_constructor}변환 = rdata.read_rda( rdata.TESTDATA_PATH / "test_dataframe.rda", constructor_dict=new_dict, )변환됨
결과는 다음과 같습니다.
{'test_dataframe': 클래스 값 1바' 1 2b'b' 2 3b'b' 3}
이 패키지의 기능을 보여주는 추가 예제는 ReadTheDocs 설명서에서 찾을 수 있습니다.