일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 상관관계
- youtube data
- UDF
- Retry
- login crawling
- integrated gradient
- requests
- flask
- session 유지
- gather_nd
- Airflow
- TensorFlow
- BigQuery
- API Gateway
- subdag
- API
- Counterfactual Explanations
- XAI
- 공분산
- chatGPT
- GCP
- correlation
- grad-cam
- top_k
- tensorflow text
- hadoop
- GenericGBQException
- airflow subdag
- spark udf
- 유튜브 API
- Today
- Total
데이터과학 삼학년
Modin : Use modin to replace pandas in larger data 본문
데이터 과학에서 단연 제일 잘알려지고, 많은 사람들이 사용하는 것이 pandas라고 해도 과언이 아니다.
이 pandas를 조금 더 빠르고 효율적으로 사용할 수 있는 방법에 대해 소개하려 한다. 바로 Modin 이다.
Pandas 의 한계
pandas는 상대적으로 매우 큰 데이터셋에서 다루는데 비 효율적이며(메모리문제), 구조적으로 paralleizing이 어려운 구조를 가지고 있다. 그 이유는 아래와 같다.
1. single-threaded : multiple cores를 사용하기 어렵다는 것을 의미
2. in memory 기반으로 작동 : out-of-memory erro를 종종 경험할 수 있음
왜 pandas는 parallizing이 어려운가?
pandas 의 600여개가 넘는 functions들을 최적화하는것은 매우 어려운 일이다. 특히 각 function들은 chained가 되어질수 있기 때문에 function의 결합되어 지는 수가 많을 수록 개별적으로 최적화해야하는 부분이 기하급수적으로 많아진다.
관계형 데이터 베이스가 지난 40년간 join이나 group by 등 10개의 operators들을 최적화하는데 걸렸는데, 600개가 넘는 operator를 가진 pandas는 얼마나 더 어렵겠는가.
Modin
modin은 parallel dataframe system으로, 실제 pandas api에서 대표될 수 있는 핵심 operators를 살펴보니 20개 미만으로 확인을 했다.
The dataframe algebra operators include low-level operators such as map, explode, and reduce, relational operators such as group-by, join, rename, sort, concat, and filter, metadata manipulation operators such as infer_types, filter_by_types, to/from_labels, linear algebra operators such as transpose, and order-based operators such as window and mask.
뭐 결국에는 decompoistion하고 결합하는 방식으로 구성하여 multiple cores 를 사용하여 성능을 개선했다는 얘기다.
(자세한 것은 Modin 공식 documents 에서 확인을..)
Decomposing a dataframe along rows, columns, or cells for parallelization
Modin의 impact
Modin의 pandas와 일반 pandas간 성능 비교는 아래와 같다.
Modin의 decompostion 룰을 사용했기 때문에 multi cores를 사용할 수 있고, 그 덕에 기존 pandas에 비해 불필요한 memory copy 등을 줄여 효과적으로 성능을 개선했다.
Modin 사용법
pandas를 불러올때, modin안에 pandas를 불러 일반 pandas를 사용하듯이 하면 된다.
사용하기는 너무 쉽다!!! 한번 사용해봐야겠다.
import modin.pandas as pd
df = pd.read_csv("my_dataset.csv")
Modin 구조
참조
https://github.com/modin-project/modin
https://ponder.io/how-do-we-parallelized-600-pandas-functions-with-modin/
https://modin.readthedocs.io/en/latest/
'Python' 카테고리의 다른 글
[pandas] apply적용 (func return값이 multi일때 어떻게 적용?) (0) | 2022.04.27 |
---|---|
pandas 컬럼값 조건 변경 (0) | 2022.04.18 |
내 코드를 테스트한다. (feat. pytest) (0) | 2022.03.28 |
Python deque (0) | 2022.03.24 |
파이썬 패키지 개념 (feat. 코딩도장) (0) | 2021.11.15 |