DuckDB란 무엇인가요?!!
DuckDB를 쉽게표현하면 SQL무새입니다!!!
뭐든지간에 SQL로 표현할수 있도록 해줘요!!
DuckDB의 주요 특징
- 가벼움: DuckDB는 매우 가볍고, 추가적인 서버 설정이 필요 없습니다.
- SQL 지원: 완전한 SQL 기능을 제공하여 복잡한 쿼리 작성이 가능합니다.
- 내장형: DuckDB는 별도의 서버 프로세스가 필요 없으며, 로컬 파일로 모든 작업을 처리할 수 있습니다.
- 열지향성: 열지향형 데이터베이스로, 대용량 데이터를 다룰 때 뛰어난 성능을 발휘합니다.
- Pandas와 통합: Pandas 데이터프레임과 쉽게 통합되어 데이터 처리 및 분석을 간편하게 수행할 수 있습니다.
제일 중요한 예제!!!!
1. 우선 사용전, pkg를 설치해줍니다!!
pip install duckdb
DuckDB를 Python에서 사용하려면 먼저 패키지를 설치해야 합니다.
2. 이제 간단한 Python 기본 DF 예제로 확인해보아요!!
- 사용할 데이터!!
import duckdb
import pandas as pd
# 샘플 데이터를 만들고!!
data = {
'name': ['홍길동', '강영자', '이기욱', '황덕호'],
'age': [24, 27, 22, 32],
'city': ['대구', '광주', '서울', '제주']
}
df = pd.DataFrame(data)
df
3. DF를 메모리로 연결해서 SQL사용해 버리기!!
# DuckDB에서 데이터프레임을 SQL 테이블로 변환하여 쿼리하기
con = duckdb.connect(database=':memory:') # 메모리 내 DB 연결
## df라는 데이터 프레임에서 people이라는 Table만들고!!
con.execute("CREATE TABLE people AS SELECT * FROM df")
## 익숙한 쿼리문으로 쿼리!!
result = con.execute("SELECT * FROM people WHERE age > 25").fetchdf()
result
결과는??? 나이가 25세이상인 사람을 불러옵니다!!!
4. 이번엔 CSV 파일 읽어와서 SQL 사용해기!!!!
## csv로 저장한다음!!!!
df.to_csv('duckDB_sample.csv')
# DuckDB에 연결
con = duckdb.connect(database=':memory:')
# CSV 파일을 직접 테이블로 로드 >> csv 파일을 명시해야함!!!
con.execute("CREATE TABLE my_table AS SELECT * FROM 'duckDB_sample.csv'")
# 데이터 조회
result_csv = con.execute("SELECT * FROM my_table WHERE city = '서울'").fetchdf()
print(result_csv)
result_csv
5. 마지막으로!! 당연히 잘될거같지만,, pkl 바탕으로 해봅시다!!!
(그런데,,피클은 바로읽어오진 않고 ,DF로 불러온다음!! 쿼리하네용)
df.to_pickle('duckDB_sample.pkl')
# DuckDB에 연결
con = duckdb.connect(database=':memory:')
# Pickle 파일 로드 및 테이블로 저장
df_loaded = pd.read_pickle('duckDB_sample.pkl')
con.execute("CREATE TABLE pickle_table AS SELECT * FROM df_loaded")
# 데이터 조회
result_pkl = con.execute("SELECT * FROM pickle_table WHERE name = '강영자'").fetchdf()
result_pkl
6. 근데,, 니 정말 빠르나!? pandas와 계산속도를 비교해봅시다!!
>> 숫자데이터 1000만개 만들어서 필터링해보기 고고싱!!
import duckdb
import pandas as pd
import numpy as np
import time
# 대규모 데이터 생성
N = 10**7 # 1000만 개의 행
data = {
'id': np.arange(N),
'value': np.random.rand(N),
'category': np.random.choice(['A', 'B', 'C', 'D'], N)
}
df = pd.DataFrame(data)
# Pandas에서 필터링 작업
start_time = time.time()
filtered_pandas = df[(df['value'] > 0.5) & (df['category'] == 'A')]
pandas_time = time.time() - start_time
print(f"Pandas 필터링 시간: {pandas_time:.4f} 초")
# DuckDB에서 필터링 작업
con = duckdb.connect(database=':memory:')
con.execute("CREATE TABLE df AS SELECT * FROM df")
start_time = time.time()
filtered_duckdb = con.execute("SELECT * FROM df WHERE value > 0.5 AND category = 'A'").fetchdf()
duckdb_time = time.time() - start_time
print(f"DuckDB 필터링 시간: {duckdb_time:.4f} 초")
# 결과 출력
print(f"DuckDB가 Pandas보다 {pandas_time / duckdb_time:.2f}배 빠릅니다.")
비교해본다면!!!!?
Pandas 필터링 시간: 1.0379 초
DuckDB 필터링 시간: 0.5925 초
DuckDB가 Pandas보다 1.75배 빠릅니다.
우와..진짜 빠르네!!!
결론
DuckDB는 다양한 데이터 소스와 쉽게 통합할 수 있어, CSV나 Pickle 파일을 손쉽게 SQL 쿼리로 분석할 수 있습니다.
그리고 진짜 빠릅니다!!! 그래서, 대규모 데이터 분석 작업에서 매우 유용하며
, Python 환경에서 DuckDB를 통해 SQL 기반 분석을 쉽게 수행할 수 있습니다. Python에서 SQL 기반의 데이터 분석을 손쉽게 수행하고 싶다면, DuckDB를 한 번 시도해 보세요!
(다만 Python에 너무 익숙해저버린 저는 sql보다 pandas를 가공하는게 아직.,,더 좋네요!!! 얼른SQL과 더마니마니친해져야겠어요!!)
'데이터&AI > 데이터분석' 카테고리의 다른 글
Twitter(x)의 데이터를 분석해보기 - 2 (feat. python & MONEY!!) (1) | 2024.09.04 |
---|---|
Twitter(x)의 데이터를 분석해보기 - 1 (feat. python) (1) | 2024.09.03 |
데이터 분석가를 위한 쉬운 docker : 편리한 notebook 환경 만들기!! (1) | 2024.06.06 |
Python사용자 입장에서 이해하는 Front-end (with Pandas, React) (0) | 2024.05.24 |
빠르고 쉽게 설치하는 AIRFLOW (우분투, 코드 4줄) (0) | 2024.05.22 |
댓글