본문 바로가기
데이터 분석

[Pandas/Chunksize] 큰 용량 데이터 읽어오기

by 빅데이터1020 2021. 7. 4.
SMALL

 

2021년 문화관광 빅데이터 분석대회에 도전하게 되었습니다.

분석용 데이터를 열어보려는데, 용량이 무려 4GB가 넘었습니다.

컬럼이 12개인데 용량이 4GB면 row 수가 어마어마할 거라는 생각이 들었어요.

 

pd.read_csv() 로 읽어들이려 하니 메모리 부족 에러가 나더군요ㅠ_ㅠ

datatable.fread() 로 읽으려 해도 메모리 부족 때문에 에러가 났습니다.

 

이럴 땐 파일을 쪼개서 읽어오면 됩니다.

아래 블로그에서 유용한 정보를 얻어 파일을 쪼개서 읽어오는 법을 배웠습니다~!

 

파이썬 대용량 csv 파일 읽는 방법 정리 - Python read large size csv file

포스팅 개요 이번 포스팅은 파이썬(Python)에서 용량이 큰 csv 파일을 읽고 처리할 수 있는 방법을 정리합니다. 파이썬을 활용해서 데이터 분석 혹은 모델링 등을 하다보면 대용량의 csv 파일을 많

lsjsj92.tistory.com

 

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