[파이썬] pandas에서 Sparse 데이터 구조

데이터 분석 및 처리를 위해 pandas를 사용하는 사람들에게 Sparse 데이터 구조에 대해 알아보는 것이 유용할 수 있습니다. 이번 글에서는 pandas에서 Sparse 데이터 구조를 만들고 사용하는 방법에 대해 알아보겠습니다.

Sparse 데이터 구조란?

Sparse 데이터 구조는 매우 큰 데이터셋에서 0 이외의 값이 드물게 나타날 때 사용되는 데이터 구조입니다. 일반적으로 대부분의 값이 0인 경우에는 Sparse 데이터 구조를 사용하면 메모리를 절약할 수 있습니다. Sparse 데이터 구조는 0이 아닌 값의 위치와 값을 저장하는 방식으로 구현됩니다.

pandas에서는 Sparse 데이터 구조를 쉽게 생성하고 사용할 수 있도록 제공하고 있습니다.

Sparse 데이터 구조 생성하기

Sparse 데이터 구조를 생성하는 가장 간단한 방법은, pandas Series나 DataFrame을 생성할 때, sparse=True 옵션을 지정하는 것입니다. 이렇게 생성된 객체는 Sparse 데이터 구조로 저장됩니다.

import pandas as pd

# Series에서 Sparse 데이터 구조 생성
s = pd.Series([0, 0, 1, 0, 2], sparse=True)
print(s)

# DataFrame에서 Sparse 데이터 구조 생성
df = pd.DataFrame({'A': [0, 1, 0, 0], 'B': [0, 0, 2, 0]}, sparse=True)
print(df)

위 예제에서는 sparse=True를 지정하여 Series와 DataFrame 객체를 생성하였습니다.

Sparse 데이터 구조 사용하기

Sparse 데이터 구조를 사용하면 희소한 값들을 효율적으로 저장하고 연산할 수 있습니다. 일반적인 pandas 연산들은 Sparse 데이터 구조에서도 동작합니다.

s1 = pd.Series([0, 0, 1, 0, 2], sparse=True)
s2 = pd.Series([0, 0, 0, 0, 3], sparse=True)

# Sparse Series 간 연산
s3 = s1 + s2
print(s3)

df1 = pd.DataFrame({'A': [0, 1, 0, 0], 'B': [0, 0, 2, 0]}, sparse=True)
df2 = pd.DataFrame({'A': [0, 0, 1, 0], 'B': [0, 0, 0, 0]}, sparse=True)

# Sparse DataFrame 간 연산
df3 = df1 + df2
print(df3)

종종 희소한 데이터를 다뤄야 하는 상황에서는 Sparse 데이터 구조를 사용하여 성능을 향상시킬 수 있습니다. 하지만 모든 연산이 sparse-aware 하지는 않으므로, 사용 전에 연산의 호환성을 확인하는 것이 중요합니다.

결과

0    0
1    0
2    1
3    0
4    5
dtype: Sparse[float64, 0]
Sparse Index: 5, dtype: float64

     A    B
0  0.0  0.0
1  1.0  0.0
2  0.0  2.0
3  0.0  0.0

위 예제에서는 각각의 Sparse 데이터 구조에 대해 연산을 수행하고 출력된 결과를 확인할 수 있습니다.

결론

pandas에서 Sparse 데이터 구조를 사용하면 대규모의 데이터셋에서도 메모리를 효율적으로 관리할 수 있습니다. Sparse 데이터 구조를 사용하면 성능을 향상시킬 수 있으며, 계산에 필요한 자원을 줄일 수 있습니다. 하지만 모든 연산이 sparse-aware 하지는 않으므로, 사용 전에 연산의 호환성을 확인하는 것이 중요합니다.