시도해야 할 Pandas의 5가지 경량 대안


작성자별 이미지
# 소개
개발자가 사용하는 팬더 데이터 조작을 위한 것이지만, 특히 대규모 데이터 세트의 경우 속도가 느려질 수 있습니다. 이 때문에 많은 사람들이 더 빠르고 가벼운 대안을 찾고 있습니다. 이러한 옵션은 속도, 낮은 메모리 사용 및 단순성에 초점을 맞추면서 분석에 필요한 핵심 기능을 유지합니다. 이 기사에서는 시도해 볼 수 있는 팬더에 대한 5가지 경량 대안을 살펴봅니다.
# 1. 덕DB
덕DB 같다 SQLite 분석용. CSV(쉼표로 구분된 값) 파일에서 직접 SQL 쿼리를 실행할 수 있습니다. SQL을 알고 있거나 기계 학습 파이프라인을 사용하는 경우 유용합니다. 다음을 사용하여 설치하세요.
Titanic 데이터세트를 사용하고 다음과 같이 간단한 SQL 쿼리를 실행하겠습니다.
import duckdb
url = "
# Run SQL query on the CSV
result = duckdb.query(f"""
SELECT sex, age, survived
FROM read_csv_auto('{url}')
WHERE age > 18
""").to_df()
print(result.head())
산출:
sex age survived
0 male 22.0 0
1 female 38.0 1
2 female 26.0 1
3 female 35.0 1
4 male 35.0 0
DuckDB는 CSV 파일에서 직접 SQL 쿼리를 실행한 다음 출력을 DataFrame으로 변환합니다. Python의 유연성으로 SQL 속도를 높일 수 있습니다.
# 2. 극지
극선 오늘날 이용 가능한 가장 인기 있는 데이터 라이브러리 중 하나입니다. 그것은에서 구현됩니다 녹 언어이며 최소한의 메모리 요구 사항으로 매우 빠릅니다. 구문도 매우 깨끗합니다. pip를 사용하여 설치해 보겠습니다.
이제 Titanic 데이터 세트를 사용하여 간단한 예를 살펴보겠습니다.
import polars as pl
# Load dataset
url = "
df = pl.read_csv(url)
result = df.filter(pl.col("age") > 40).select(["sex", "age", "survived"])
print(result)
산출:
shape: (150, 3)
┌────────┬──────┬──────────┐
│ sex ┆ age ┆ survived │
│ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ i64 │
╞════════╪══════╪══════════╡
│ male ┆ 54.0 ┆ 0 │
│ female ┆ 58.0 ┆ 1 │
│ female ┆ 55.0 ┆ 1 │
│ male ┆ 66.0 ┆ 0 │
│ male ┆ 42.0 ┆ 0 │
│ … ┆ … ┆ … │
│ female ┆ 48.0 ┆ 1 │
│ female ┆ 42.0 ┆ 1 │
│ female ┆ 47.0 ┆ 1 │
│ male ┆ 47.0 ┆ 0 │
│ female ┆ 56.0 ┆ 1 │
└────────┴──────┴──────────┘
Polars는 CSV를 읽고, 연령 조건에 따라 행을 필터링하고, 열의 하위 집합을 선택합니다.
# 3. 파이애로우
파이애로우 컬럼형 데이터를 위한 경량 라이브러리입니다. Polars와 같은 도구는 아파치 애로우 속도와 메모리 효율성을 위해. Pandas를 완전히 대체할 수는 없지만 파일 읽기 및 전처리에 탁월합니다. 다음을 사용하여 설치하세요.
이 예에서는 다음과 같이 CSV 형식의 Iris 데이터 세트를 사용하겠습니다.
import pyarrow.csv as csv
import pyarrow.compute as pc
import urllib.request
# Download the Iris CSV
url = "
local_file = "iris.csv"
urllib.request.urlretrieve(url, local_file)
# Read with PyArrow
table = csv.read_csv(local_file)
# Filter rows
filtered = table.filter(pc.greater(table['sepal_length'], 5.0))
print(filtered.slice(0, 5))
산출:
pyarrow.Table
sepal_length: double
sepal_width: double
petal_length: double
petal_width: double
species: string
----
sepal_length: [[5.1,5.4,5.4,5.8,5.7]]
sepal_width: [[3.5,3.9,3.7,4,4.4]]
petal_length: [[1.4,1.7,1.5,1.2,1.5]]
petal_width: [[0.2,0.4,0.2,0.2,0.4]]
species: [["setosa","setosa","setosa","setosa","setosa"]]
PyArrow는 CSV를 읽고 이를 열 형식으로 변환합니다. 각 열의 이름과 유형은 명확한 스키마에 나열됩니다. 이 설정을 사용하면 대규모 데이터 세트를 빠르게 검사하고 필터링할 수 있습니다.
# 4. 모딘
모딘 새로운 라이브러리를 배우지 않고도 더 빠른 성능을 원하는 사람을 위한 것입니다. 동일한 pandas API를 사용하지만 작업을 병렬로 실행합니다. 기존 코드를 변경할 필요는 없습니다. 가져오기를 업데이트하면 됩니다. 다른 모든 것은 일반 팬더처럼 작동합니다. pip로 설치하세요:
더 나은 이해를 위해 다음과 같이 동일한 Titanic 데이터 세트를 사용하는 작은 예를 시도해 보겠습니다.
import modin.pandas as pd
url = "
# Load the dataset
df = pd.read_csv(url)
# Filter the dataset
adults = df[df["age"] > 18]
# Select only a few columns to display
adults_small = adults[["survived", "sex", "age", "class"]]
# Display result
adults_small.head()
산출:
survived sex age class
0 0 male 22.0 Third
1 1 female 38.0 First
2 1 female 26.0 Third
3 1 female 35.0 First
4 0 male 35.0 Third
Modin은 작업을 CPU 코어 전체로 분산하므로 추가 작업을 수행하지 않고도 더 나은 성능을 얻을 수 있습니다.
# 5.다스크
RAM을 늘리지 않고 빅데이터를 어떻게 처리합니까? 어둠 컴퓨터의 RAM(Random Access Memory)보다 크기가 더 큰 파일이 있을 때 탁월한 선택입니다. 지연 평가를 사용하므로 전체 데이터 세트를 메모리에 로드하지 않습니다. 이를 통해 수백만 개의 행을 원활하게 처리할 수 있습니다. 다음을 사용하여 설치하세요.
pip install dask[complete]
이를 시험해 보기 위해 다음과 같이 Chicago Crime 데이터 세트를 사용할 수 있습니다.
import dask.dataframe as dd
import urllib.request
url = "
local_file = "chicago_crime.csv"
urllib.request.urlretrieve(url, local_file)
# Read CSV with Dask (lazy evaluation)
df = dd.read_csv(local_file, dtype=str) # all columns as string
# Filter crimes classified as 'THEFT'
thefts = df[df['Primary Type'] == 'THEFT']
# Select a few relevant columns
thefts_small = thefts[["ID", "Date", "Primary Type", "Description", "District"]]
print(thefts_small.head())
산출:
ID Date Primary Type Description District
5 13204489 09/06/2023 11:00:00 AM THEFT OVER $500 001
50 13179181 08/17/2023 03:15:00 PM THEFT RETAIL THEFT 014
51 13179344 08/17/2023 07:25:00 PM THEFT RETAIL THEFT 014
53 13181885 08/20/2023 06:00:00 AM THEFT $500 AND UNDER 025
56 13184491 08/22/2023 11:44:00 AM THEFT RETAIL THEFT 014
필터링(Primary Type == 'THEFT') 및 열 선택은 게으른 작업입니다. Dask는 모든 것을 한 번에 로드하는 대신 데이터를 덩어리로 처리하기 때문에 필터링이 즉시 발생합니다.
# 결론
우리는 팬더에 대한 5가지 대안과 이를 사용하는 방법을 다루었습니다. 기사에서는 내용을 단순하고 집중적으로 유지합니다. 자세한 내용은 각 라이브러리의 공식 문서를 확인하세요.
문제가 발생하면 댓글을 남겨주시면 도와드리겠습니다.
칸왈 메린 데이터 과학과 AI와 의학의 교차점에 대한 깊은 열정을 가진 기계 학습 엔지니어이자 기술 작가입니다. 그녀는 “ChatGPT를 통한 생산성 극대화”라는 전자책을 공동 집필했습니다. 2022년 APAC Google Generation Scholar로서 그녀는 다양성과 학문적 우수성을 옹호하고 있습니다. 그녀는 또한 Tech Scholar, Mitacs Globalink Research Scholar 및 Harvard WeCode Scholar에서 Teradata Diversity로 인정받았습니다. Kanwal은 STEM 분야에서 여성의 역량을 강화하기 위해 FEMCodes를 설립한 변화에 대한 열렬한 옹호자입니다.


Post Comment