[파이썬] 엑셀 파일 빠르게 읽는 방법(dask, csv, xlsx)

반응형
    반응형

    엑셀 파일 빠르게 읽어보자

    빅데이터를 다루다보면 엑셀 파일 불러올 수 밖에 없는데 데이터 자체가 크다보니 불러오는 시간이 많이 소요됩니다. 이걸 여러번 불러온다면 곤욕이 따로 없겠죠?

    이전 포스팅에서 xlsx에서 csv로 변환하는 방법을 다뤘었는데 csv로 변환하고 읽는 속도가 약 70배 빨라지는 것을 알 수 있었습니다. 이번 포스팅에서는 본격적으로 불러오는 속도를 극대화하는 방법에 대해 소개할까 합니다.

    DASK 모듈 이용하기

    방법은 생각보다 간단합니다.
    데이터를 불러올 때 병렬처리를 한다면 보다 빠르게 불러올 수 있게 됩니다.
    그런데 이걸 코드로 만들어내면 귀찮아지니 다 만들어진 모듈을 사용해서 간편하게 불러올 수 있을 거라 생각합니다.

    DASK라는 모듈을 쓸 건데요. 이 모듈은 파이썬에서 분산 병렬 컴퓨팅을 하기 위한 라이브러리입니다. pandas와 가장 유사한 API여서 pandas를 다루시는 분들이라면 금방 하실 수 있을겁니다. 파일을 불러올 때 병렬 처리를 시켜주는 DASK라는 모듈을 사용하겠습니다.

    설치되있지 않다면 pip을 이용해 설치를 해줍니다.

    ## 전체 설치
    pip install dask[complete]
    
    ## 부분 설치
    pip install "dask[array]"       
    pip install "dask[dataframe]"  
    pip install "dask[diagnostics]" 
    pip install "dask[distributed]"

    xlsx 파일 dask로 불러오기

    xlsx를 read_excel로 불러오면 4분 45초정도 걸렸었습니다. 이번에는 dask를 통해 불러보겠습니다.

    import dask.dataframe as dd
    from dask.delayed import delayed
    for sheet_name in sheet_name_list:
        df = delayed(pd.read_excel)(path,sheet_name=sheet_name)
        output_dataframe= dd.from_delayed(df)

    약 20초 정도 줄였습니다. 미미한 수준이네요.

    csv dask로 불러오기

    이번엔 csv를 dask로 불러보겠습니다.
    너무 빨라서 %time을 장착했습니다.

    %time df = dd.read_csv(r'C:\Users\seong\github\autopython\seller\df_results.csv')

    그냥 csv를 불렀을 때 약 3.8초가 걸렸는데 dask로 부르니 6 밀리초가 걸렸습니다. 약 600배 빨라졌네요. 1449988 rows 인데 이정도는 양이 적나봅니다.

    마치며

    결론적으로 얘기하면 시트 1개에 csv에 다 넣고 dask로 불러오는게 가장 빠른 것 같습니다.
    역시 대용량은 xlsx보다는 csv가 훨씬 낫다는 결론이 나오네요. 그동안 어떻게 하면 엑셀파일을 불러오는 속도를 높일까에 대한 연구(?)를 했었는데 이제야 마무리가 되는 것 같습니다.

     

    그동안 한 시도들의 대한 내용입니다. 참고하실 분들은 참고하시기 바랍니다.

     

    엑셀 불러오기속도 개선편
    1편 : [Pandas] 엑셀 시트 여러개 불러오기(보다 쉬운 관리)

    2편 :[파이썬] xlsx 파일 csv로 변환하기

    3편 : 파이썬 엑셀 파일 빠르게 읽는 방법(dask, csv, xlsx) - 현재 포스팅

     

    댓글

    Designed by JB FACTORY

    ....