2023. 3. 16. 08:11ㆍit
0. 서론
데이터 분석 및 처리에 널리 사용되는 Pandas에는 유연성과 편리성 때문에 많은 사용자들이 활용하고 있습니다. 그러나 대용량 데이터에 대한 처리 속도나 메모리 사용 등의 한계 때문에 대규모 데이터를 다루기에는 한계가 있습니다. 이러한 문제를 해결하기 위해 새로운 데이터 처리 도구로서 polars가 등장하였습니다.
1. polars란 무엇인가?
polars는 Rust로 구현된 데이터 분석 및 처리 도구로서 대용량 데이터에 대한 처리 성능이 뛰어나고, 메모리 사용량이 적습니다. 이러한 장점 덕분에 polars는 대규모 데이터 처리에 매우 효과적입니다. polars는 Pandas와 비슷한 API를 제공하며, 더 나은 성능을 위해 C++과 Rust를 사용합니다. 또한, Python과 Rust 간의 상호 운용성을 보장하도록 설계되어 있습니다.
2. polars와 Pandas의 비교
처리 성능: polars는 대용량 데이터 처리에 최적화되어 있으며, Pandas보다 빠른 속도와 적은 메모리 사용량을 보장합니다.
다양한 데이터 타입: polars는 Pandas보다 더 다양한 데이터 타입을 지원합니다.
병렬 처리: polars는 병렬 처리를 지원하여 대용량 데이터 처리를 더욱 빠르게 할 수 있습니다.
3. polars로 Scikit-learn 활용하기
Scikit-learn과 같은 기계 학습 라이브러리는 Polars에서 직접 사용할 수 없습니다. 그러나 Polars는 NumPy와 호환되므로 NumPy 배열을 사용하여 Scikit-learn과 같은 머신러닝 라이브러리와 함께 사용할 수 있습니다. 또한, Polars는 일부 통계 및 머신러닝 관련 함수도 제공하므로, 일부 간단한 분석 및 모델링 작업을 수행할 수 있습니다. 따라서 Polars는 대용량 데이터 처리와 함께 Scikit-learn 등의 머신러닝 라이브러리와 결합하여 사용할 수 있는 좋은 도구입니다.
3.1 polars로 Scikit-learn 사용 예제
Polars와 Scikit-learn을 함께 사용하여 붓꽃 데이터를 예제입니다.
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import polars as pl
# load iris dataset
iris = load_iris()
# convert iris dataset to pandas DataFrame
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
# convert pandas DataFrame to polars DataFrame
iris_pl = pl.from_pandas(iris_df)
# split data into training and testing sets
train, test = train_test_split(iris_pl, test_size=0.2)
# convert polars DataFrame to numpy arrays
X_train, y_train = train[:, :-1].to_numpy(), train[:, -1].to_numpy()
X_test, y_test = test[:, :-1].to_numpy(), test[:, -1].to_numpy()
# create Gradient Boosting classifier
gb = GradientBoostingClassifier()
# train classifier
gb.fit(X_train, y_train)
# evaluate classifier
score = gb.score(X_test, y_test)
print(score)
4. polars의 기초 문법
4.1 read csv
import polars as pl
pl_df = pl.read_csv('data.csv')
4.2 Polars DataFrame 조작하기 ( where )
# select columns
pl_df = pl_df.select(['name', 'age'])
# filter rows
pl_df = pl_df.filter(pl.col('age') > 30)
# add a new column
pl_df = pl_df.with_column(pl.col('age') * 2, 'age_doubled')
4.3 Polars DataFrame 집계하기 ( group by )
# calculate mean
mean_age = pl_df['age'].mean()
# calculate sum
sum_age = pl_df['age'].sum()
# calculate count
count_rows = pl_df.count()
# group by city
grouped_df = pl_df.groupby('city')
# calculate mean age for each group
mean_age_by_city = grouped_df.mean('age')
4.4 Polars DataFrame join 하기
4.4.1 데이터 프레임 예제
import polars as pl
left = pl.DataFrame({
'id': [1, 2, 3],
'left_value': ['a', 'b', 'c']
})
right = pl.DataFrame({
'id': [2, 3, 4],
'right_value': ['d', 'e', 'f']
})
4.4.2 데이터 프레임 조인
4.4.2.1 Inner Join
# perform inner join
inner_join = left.join(right, on='id')
# print result
print(inner_join)
4.4.2.2 Left Join
# perform left join
left_join = left.join(right, on='id', how='left')
# print result
print(left_join)
4.4.2.2 Right Join
# perform right join
right_join = left.join(right, on='id', how='right')
# print result
print(right_join)
크게 pandas랑 문법이 다르지 않습니다. 하지만 AI/ML 분야에서 numpy로 변환하는게 조금 불편함이 있습니다. 하지만 대용량 데이터를 분석하는데, 분명 장점이 있습니다. 나중에 pandas의 메모리 문제를 해결할 수 있는 대체 방안으로 가져가는게 좋을 거 같습니다.
솔직히 pandas 터지면 답 없잖아!!
polars 기초 문법 및 데이터 분석 샘플(Scikit-learn)
'it' 카테고리의 다른 글
How to query Redis Sorted Set value range with Python (with zrange)? (0) | 2023.03.17 |
---|---|
Polars Basic Syntax and Data Analysis Sample (with Scikit-learn) (0) | 2023.03.16 |
python datetime to unix time, convert to string (1) | 2023.03.15 |
Review of AWS Certified SAA Exam (Dump usage prohibited) (0) | 2023.03.15 |
Resolving Oracle Archive Capacity Errors: Common Commands and Solutions (0) | 2023.03.15 |