DuckDB & Python 통합 : 분석 안내서

DuckDB & Python 통합 : 분석 안내서

마법으로 AI 워크 플로를 자동으로 빌드하십시오
저자의 이미지

DuckDB 최신 데이터 분석을 위해 설계된 빠른 프로세스 분석 데이터베이스입니다. Python 스크립트에서 직접 실행되므로 별도의 서버가 필요하지 않으며 원주민 저장 및 벡터 실행 덕분에 복잡한 쿼리로 탁월합니다.

데이터를 다루는 방법을 이해하는 것이 더욱 중요해지면서 오늘은 DuckDB로 파이썬 워크 플로우를 구축하고 주요 기능을 탐색하는 방법을 보여 드리고자합니다.

다이빙하자!

DuckDB 란 무엇입니까?

DuckDB는 빠른 로컬 분석을 위해 구축 된 무료 오픈 소스 인 프로세스 OLAP 데이터베이스입니다. 외부 서비스로 실행되는 기존 데이터베이스와 달리 DUPTB는 서버가 필요없이 애플리케이션 내에서 실행됩니다. OLAP 시스템으로서 DUPDB는 데이터를 열로 저장 (OLTP 시스템과 같은 행이 아님)을 저장하여 결합, 집계 및 그룹화와 같은 분석 쿼리에 매우 효율적입니다.

DuckDB를 가볍고 분석에서 최적화 된 SQLITE 버전으로 생각하여 현대 데이터베이스의 전력과 함께 로컬 데이터베이스의 단순성을 가져옵니다. 그리고 이것은 우리를 다음의 자연스러운 질문으로 이끌어줍니다 …

DuckDB의 주요 기능은 무엇입니까?

파동 빠른 분석 쿼리

DuckDB는 OLAP 워크로드에 대한 인상적인 성능을 제공하며, 종종 PostgreSQL과 같은 기존 데이터베이스에 익숙한 놀라운 사용자. DuckDB는 대량의 데이터를 처리하여 느리게 할 수있는 기존의 OLAP 시스템과 달리 기둥의 벡터 실행 엔진을 활용합니다. 이 설계는 CPU 캐시 사용을 최적화하고 분석 쿼리 성능을 크게 가속화합니다.

기본 SQL 지원 + 원활한 언어 통합

DuckDB는 복잡한 SQL 쿼리에 대한 완전한 지원을 제공하며 Java, C 및 C ++를 포함한 여러 언어로 API를 노출시킵니다. Python 및 R과의 엄격한 통합은 대화식 데이터 분석에 이상적입니다. 추가 SQL 구문 향상 (예 : 제외, 교체 및 모두)을 통해 선호하는 환경에서 직접 쿼리를 작성하여 쿼리 쓰기를 단순화 할 수 있습니다.

그리고 가장 중요한 부분은 DuckDB가 외부 의존성이나 설정 두통이없는 완전히 독립적이라는 것입니다.

무료 및 오픈 소스

DuckDB는 완전히 오픈 소스이며 점점 더 많은 기고자 커뮤니티에 의해 적극적으로 유지됩니다. 이를 통해 빠른 기능 개발 및 버그 수정을 보장합니다. 그렇습니다. 무료로 사용할 수 있습니다. 향후 라이센스 변경은 항상 가능성이 있지만 현재는 비용이 0으로 강력한 분석 엔진을 얻습니다.

이제 우리는 주요 기능을 알았으므로 시작하겠습니다!

DuckDB로 시작합니다

DuckDB의 설치 프로세스는 환경에 약간 의존하지만 전반적으로 빠르고 간단합니다. DuckDB는 서버 요구 사항이나 외부 종속성이없는 임베디드 데이터베이스 엔진이므로 설정은 일반적으로 몇 줄의 코드 만 필요합니다. 공식 DUPDB 문서에서 전체 설치 안내서를 찾을 수 있습니다.

전제 조건

다이빙하기 전에 다음과 같은 점을 확인하십시오.

  • 파이썬 3.13 이상 설치
  • 파이썬에서의 SQL 및 데이터 분석에 대한 기본 이해

다음 명령을 실행하여 환경에 DuckDB를 쉽게 설치할 수 있습니다.

파이썬에서 DuckDB와 협력합니다

DuckDB를 설치 한 후에는 시작하기가 매우 간단합니다. DuckDB를 환경으로 가져온 다음 기존 데이터베이스에 연결하거나 필요한 경우 새 데이터베이스를 만듭니다.

예를 들어:

import duckdb 
connection = duckdb.connect()

데이터베이스 파일이 제공되지 않은 경우 connect() 메소드, DUPDB는 기본적으로 새로운 메모리 데이터베이스를 만듭니다. 즉, SQL 쿼리 실행을 시작하는 가장 간단한 방법은 sql() 메소드 직접.

# Source: Basic API usage - 
import duckdb
duckdb.sql('SELECT 42').show()

이 명령을 실행하면 Python 모듈 내의 전역 인 메모리 DUCKDB 인스턴스를 초기화하고 쿼리의 상징적 표현 인 관계를 반환합니다.

중요하게도, 쿼리 자체는 다음과 같이 결과를 명시 적으로 요청할 때까지 실행되지 않습니다.

# Source: Execute SQL - 
results = duckdb.sql('SELECT 42').fetchall()
print(results)

"""
[(42,)]
"""

