SMALL
2021년 문화관광 빅데이터 분석대회에 도전하게 되었습니다.
분석용 데이터를 열어보려는데, 용량이 무려 4GB가 넘었습니다.
컬럼이 12개인데 용량이 4GB면 row 수가 어마어마할 거라는 생각이 들었어요.
pd.read_csv() 로 읽어들이려 하니 메모리 부족 에러가 나더군요ㅠ_ㅠ
datatable.fread() 로 읽으려 해도 메모리 부족 때문에 에러가 났습니다.
이럴 땐 파일을 쪼개서 읽어오면 됩니다.
아래 블로그에서 유용한 정보를 얻어 파일을 쪼개서 읽어오는 법을 배웠습니다~!
chunksize 사용 방법
chunksize = 10**4
for cnt, chunk in enumerate(pd.read_csv(filename, chunksize=chunksize)):
do_something(chunk)
↑↑↑ 코드 설명
- chunksize: loop 때 파일에서 읽어올 row 수입니다. 저는 한 번에 10,000개 row를 읽어온다고 설정했습니다.
- pd.read_csv(chunksize) : csv를 읽어올 때 옵션에 chunksize를 추가하면 몇 개의 row를 읽어올지 설정할 수 있습니다.
- do_somthing(chunk) : chunk가 읽어온 데이터를 의미합니다. do_something은 함수인데, 여기에 원하는 함수를 넣거나 하는 등 하고싶었던 처리를 지정해주면 됩니다.
사용 예시
먼저 데이터를 불러와서 처리하려고 했던 함수를 지정합니다.
def tosql(data):
data.to_sql('native', engine, if_exists='append', index=False, schema='test')
그리고 읽어오는 for문 작성!
filename='NATIVE.txt'
chunksize=10**4
for cnt, chunk in enumerate(pd.read_csv(filename, sep="|", encoding='utf-8', chunksize=chunksize)):
tosql(chunk)
print(cnt+1, "회 진행 중===")
도대체 row 수가 얼만큼이었길래 메모리가 부족했는지 알고 싶어서 몇 회째 진행 중인지 프린트하도록 설정했습니다.
그 결과...!?
52,729,604개 행.. ㅎㅎㅎ
큰 용량이었네요ㅋㅋㅋㅋㅋㅋ
LIST
'데이터 분석' 카테고리의 다른 글
[SAS OnDemand for Academic] 클라우드 기반 SAS 체험하기 (0) | 2021.07.07 |
---|---|
[Pandas/skiprows] 데이터 중간부터 읽어오기 (0) | 2021.07.04 |
[LSTM/GRU] 주식가격 예측 모델 구현하기 (8) | 2021.06.01 |
[푸리에 변환] 신호 데이터 전처리 - Fast Fourier Transformation (1) | 2021.05.20 |
[Python/datatable] 용량 큰 csv파일 빠르게 읽기 (0) | 2021.05.20 |