2023년, 당신의 데이터 분석 챔피언 선택: Polars vs Pandas
Published on
데이터 처리 거장들인 Polars와 Pandas의 대결은 데이터 분석의 세계에서 최신 토픽이 되었습니다. Polars 0.17.0과 Pandas 2.0 버전의 출시로 두 라이브러리 모두 지배권을 놓고 대결하고 있습니다. 그러나, 데이터 처리 라이브러리의 가장 좋은 제목은 무엇일까요? 이 글은 이러한 강력한 도구의 철저한 비교를 제공하여 문법, 속도, 사용성 등을 조사하여 우승자를 결정합니다.
Polars와 Pandas: 소개
대용량 데이터셋에서 Pandas 코드 실행을 기다리는 끝없는 시간을 보낸 적이 있나요? Polars, 라이벌인 Pandas보다 상당한 속도 향상을 제공하는 고성능 라이브러리가 등장합니다. 데이터 프레임을 다루는 데에 Polars는 빠른 속도와 효율성에서 Pandas를 앞서는데 매우 빛나는 라이브러리입니다.
최근 출시된 Polars 0.17.0과 Pandas 2.0 버전 모두 대규모 데이터셋의 처리 속도를 크게 개선했습니다. Pandas 2.0의 새로운 Apache Arrow 지원은 실제로 성능을 향상시켰지만, 기본적인 연산은 여전히 NumPy 배열에서 더 빠르게 실행됩니다. 지난 주 출시된 Polars 0.17.0은 속도 향상을 위해 감탄을 받았습니다[^1^].
이제 더 깊이 파고들어 Polars가 이긴 이유를 분석해봅시다:
-
Rust 지원: Polars는 Rust를 사용하여 구축됩니다. Rust의 능력으로 직접 기계 코드로 컴파일 할 수 있으므로 Python 해석기의 필요성을 피하고 Python보다 더 빠릅니다.
-
병렬 처리: Polars는 멀티스레딩을 활용하여 병렬 실행을 가능케 하기 때문에 다중 CPU 코어에서 벡터화된 연산이 병렬로 실행됩니다.
-
Python 인터페이스: Rust를 기반으로 만들어졌지만, Polars는 Python 라이브러리로서 작동하므로 Rust의 성능 이점을 누리면서도 액세스 가능한 데이터 처리 인터페이스를 제공합니다.
-
Lazy Evaluation: Polars는 Pandas에서 사용하는 Eager 방식과 Lazy evaluation 방식 모두를 지원합니다. Lazy evaluation 방식에서 쿼리는 필요할 때에만 실행되고, Eager evaluation 방식은 즉시 실행됩니다.
이 자습서에서는 다음을 수행합니다 :
- Numpy와 PyArrow를 백엔드로 사용한 Pandas 2.0과 Polars 0.17.0의 속도 비교.
- Polars를 사용하여 간단한 Pandas 코드에서 복잡한 코드로 이전하는 방법을 설명합니다.
- 4-CPU 코어 프로세서와 32GB RAM을 사용하여 두 라이브러리의 성능 대결을 진행합니다.
설정 및 데이터셋
비교에 앞서, 로컬 머신에 최신 버전의 Polars 및 Pandas가 설치되어 있는지 확인하세요. 그렇지 않은 경우 다음 명령을 사용하여 설치하세요:
pip install polars==0.17.0 # 최신 버전의 Polars
pip install pandas==2.0.0 # 최신 버전의 Pandas
우리의 비교 대상은 30백만 개의 행과 15개의 열, 8개의 범주형 속성과 7개의 수치형 속성으로 이루어진 인공 데이터셋입니다. 이 가짜 데이터는 여기 (opens in a new tab)에서 사용할 수 있습니다.
우리 데이터셋의 예시입니다:
# Pandas
train_pd.head()
# Polars
train_pl.head()
라이브러리 로딩하기
제일 먼저 데이터를 불러오기 위해 필요한 라이브러리를 가져와야 합니다:
import pandas as pd
import polars as pl
import numpy as np
import time
데이터셋 읽기
데이터셋 읽기: Pandas 2.0 vs Polars 0.17 비교 분석
대용량 데이터셋을 처리할 때는 데이터 처리 라이브러리 선택이 모두에게 큰 차이를 불러올 수 있습니다. 이에 우리는 Pandas 2.0과 Polars 0.17의 읽기 능력을 중점적으로 비교하는 깊은 탐구를 수행합니다.
저희는 두 라이브러리의 parquet 파일 읽기 시간을 비교하여 시작합니다. Parquet은 대용량 데이터 처리 프레임 워크와 함께 사용하기 위해 최적화된 열 지향형 저장 파일 형식입니다. 이 파일들을 빠르고 효율적으로 읽는 능력은 거대한 데이터셋을 처리할 때 중요합니다.
저희의 연구에 따르면, Parquet 파일의 읽기에서는 Polars와 Pandas 2.0이 비교적 유사한 성능을 보였습니다. 그러나, Numpy 백엔드를 사용하는 Pandas는 이 작업을 수행하는 데 Polars 대비 두 배 더 많은 시간이 걸렸다는 사실은 중요합니다.
집계 연산: Polars vs. Pandas
이제 우리는 집계 함수 평가로 넘어갑니다. 이러한 연산들은 데이터 분석에서 필수적이며, 데이터 검토에 중요한 요약 통계를 제공합니다.
구문 및 간단한 쿼리 성능에 있어서, Pandas가 우수한 선택으로 나타났습니다. 그러나, 두 라이브러리의 성능 차이는 미미했습니다. Polars는 동일한 집계 함수를 사용하여 집계할 기능 목록으로 작업할 수 있기 때문에 우리가 평가한 시나리오에서는 Pandas가 제공하지 않는 고유한 장점을 제공합니다.
필터 및 선택 연산: Pandas와 Polars 대결
필터 및 선택 연산은 데이터베이스에서 데이터 추출을 위한 조건을 지정하는 작업을 의미합니다. 저희는 숫자 열 조건이 충족될 때 범주형 열에 대한 고유한 값의 수를 계산하고, 범주형 열이 특정한 값과 같을 때 모든 숫자 열의 평균을 계산하는 검증을 수행했습니다.
이 머리채 대결에서, Polars는 수치 필터 연산 실행 속도에서 Pandas보다 2 ~ 5배 빠릅니다. 그러나, Pandas는 더 적은 코드로 작성이 가능하며 문자열 (범주형 기능)을 처리 할 때 몇몇 라이브러리보다는 느리게 작동합니다.
Pandas 및 Polars DataFrame 시각화하기: PyGWalker
PyGWalker (opens in a new tab)는 Pandas 및 Polars 데이블프레임에서 쉽게 데이터 시각화를 만드는 데 도움이되는 오픈소스 파이썬 라이브러리입니다.
Python 코딩으로 복잡한 처리를 완료하고, 데이터를 가져와서 변수를 끌어와서 모든 종류의 데이터 시각화를 만들 필요가 없습니다. 운영에 대한 빠른 데모 비디오는 다음과 같습니다:
Jupyter 노트북에서 PyGWalker를 사용하는 방법은 다음과 같습니다:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
또, Kaggle 노트북/Google Colab에서도 사용 가능합니다:
Kaggle 노트북에서 PyGWalker 실행 (opens in a new tab) | Google Colab에서 PyGWalker 실행 (opens in a new tab) | PyGWalker에 ⭐️ 주기 (opens in a new tab) |
---|---|---|
(opens in a new tab) | (opens in a new tab) | (opens in a new tab) |
PyGWalker는 오픈소스 커뮤니티의 지원을 기반으로 구축되었습니다. PyGWalker GitHub (opens in a new tab)를 확인하고 ⭐️를 주시기 바랍니다!
판다스(Pandas)와 폴라스(Polars)에 대한 FAQ
이 분석에서는 판다스와 폴라스 모두 그들의 강점과 약점을 나타내고 있습니다. 이 두 라이브러리를 더 잘 이해하기 위해, 다음의 몇 가지 자주 묻는 질문을 모았습니다:
-
질문: 누군가는 왜 판다스 대신 폴라스를 선택할까요? 답변: 숫자 데이터를 다루는 등 많은 작업에서 실행 속도가 빠른 폴라스 때문에 대용량 데이터셋을 다룰 때 판다스 대신 폴라스를 선택할 수 있습니다. 그러나, 폴라스는 보다 최근에 개발된 라이브러리이기 때문에 판다스에 익숙한 사용자들은 학습 곡선이 필요할 수도 있습니다.
-
질문: 판다스가 폴라스보다 더 나은 선택인 상황이 있나요? 답변: 단순한 쿼리와 코드 간결성이 우선인 경우에는 판다스가 더 나은 선택일 수 있습니다. 또한, 판다스는 강력한 커뮤니티 지원을 갖춘 성숙한 라이브러리이기 때문에, 복잡한 데이터 조작 작업을 디버깅하거나 조언을 얻는 경우에도 유용할 수 있습니다.
-
질문: 판다스와 폴라스는 그룹 연산에서 null값(null values)을 다르게 처리합니까? 답변: 그룹 연산 중 판다스는 null값을 자동으로 제거하지만, 폴라스는 그렇지 않습니다. 이 차이점은 분석 결과에 영향을 줄 수 있으므로 라이브러리를 선택할 때 반드시 이러한 차이점을 인식해야 합니다.