Skip to content

DuckDB와 Pandas를 사용한 데이터 분석 방법

데이터 분석에는 사용하는 도구가 큰 차이를 만들 수 있습니다. 이때 DuckDB와 Pandas가 등장합니다. 이 둘은 데이터 분석 세계에서 큰 반향을 일으키고 있습니다. 이 글에서는 이 도구들의 특징, 차이점 및 어떻게 함께 작업하여 데이터 분석 작업을 더욱 빠르고 효율적으로 할 수 있는지 소개합니다.

DuckDB란 무엇인가?

먼저 DuckDB부터 알아보겠습니다. DuckDB는 C++로 작성된 인메모리 분석 데이터베이스입니다. 분석 SQL 쿼리와 데이터 집약적 작업을 지원하도록 설계되었습니다. 그리고 가장 중요한 것은 DuckDB가 빠르다는 것입니다. 정말 빠릅니다. 이는 빠른 인메모리 데이터베이스로 설계되어 빠른 작업에 적합합니다.

하지만 속도뿐만이 아닙니다. DuckDB는 효율성도 갖추고 있습니다. 대량의 데이터세트에서 복잡한 쿼리를 실행할 수 있도록 설계되었으며, 이는 많은 양의 데이터를 처리해야 할 때 큰 장점입니다. 그리고 가장 좋은 점은 DuckDB가 Pandas DataFrames와 원활하게 통합된다는 것입니다. 데이터를 이동할 필요 없이 이러한 쿼리를 직접 실행할 수 있습니다. 얼마나 멋진 일인가요?

Pandas란 무엇인가?

이제 Pandas에 대해 이야기해보겠습니다. 데이터 분석에 관심이 있다면, Pandas를 접한 적이 있을 것입니다. Python에서 사용되는 유연한 데이터 분석 라이브러리로, 많은 사람들에게 인기가 있습니다. 다양한 데이터 형식과 크기를 처리할 수 있으며, 대부분은 사용하기 매우 직관적입니다.

그러나 여기서 흥미로운 것이 있습니다. SQL에 익숙하다면 복잡한 데이터 변환을 다룰 때 얼마나 강력할 수 있는지 알고 있을 것입니다. 이때 DuckDB가 등장합니다. DuckDB의 속도와 효율성을 Pandas의 유연성과 결합함으로써, 데이터 분석에 강력한 도구를 얻게 됩니다.

Python Pandas 데이터프레임에서 더 이상의 코드 없이 데이터 시각화를 빠르게 만들어보세요.

PyGWalker는 시각화를 통한 탐색적 데이터 분석을 위한 Python 라이브러리입니다. PyGWalker (opens in a new tab)는 파이썬 데이터프레임(그리고 polars 데이터프레임)을 tableau-alternative 사용자 인터페이스로 변환하여, Jupyter Notebook 데이터 분석 및 데이터 시각화 작업을 간단화할 수 있습니다.

PyGWalker를 사용한 데이터 시각화 (opens in a new tab)

DuckDB와 Pandas 비교

그럼 DuckDB와 Pandas를 각각 살펴보았으니, 어떤 점에서 다른지 알아보겠습니다.

DuckDB 대 Pandas

성능 면에서 DuckDB가 분명히 유리합니다. 대용량 데이터세트를 다룰 때, DuckDB는 더 빠르고 메모리를 덜 소비합니다. 하지만 그것만이 아닙니다. DuckDB는 SQL 기능면에서도 빛을 발합니다. DuckDB를 사용하여 Pandas DataFrames에서 SQL 쿼리를 실행할 수 있으며, SQL보다 Python을 더 편하게 사용하는 경우에는 게임 체인저가 될 수 있습니다.

반면 Pandas도 나쁘지 않습니다. Pandas는 매우 유연하고 강력하며, 다양한 데이터 형식과 크기를 처리할 수 있습니다. 또한 매우 직관적으로 사용할 수 있으므로 항상 장점이 됩니다.

그러나 마음에 드는 도구를 선택해야 할 필요는 없습니다. 실제로 DuckDB와 Pandas는 함께 사용될 때 가장 효과적으로 작동합니다. DuckDB의 속도와 효율성을 Pandas의 유연성과 결합함으로써, 데이터 분석에 강력한 도구를 얻게 됩니다.

하지만 제 말을 믿지 마시고, 몇 가지 예시를 살펴보겠습니다.

DuckDB와 Pandas 시작하기

예시를 살펴보기 전에 DuckDB와 Pandas를 시작하는 방법에 대해 먼저 알아보겠습니다. 걱정하지 마세요, 아주 간단합니다.

설치 가이드

먼저, DuckDB와 Pandas를 설치해야 합니다. Python을 사용하고 있다면, Python 패키지 설치 도구인 pip을 사용하여 아래와 같이 설치할 수 있습니다:

pip install duckdb pandas

이렇게 하면 DuckDB와 Pandas가 설치되어 사용할 준비가 됩니다.

Pandas와 DuckDB 설정하기

DuckDB와 Pandas를 설치한 후에는 두 라이브러리를 함께 사용할 수 있습니다. 첫 번째 단계는 Python 스크립트 또는 Jupyter 노트북에서 라이브러리를 가져오는 것입니다. 다음과 같이 작성하면 됩니다.

import duckdb
import pandas as pd

이 코드 라인으로, Python에게 스크립트나 노트북에서 DuckDB와 Pandas 라이브러리를 사용하고 싶다는 것을 알립니다.