이제 실제 데이터로 작업합시다. DuckDB는 CSV, JSON 및 Parquet을 포함한 광범위한 파일 형식을 지원하며로드하는 것은 간단합니다.

아래 예제에서 얼마나 간단한 지 알 수 있습니다.

# Source: Python API -  
import duckdb
duckdb.read_csv('example.csv') # read a CSV file into a Relation
duckdb.read_parquet('example.parquet')# read a Parquet file into a Relation
duckdb.read_json('example.json') # read a JSON file into a Relation
duckdb.sql('SELECT * FROM "example.csv"')     # directly query a CSV file

DuckDB에서 외부 데이터 소스로 작업합니다

DuckDB의 눈에 띄는 기능 중 하나는 데이터베이스로 가져 오거나 전체 데이터 세트를 메모리에로드 할 필요없이 외부 데이터 파일을 직접 쿼리하는 기능입니다. 먼저 데이터를 수집 해야하는 기존 데이터베이스와 달리 DUPDB는 “제로 카피”실행 모델을 지원하므로 주어진 쿼리에 필요한 데이터 만 읽을 수 있습니다.

이 접근법은 몇 가지 주요 장점을 제공합니다.

  • 최소 메모리 사용 : 파일의 관련 부분 만 메모리로 읽습니다.
  • 가져 오기/내보내기 오버 헤드 없음 : 데이터를 쿼리하십시오 – 이동하거나 복제 할 필요가 없습니다.
  • 간소화 된 워크 플로 : 단일 SQL 문을 사용하여 여러 파일과 형식을 쉽게 쿼리합니다.

DuckDB의 사용을 예시하기 위해 다음 Kaggle 링크에서 얻을 수있는 간단한 CSV 파일을 사용합니다.

데이터를 쿼리하기 위해 파일 경로를 가리키는 간단한 쿼리를 쉽게 정의 할 수 있습니다.

# Query data directly from a CSV file
result = duckdb.query(f"SELECT * FROM '{source}'").fetchall()
print(result)

이제 DuckDB와 직접 SQL 유사 로직을 사용하여 데이터를 쉽게 처리 할 수 ​​있습니다.

필터링 행

특정 데이터 하위 집합에 집중하려면 DuckDB의 WHERE 절을 사용하십시오. 보다 복잡한 표현식을 위해 비교 연산자 (>, 등)와 논리 연산자 (및 Not)를 사용하여 조건을 기반으로 행을 필터링합니다.


# Select only students with a score above 80
result = duckdb.query(f"SELECT * FROM '{source}' WHERE total_passengers > 500").fetchall()
result

정렬 결과

순서 별 절을 사용하여 하나 이상의 열별로 결과를 정렬하십시오. 기본적으로 오름차순 (ASC)이지만 하강 (DESC)을 지정할 수 있습니다. 여러 열로 정렬하려면 쉼표로 분리하십시오.

#Sort months by number of passengers
sorted_result = duckdb.query(f"SELECT * FROM '{source}' ORDER BY total_passengers DESC ").fetchall()
print("\nMonths sorted by total traffic:")
print(sorted_result)

계산 된 열 추가

표현식 및 AS 키워드를 사용하여 쿼리에서 새 열을 만듭니다. 산술 연산자 또는 내장 함수를 사용하여 데이터를 변환하십시오.이 열은 결과에 나타나지 만 원본 파일에는 영향을 미치지 않습니다.

# Add 10 bonus points to each score
bonus_result = duckdb.query(f"""
   SELECT
       month,
       total_passengers,
       total_passengers/1000 AS traffic_in_thousands
   FROM '{source}'
""").fetchall()
print("\nScores with 10 bonus points:")
print(bonus_result)

케이스 표현식 사용

보다 복잡한 변환을 위해 SQL은 사례 표현식을 제공합니다. 이것은 프로그래밍 언어의 if-Else 문과 유사하게 작동하므로 쿼리에 조건부 로직을 적용 할 수 있습니다.

segmented_result = duckdb.query(f"""
   SELECT
       month,
       total_passengers,
       CASE
           WHEN total_passengers >= 100 THEN 'HIGH'
           WHEN total_passengers >= 50 THEN 'MEDIUM'
           ELSE 'LOW'
       END AS affluency
   FROM '{source}'
""").fetchall()
print("\nMonth by affluency of passangers")
print(segmented_result)

결론

DUPDB는 대규모 데이터 세트를 효율적으로 탐색하고 분석 해야하는 데이터 전문가를 위해 구축 된 고성능 OLAP 데이터베이스입니다. 프로세스 중 SQL 엔진은 환경에서 복잡한 분석 쿼리를 직접 실행합니다. 별도의 서버가 필요하지 않습니다. Python, R, Java, C ++ 등을 완벽하게 지원하면 DuckDB는 선호하는 언어에 관계없이 기존 워크 플로에 자연스럽게 적합합니다.

다음 Github 저장소에서 전체 코드를 확인할 수 있습니다.

Josep Ferrer 바르셀로나의 분석 엔지니어입니다. 그는 물리 공학을 졸업했으며 현재 인간 이동성에 적용되는 데이터 과학 분야에서 일하고 있습니다. 그는 데이터 과학 및 기술에 중점을 둔 파트 타임 콘텐츠 제작자입니다. Josep은 AI의 모든 것에 글을 썼으며 현장에서 진행중인 폭발의 적용을 다루고 있습니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다