본문 바로가기
Programming/Python

[Python] pandas 파일 로딩 속도 비교 (CSV vs. Pickle 포맷)

by a voyager 2021. 6. 2.
728x90
반응형

Hong Kong Island seen from West Kowloon Cultural District

 

[Python] Pandas 파일 로딩 속도 비교 (CSV vs. Pickle)

 

0. Motivation

 

시그널 프로세싱에 관련된 데이터를 분석하게 되었다. 어떤 시그널이 다양한 조건에서 시간에 따라 기록된 데이터를 분석하여, 네트워크 모델을 세우는 것이 목표이다.

csv 파일로 저장된 많은 데이터가 내 앞에 떨어졌다. 얼핏 보니 데이터가 아주 엉망이다. 시그널을 기록한 시간의 간격이 일정하지 않고 제멋대로다. 설상가상으로 어떤 데이터셋은 중간에 중복되어 기록된 것들도 눈에 띈다. 모델링까지 가는 길이 쉽지는 않아 보인다.

데이터를 cleaning up 하는 코드를 먼저 만들어 보기로 했다. 그리고 정제된 데이터를 따로 저장하여, 앞으로의 분석에서 바로 이용할 수 있게 하는 것이다.

갑자기 궁금해졌다. csv와 pickle 중 어느 것이 나중에 데이터 로딩에 효율적일까. 그래서 간단하게 테스트해 보았다. 의외로 큰 차이가 있는 것으로 나와 포스팅으로 남겨본다.

 

 

1. CSV와 Pickle 파일이란?

 

데이터 분석이나 머신러닝 작업에서 데이터를 읽어 들이는 과정은 필수이다. 이미지를 제외한 넘버로 이루어진 데이터는 주로 csv파일이 대부분이다. 여기에서 csv는 comma-separated values의 약자로 각 숫자들이 콤마로 구분되어 행과 열에 맞춰 나열된 데이터 포맷을 말한다. 엑셀이 바로 이 csv파일의 대표적 예이다.

Pickle 파일은 pickle이라는 파이썬 고유 라이브러리에서 다뤄지는 데이터 포맷이다. 매뉴얼에 따르면 Pickle은 계층적 구조를 가지는 python의 객체를 binary stream으로 전환(serialization)해준다고 한다. 그렇기에 저장할 수 있는 데이터 구조에 제한이 없고 python-specific이기 때문에 처리속도가 빠르다는 것이다. 하지만 이 포맷의 단점은 파이썬 내에서만 접근이 가능하다는 것과 csv처럼 데이터 전환 없이 미리보기를 할 수 없다는 것이다.

 

 

2. 파일 로딩 속도 비교

 

참고로 이 테스트는 M1 맥북 에어로 진행하였다. 두 다른 형식의 파일의 로딩의 성능을 비교하는 것이니 걸린 시간의 상대적 차이가 중요할 것이다. 우선, 준비한 csv와 pickle파일들의 이름을 각기 다른 리스트 변수에 저장한다. 각각 84개의 파일이 있고, 이 두 그룹의 데이터는 서로 동일하다.

 

csvFiles, pklFiles = [], [] 
for c in contents: 
	if "csv" in c: 
    	csvFiles.append(os.path.join(newPath,c)) 
    else: 
	    pklFiles.append(os.path.join(newPath,c)) 
        
print("number of csv files: {}".format(len(csvFiles))) 
print("number of pickle files: {}".format(len(pklFiles)))

 

CSV 파일 읽어 들이기

우선 csv파일을 pandas read_csv함수를 이용해 읽고, df_csv리스트에 배열의 형태로 저장한다. 84개의 파일을 읽는데 약 1.36초가 걸렸다.

 

# loading csv .. 

tic = time.time() 

df_csv = [] 
for f in csvFiles: 
	df_csv.append(pd.read_csv(f,index_col=None)) 
    
print(time.time() - tic, "sec")

 

pickle 파일 읽어 들이기

반면, 동일한 갯수의 pickle 84개의 파일을 읽는데 약 0.14초가 걸려 10배 정도 빠른 것으로 측정되었다.

 

# loading pickle .. 

tic = time.time() 

df_pkl = [] 

for f in pklFiles: 
	df_pkl.append(pd.read_pickle(f)) 

print(time.time() - tic, "sec")

 

마치며

두 확장자의 파일을 pandas로 읽은 것은 데이터가 dataframe의 구조로 저장되었기 때문이다. 간단한 테스트이고, 어느 포맷을 선택하든 일하는 데 전혀 지장을 줄 요인은 아닐 것이다.

 

Python Pickle | What is Serialization in Python with Example

 

Python Pickle | What is Serialization in Python with Example - DataFlair

Python Pickle tutorial,what is Python Serialization,Pickle vs marshal vs json, Python Pickle Module Interface, Python Pickle Exceptions, Pickler & Unpickler

data-flair.training

 

728x90
반응형

댓글