Python 메모리 8GB로 kaggle을 싸울 때 알아야 할 것

배경



최근 유행 카글에 도전해 보았습니다.
하지만, 특징량을 늘리면 데이터가 거대해져, 「Memory Error!」에 시달렸습니다
그래도 kaggle을 포기할 수 없었던 나는 메모리와 잘 어울리는 길을 모색했다.

[1] 환경 변화



원래 메모리 8GB로 도전하는 것이 무모하므로 "Google Colaboratory"를 이용하면 좋을 것 같습니다.

・메모리 : 약 13GB
・무료
· 브라우저에서 이동
・귀찮은 환경 구축은 일절 불필요
· 순식간에 파이썬 (Jupyter Notebook) 환경을 얻을 수 있습니다.

사용법에 관해서는 아래의 링크가 상세합니다.
Google 공동체사 시작
공동체 데이터 입출력 요약

겸손하게 말하면 훌륭합니다.
데이터의 입출력에 버릇이 있습니다만, 익숙해지면 기본적으로는 Jupyter Notebook을 그대로 이용할 수 있습니다
덤으로 GPU 환경도 무료로 얻을 수 있기 때문에, 사용하기 편리한 툴입니다

[2] 메모리를 먹고 있는 변수를 찾아 삭제



변수의 크기는 아래에서 확인할 수 있습니다.
import sys
sys.getsizeof(val)

메모리를 먹고 있는 변수를 큰 쪽에서 표시해 보겠습니다
import sys
import pandas as pd

print(pd.DataFrame([[val for val in dir()], [sys.getsizeof(eval(val)) for val in dir()]],
                   index=['name','size']).T.sort_values('size', ascending=False).reset_index(drop=True))


                     name       size
0                    data  570142137
1                    test   90020943

마지막으로 불필요한 변수를 삭제하고 gc를 해제합니다.
import gc

del data, test
gc.collect()

[3] DataFrame의 입출력에 「feather」를 사용



pickle에 의한 입출력은 빠르고 편리합니다.
그러나 메모리를 꽤 먹는 것이 힘든 곳에서 가난한 환경에서는 메모리 오류가 발생할 수 있습니다.
그렇다고 단순히 pd.read_csv는 시간이 너무 걸린다는 문제가 있습니다.
회피하기 위한 라이브러리는 여러 가지 있는 것 같습니다만, 깃털 를 이용하면 좋을 것 같습니다

설치는 아래의 명령으로 할 수 있습니다
!pip install feather-format

중요한 속도는 아래와 같이 pandas와 비교하면 상당히 빠릅니다.

입력


%time df = feather.read_dataframe('test.csv')

CPU 시간: 사용자 78 ms, sys: 49 ms, total: 127 ms
벽 시간: 680 ms
%time df = pd.read_csv('test.csv')

CPU 시간: 사용자 846 ms, sys: 25 ms, total: 871 ms
Wall time: 5.8 s

출력


%time df.to_feather('test.csv')

CPU 시간: 사용자 942 ms, sys: 55 ms, total: 997 ms
Wall time: 16.3 s
%time df.to_csv('test.csv')

CPU 시간: 사용자 6.14 s, sys: 245 ms, total: 6.39 s
Wall time: 1min 11s

결론



이것으로 kaggle의 스타트 라인에 세웠습니다!
(「PC 살 수 있어」라고 하는 쯔코미는, 없이 부탁합니다・・・ )

좋은 웹페이지 즐겨찾기