본문 바로가기
프로그래밍/기타 Python 모듈

[Modin] Pandas 보다 빠른 Modin 소개

by 부자 꽁냥이 2022. 4. 15.

이번 포스팅에서는 Pandas 보다 빠른 처리 속도를 자랑하는 Modin에 대해서 알아보고자 한다. Pandas는 내 주력 모듈(라이브러리)이다. 하지만 가끔 답답한 속도와 메모리 뻥튀기 현상 때문에 애를 먹은 적이 많다. R에서는 data.table이라는 라이브러리가 있어서 같은 기능이지만 Pandas보다 훨씬 빨라서 의아한 적이 있었다.

 

R에서는 데이터 처리 속도를 향상시키기 위한 라이브러리들이 개발되었는데 도대체 파이썬에서는 Pandas를 대체할 뭔가가 없는지 찾아보다가 Modin이라는 친구를 만났다. 이게 기존 Pandas DataFrame과 호환이 잘되고 함수 사용법 또한 거의 같다고 한다. 

 

뭔가 Modin이 획기적이라는 생각이 들어서 홈페이지 개발 문서를 보고 공부하면서 사용법과 Pandas와의 속도 비교를 실험한 결과를 포스팅해보려고 한다.

 

이번 포스팅에서 다루는 내용은 다음과 같다.

 

1. Modin이란 무엇인가?

2. Modin 설치

3. Modin과 Pandas의 속도차이


   1. Modin이란 무엇인가?

 

Modin이 무엇인지 궁금해서 홈페이지에 들어가 보았다.

홈페이지 들어가자마자 Modin의 무엇인지 알 수 있는 대목이 있었다(빨간 줄). (어설픈 영어 실력으로) 해석해보니 Modin은 Ray나 Dask와 같은 병렬 프로그래밍 엔진을 이용하여 Pandas의 처리 속도를 쉽게 향상해주는 라이브러리이며 Pandas와의 통합과 호환이 수월하다.

 

아래 그림은 Pandas와 Modin의 CPU 사용 방식을 나타낸 것이다.

 

Pandas와 Modin의 처리 비교 (출처 : Get faster pandas with Modin, even on your laptops.)

Pandas는 PC에 여러 코어가 있다고 하더라도 하나의 코어만 사용하고 나머지 코어는 놀고 있지만(Idle) Modin은 여러 코어를 사용하여 처리 속도가 빠르다고 한다.

 

글을 읽어보니 Modin 개발자가 나와 같은 답답함에 Pandas를 개선하고 싶었나 보다. Modin이 좋아 보이는 이유가 import 문을 바꿔주면 Pandas로 이루어진 기존 코드를 (수정하지 않고) 바로 사용할 수 있다는 점이다. 아직 제대로 사용해보진 못했지만 나의 가려운 부분을 긁어줄 수 있을 거란 생각에 기대감이 들었다!


   2. Modin 설치

Modin 설치는 아래 명령을 통해 설치한다.

pip install modin[all]
반응형

   3. Modin과 Pandas의 속도 차이

 

이번엔 Pandas와 Modin의 속도 차이를 비교해보자. 속도 비교를 위해 120MB 정도 되는 데이터를 이용했다.

이 데이터는 여기에서 다운받을 수 있다.

 

먼저 Modin과 Pandas 그리고 기타 필요한 모듈을 임포트한다. 이때 병렬 엔진은 ray를 선택했고 ray.init()를 통해 Ray 드라이버를 실행한다. 드라이버 실행한다는 뜻은 잘은 모르겠지만 병렬 처리를 위한 클러스터를 만들어 주는 것 같다.

 

import modin.pandas as mpd
import pandas as pd

import time
import ray
ray.init() # 병렬처리를 위한 클러스터 구축

 

이제 Pandas의 세 가지 대표적인 함수 read_csv, concat, apply의 처리 속도를 Modin과 비교해보려고 한다.

1) read_csv

먼저 read_csv 처리 속도 차이를 실감해보자.

 

아래는 Pandas의 read_csv를 이용하여 데이터를 불러오고 실행 시간이 얼마인지 알려주는 코드다.

start = time.time()
pandas_df = pd.read_csv('./yellow_tripdata_2021-01.csv', parse_dates=["tpep_pickup_datetime", "tpep_dropoff_datetime"], quoting=3)
end = time.time()
pandas_duration = end - start
print("Time to read with pandas: {} seconds".format(round(pandas_duration, 3)))

 