DuckDB를 사용하여 Pandas DataFrames 쿼리하기

DuckDB와 Pandas를 설정했으므로, 이제 DuckDB를 사용하여 Pandas DataFrames를 쿼리하는 방법에 대해 알아보겠습니다. 이것이 마법이 일어나는 곳입니다.

DataFrame에 대한 기본 SQL 쿼리

DuckDB를 사용하면 Pandas DataFrames에서 직접 SQL 쿼리를 실행할 수 있습니다. 이는 SQL의 힘과 익숙함을 활용하여 데이터를 조작하고 분석할 수 있음을 의미합니다. 예를 들어 보겠습니다:

# Pandas DataFrame 생성
df = pd.DataFrame({
   'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
   'C': np.random.randn(8),
   'D': np.random.randn(8)
})
 
# DuckDB를 사용하여 DataFrame에서 SQL 쿼리 실행
result = duckdb.query("SELECT A, AVG(D) FROM df GROUP BY A").to_df()

위 예시에서는 Pandas DataFrame을 생성한 다음 DuckDB를 사용하여 쿼리를 실행합니다. 쿼리는 'A' 열의 고유한 값별로 'D' 열의 평균을 계산합니다. 결과는 쿼리 결과를 담은 또 다른 DataFrame입니다.

DuckDB를 사용한 고급 SQL 작업

하지만 DuckDB는 기본 SQL 쿼리뿐만 아니라 조인, 윈도우 함수 및 심지어 머신러닝 작업과 같은 고급 작업에도 사용할 수 있습니다. 다음은 조인 작업의 예입니다.

# 두 개의 Pandas DataFrame 생성
df1 = pd.DataFrame({
   'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
   'C': np.random.randn(8),
   'D': np.random.randn(8)
})
 
df2 = pd.DataFrame({
   'A': ['foo', 'bar', 'baz', 'bat'],
   'E': ['apple', 'orange', 'banana', 'grape']
})
 
# DuckDB를 사용하여 DataFrame에서 SQL 조인 작업 실행
result = duckdb.query("SELECT df1.A, df1.B, df2.E FROM df1 JOIN df2 ON df1.A = df2.A").to_df()

이 예제에서는 두 개의 Pandas DataFrame을 생성하고 DuckDB를 사용하여 그들에 대한 SQL 조인 작업을 실행합니다. 결과는 조인된 데이터를 가진 새로운 DataFrame입니다.

번거로운 코드 없이 Python Pandas Dataframe에서 데이터 시각화를 빠르게 만들고 싶으신가요?

PyGWalker는 시각화가 포함된 타블로 스타일의 사용자 인터페이스로 pandas 데이터프레임(및 polars 데이터프레임)을 변환하여, Jupyter Notebook 데이터 분석 및 데이터 시각화 워크플로우를 간소화해주는 Python 라이브러리입니다.

PyGWalker for Data visualization (opens in a new tab)

결론

이것은 빙산의 일각에 불과합니다. DuckDB와 Pandas를 사용하면 데이터 분석 작업을 더 빠르고 효율적이며 직관적으로 수행할 수 있습니다. 그러니 왜 한 번 시도해 보지 않으시겠어요? 그냥 당신이 찾고 있던 동적인 동료라는 것을 알게 될지도 모릅니다.

자주 묻는 질문

DuckDB는 Pandas보다 빠른가요?

네, DuckDB는 일반적으로 대용량 데이터셋에 대한 SQL 쿼리 실행에 있어 Pandas보다 빠릅니다. 이는 DuckDB가 속도와 효율성을 위해 설계된 인메모리 분석용 데이터베이스이기 때문입니다. 하지만 실제 성능은 구체적인 작업 및 데이터셋의 크기에 따라 다를 수 있습니다.

DuckDB와 Polars의 차이점은 무엇인가요?

DuckDB와 Polars는 모두 데이터 분석에 사용되는 도구이지만, 몇 가지 중요한 차이점이 있습니다. DuckDB는 대용량 데이터셋에서 SQL 쿼리를 실행하는 데 특화된 인메모리 분석용 데이터베이스입니다. 반면, Polars는 Rust와 Python으로 구현된 DataFrame 라이브러리로서 빠르고 유연하게 설계되었습니다. DuckDB는 주로 SQL 기능을 제공하는 데 중점을 두고 있으며, Polars는 Pandas와 유사한 DataFrame API를 제공합니다.

DuckDB는 멀티스레드인가요?

네, DuckDB는 멀티스레드입니다. 쿼리를 실행하기 위해 여러 개의 스레드를 사용하며, 멀티코어 시스템에서 큰 성능 향상을 가져올 수 있습니다. 이는 DuckDB가 특정 작업에 대해 다른 데이터 분석 도구보다 더 빠를 수 있는 이유 중 하나입니다.

SQLite는 Pandas보다 빠른가요?

SQLite와 Pandas는 서로 다른 목적으로 사용되며 작업에 따라 성능이 달라질 수 있습니다. SQLite는 데이터 저장 및 검색에 최적화된 데이터베이스 엔진이며, Pandas는 데이터 조작과 변환에 능숙한 데이터 분석 라이브러리입니다. 복잡한 SQL 쿼리가 포함된 작업의 경우 SQLite가 더 빠를 수 있습니다. 그러나 복잡한 데이터 조작 작업의 경우 Pandas가 더 빠를 수 있습니다. 두 도구를 함께 사용하면 데이터 분석에 강력한 도구를 제공할 수 있습니다.