# 요약 (summary)
rpy2 패키지에 포함된 vectors.py 파일을 강제로 수정한다
* vectors.py 파일의 982행의 값을 r_tzone_name = "UTC" 등으로 수정
If you encountered following errors,
setting "r_tzone_name" variable at row 982 of "vectors.py" file which is included in the rpy2 package as the time zone name that you want to set (ex: "UTC") will fix this issue.
If you want to need more detailed information, please see the images in this content.
------------
# 기초정보 (baseline information of this situation)
* .rds 파일을 python에서 읽어오려는 상황 (python3)
* rds 파일 관련 정보
* 해당 시간정보는 R에서 POSIXct 형으로 저장되어 있음
* 이 파일은 KO-KR 환경의 윈도우10 PC에서 작업하여 저장된 파일
* 한국시각대 정보일 듯

--------------
# 오류발생상황 (situations of the error)
* 1번 유형 : R 에서 저장한 "시간 정보"를 포함한 RDS파일을 python에서 불러올 때
* 2번 유형 : 불러온 rds파일을 python에서 호출할 때
## 오류 1번
* 최초 파일을 읽을 때 다음과 같은 오류 발생
```
(파이썬 설치 경로. 윈도우의 경우 C:\Users\개인계정 )\AppData\Roaming\Python\Python37\site-packages\rpy2\robjects\vectors.py:980: UserWarning: R object inheriting from "POSIXct" but without attribute "tzone".
warnings.warn('R object inheriting from "POSIXct" but without '
```
## 오류 2번
* 아래와 같은 오류가 변수 1개마다 반복해서 발생하고, 해당 변수의 tz, tzinfo 값이 N
* 만약 1000행짜리 데이터프레임에 POSIXct (시간정보) 변수가 2000개 있으면, 2000번 아래의 오류메세지가 표출되는것 같음
```
Traceback (most recent call last):
File "pandas\_libs\tslibs\timezones.pyx", line 266, in pandas._libs.tslibs.timezones.get_dst_info
AttributeError: 'NoneType' object has no attribute 'total_seconds'
Exception ignored in: 'pandas._libs.tslibs.conversion._localize_tso'
Traceback (most recent call last):
File "pandas\_libs\tslibs\timezones.pyx", line 266, in pandas._libs.tslibs.timezones.get_dst_info
AttributeError: 'NoneType' object has no attribute 'total_seconds'
```

### 오류발생 원인 (reason of the attribute error occurence)


--------------
# 문제해결법 (how to solve) : rpy2 의 구성요소인 "vectors.py" 파일 982행을 강제 수정
* 다음 경로에 있는 vectors.py 파일의 982행에 r_tzone_name 변수를 상황에 맞는 timezone 값으로 강제 지정하기
(파이썬 설치 경로. 윈도우의 경우 C:\Users\개인계정 )\AppData\Roaming\Python\Python37\site-packages\rpy2\robjects\vectors.py

## vectors.py 강제수정 절차
* vectors.py 파일 열기
* 경로 : 윈도우의 경우 C:\Users\개인계정 )\AppData\Roaming\Python\Python37\site-packages\rpy2\robjects\ 하위에 있음
* 주의
* 본인이 설치한 python 경로에 따라 위 경로는 다를 수 있음
* 본인이 사용중인 python 버전에 따라 위 경로의 폴더 중 "Python37"은 "Python37"이 아닌 python38, pyton310 등 다른 값일 수 있음
* 개인계정 하위의 "AppData" 폴더는 숨김 폴더라 숨김폴더 보는 옵션을 설정해야 함

* 982행의 r_tzone_name = '' 찾기
* r_tzone_name 값이 원하는 값으로 변경되도록 처리
* 예 : Asia/Seoul 로 변경하는 경우
* r_tzone_name = "Asia/seoul'
* 수정 잘 되는지 확인하기 위해, 981에 아래 사진과 같이 원하는 문구를 추가해도 좋음

----
## 문제해결 결과 (error handling result)
* 위 오류상황 중 **오류 1번** 은 위의 사진처럼 수정된 메세지가 뜸.
* 그러나 **오류 2번** 은 해결됨


------
## 참고 : python 에서 .rds 파일 읽기 (appendix: how to read .rds file in python3)
## 참고 2 : 최신 rpy2를 활용해 python에서 .rds 파일을 읽어왔는데, python의 변수를 접근해보면 데이터프레임형식이 아닌 다른 형식으로 저장되는 경우
- rpy2 3.4.5 버전을 사용하면 문제없이 사용 가능
- 설치 시 다음과 같이 버전을 명시해주면 됨 (기존버전이 설치된 경우 기존버전 rpy2 를 설치한 후 재설치 할 것)
- pip3 install rpy2==3.4.5
- 현재 설치된 rpy2 버전 확인법
- 다음과 같이 치면 표출됨
- import rpy2
- rpy2.__version__
- 다음과 같이 치면 표출됨
- 설치 시 다음과 같이 버전을 명시해주면 됨 (기존버전이 설치된 경우 기존버전 rpy2 를 설치한 후 재설치 할 것)

-
- 2022-04-06 현재 rpy2를 pip로 설치하면 최신버전인 3.5.0이 설치됨
- 이 버전의 문제는, readRDS로 읽은 결과파일이 데이터프레임이 아닌 다른 형식으로 읽힘
- 읽힌 데이터의 각 열 순서대로 리스트로 저장되어있어서 별도로 수정을 해줘야 함
- 예
- myData = readRDS("sth.rds")
- myData[0] # : 첫번째 열
- 2022-04-06 현재 rpy2를 pip로 설치하면 최신버전인 3.5.0이 설치됨
'r, python' 카테고리의 다른 글
파이썬 lzma module 오류 (0) | 2020.06.01 |
---|---|
Google Colab 단축키 (Shortcuts) (0) | 2019.07.12 |