4초 걸렸다!

 

이번엔 Modin의 read_csv로 데이터를 불러와보자. 얼마나 걸릴까?

 

start = time.time()
modin_df = mpd.read_csv('./yellow_tripdata_2021-01.csv', parse_dates=["tpep_pickup_datetime", "tpep_dropoff_datetime"], quoting=3)
end = time.time()
modin_duration = end - start
print("Time to read with Modin: {} seconds".format(round(modin_duration, 3)))
print("Modin is {}x faster than pandas at `read_csv`!".format(round(pandas_duration / modin_duration, 2)))

 

2초 정도 걸렸다. 이는 Pandas 보다 약 2배 빠른 속도라고 할 수 있다.

2) concat

이번엔 데이터를 하나로 합쳐줄 때 사용하는 concat의 속도를 비교해보자. 먼저 Pandas 부터~

start = time.time()
big_pandas_df = pd.concat([pandas_df for _ in range(25)])
end = time.time()
pandas_duration = end - start
print("Time to concat with pandas: {} seconds".format(round(pandas_duration, 3)))

 

4.6초 정도 걸렸다.

 

다음은 Modin!!

 

start = time.time()
big_modin_df = mpd.concat([modin_df for _ in range(25)])
end = time.time()
modin_duration = end - start
print("Time to concat with Modin: {} seconds".format(round(modin_duration, 3)))
print("Modin is {}x faster than pandas at `concat`!".format(round(pandas_duration / modin_duration, 2)))

 

0.063초 !! Modin은 concat 함수를 처리하는 데 있어 Pandas보다 70배 넘게 빠르다는 것을 보여준다.

3) apply

이번엔 apply함수의 처리 속도를 비교해보고자 한다. 먼저 Pandas를 살펴보자.

start = time.time()
rounded_trip_distance_pandas = big_pandas_df["trip_distance"].apply(round)

end = time.time()
pandas_duration = end - start
print("Time to apply with pandas: {} seconds".format(round(pandas_duration, 3)))

 

12.657초가 걸렸다. Modin은 과연?

 

start = time.time()
rounded_trip_distance_modin = big_modin_df["trip_distance"].apply(round)

end = time.time()
modin_duration = end - start
print("Time to apply with Modin: {} seconds".format(round(modin_duration, 3)))
print("Modin is {}x faster than pandas at `apply` on one column!".format(round(pandas_duration / modin_duration, 2)))

 

 

0.485초 걸렸다. 이는 Pandas 보다 26배 더 빠른 것이다.


4) 결론

Modin과 Pandas의 read_csv, concat, apply 함수의 처리 속도를 비교해보았다. 세 경우 모두 Modin의 속도가 빨랐다.

 

아래 그림은 Modin과 Pandas의 read_csv, concat, apply의 처리 속도 비교 결과이다.

Modin, Pandas 속도 비교 (출처: Modin 홈페이지)

역시나 concat에서 가장 큰 속도 차이를 보인다. 아래 그림은 앞서 살펴본 함수 외에도 Modin이 Pandas보다 빠르다는 것을 알려준다.

 

Pandas와 Modin의 연산 처리 시간 비교 (출처 : How we parallelized 600+ pandas functions with Modin)

 

지금까지의 내용으로 결론을 내린다면 Modin은 Pandas보다 빠르다. 2020년 7월 기준으로 Modin은 Pandas 기능의 80% 이상을 구현했다고 하는데 지금은 2022년이니까 100%가 되지 않았을까 하는 마음이 들었다. 이상 내가 내린 결론은 Modin은 그 활용가치와 공부할 만한 가치가 매우 높다는 것이다.

 

이제 Modin을 자주 애용해야겠다.


지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 

참고자료

Get faster pandas with Modin, even on your laptops.

Modin 홈페이지

 

Scale your pandas workflow by changing a single line of code — Modin 0.14.0+0.gc5f623f.dirty documentation

To use Modin, replace the pandas import: Scale your pandas workflow by changing a single line of code Modin uses Ray or Dask to provide an effortless way to speed up your pandas notebooks, scripts, and libraries. Unlike other distributed DataFrame librarie

modin.readthedocs.io

The Modin view of Scaling Pandas

How we parallelized 600+ pandas functions with Modin

 


댓글


맨 위로