본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
EPL과 유튜브 데이터로 배우는 DuckDB

DuckDB와 AI로 대용량 데이터셋 분석하기: 초보자 가이드

by 아참형인간 2026. 6. 7.

https://product.kyobobook.co.kr/detail/S000220221456

 

LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 이기준 - 교보문고

LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 복잡한 데이터 분석 흐름을 더 단순하게 만드는 DuckDB 최근 주목받고 있는 DuckDB를 활용해 SQL 기반 데이터 분석과 실전 프로젝트를 학습할 수 있도록 구

product.kyobobook.co.kr

대용량 CSV 파일 작업은 부담스럽게 느껴질 수 있습니다. 특히 파일 크기가 1GB를 넘고 이해하기 어려운 열로 가득 차 있다면 더욱 그렇습니다. 하지만 DuckDB와 Claude 같은 AI 어시스턴트를 함께 사용하면 이러한 혼란을 명확하고 실행 가능한 인사이트로 바꿀 수 있습니다.

실제 노동시장 데이터를 사용해 실용적인 엔드투엔드 예제를 살펴보겠습니다. DuckDB는 처음 접하지만, 파일과 폴더 같은 기본 개념에는 익숙하다고 가정하겠습니다.

DuckDB란 무엇이며 왜 사용하나요?

DuckDB는 인프로세스 분석 데이터베이스입니다. “분석을 위한 SQLite”라고 생각하면 됩니다. 서버도 필요 없고, 클러스터도 필요 없으며, DBA가 될 필요도 없습니다. DuckDB가 CSV 파일을 바라보게 한 다음 SQL로 쿼리하기 시작하면 됩니다.

대용량 데이터셋에 적합한 이유는 다음과 같습니다.

대용량 CSV(수백 MB에서 GB 단위)를 쉽게 처리합니다
노트북에서 빠른 분석 쿼리를 실행할 수 있습니다
설정이 간단합니다 — 서버도, 클라우드도, 복잡함도 없습니다
시계열, 지표, 설문 데이터 같은 컬럼형 데이터와 잘 맞습니다

설정: 첫 번째 대용량 데이터셋

노동력 조사의 CSV 파일 세 개를 다운로드했다고 가정해 보겠습니다.

Labour Force data.csv (1.1 GB) — 주요 데이터셋
Labour Force data_Labour Force data.csv — 피벗된 버전
LBMetaData.csv — 메타데이터와 정의

세 파일은 모두 서로 관련되어 있지만, 서로 다른 목적을 가집니다. 주요 파일은 “팩트 테이블”이고, 나머지는 이를 보조합니다.

먼저 DuckDB를 열고(CLI, DBeaver 또는 다른 클라이언트 사용) 주요 CSV에서 테이블을 생성합니다.

DROP TABLE IF EXISTS labour;
CREATE TABLE labour AS
SELECT *
FROM read_csv_auto('C:/Users/Sajithkumar Swami/Downloads/Labour Data - 50 Canada/Labour Force data.csv');

이 명령은 다음을 수행합니다.

디스크에서 CSV를 직접 읽습니다
열 타입을 자동으로 추론합니다
DuckDB 내부에 영구적인 labour 테이블을 생성합니다

이제 단 하나의 명령으로 1GB가 넘는 데이터를 로드한 것입니다.

데이터 구조 이해하기

분석을 시작하기 전에 먼저 테이블을 살펴보십시오.

DESCRIBE labour;
SELECT * FROM labour LIMIT 10;
SELECT COUNT(*) FROM labour;

다음과 같은 열을 확인할 수 있습니다.

REF_DATE — 기준 날짜
GEO — 지역 정보(주, 캐나다 전체 등)
Labour force characteristics — 고용, 실업, 경제활동참가율 등
Gender — Men+, Women+, Total
Age group — 15–24세, 25–54세 등
Statistics, Data type, VALUE 등

이것이 여러분의 원재료입니다.

맥락을 위한 메타데이터 로드하기 (선택 사항이지만 강력함)

메타데이터 파일은 각 차원과 코드의 의미를 설명합니다. 이를 별도의 테이블로 로드합니다.

DROP TABLE IF EXISTS metadata;
CREATE TABLE metadata AS
SELECT *
FROM read_csv_auto('C:/Users/Sajithkumar Swami/Downloads/Labour Data - 50 Canada/LBMetaData.csv');

이제 필요할 때 정의 정보를 데이터와 조인할 수 있습니다. 예를 들어 "Unemployment rate"가 무엇을 의미하는지 자연어로 설명할 수 있습니다.

재사용 가능한 요약 뷰 만들기

매번 긴 쿼리를 작성하는 대신, 데이터를 유용한 형태로 요약하는 뷰를 생성합니다.

추세 요약(국가 단위, 지표별):

CREATE OR REPLACE VIEW v_trend_summary AS
SELECT 
    REF_DATE,
    "Labour force characteristics" AS metric,
    AVG(VALUE) AS value
FROM labour
WHERE "Data type" = 'Seasonally adjusted'
GROUP BY REF_DATE, metric
ORDER BY REF_DATE;

성별 요약:

CREATE OR REPLACE VIEW v_gender_summary AS
SELECT 
    REF_DATE,
    Gender,
    "Labour force characteristics" AS metric,
    AVG(VALUE) AS value
FROM labour
WHERE Gender IN ('Men+', 'Women+')
GROUP BY REF_DATE, Gender, metric
ORDER BY REF_DATE, Gender;

이와 유사한 방식으로 주(Province), 연령대, 실업률에 대한 뷰도 생성할 수 있습니다.

이러한 뷰는 데이터에 대한 "미리 만들어진 렌즈(pre-built lenses)" 역할을 합니다.

요약 데이터를 AI 친화적인 JSON으로 변환하기

Claude와 같은 AI 도구는 수백만 개의 행보다 구조화되고 압축된 데이터를 입력받을 때 가장 잘 작동합니다. 따라서 전체 테이블을 내보내는 대신 요약 결과를 내보냅니다.

다음 패턴은 각 요약에 대해 최근 24개월 데이터를 JSON 배열로 생성합니다.

WITH 
trend AS (
    SELECT json_group_array(row(REF_DATE, metric, value)) AS data
    FROM (
        SELECT REF_DATE, metric, value
        FROM v_trend_summary
        ORDER BY REF_DATE DESC
        LIMIT 24
    )
),
gender AS (
    SELECT json_group_array(row(REF_DATE, Gender, metric, value)) AS data
    FROM (
        SELECT REF_DATE, Gender, metric, value
        FROM v_gender_summary
        ORDER BY REF_DATE DESC
        LIMIT 24
    )
)
-- province, age, unemployment 등에 대한 유사한 CTE 추가
SELECT 
    trend.data AS trend_last_24_months,
    gender.data AS gender_last_24_months
    -- 추가 JSON 필드
FROM trend
CROSS JOIN gender;

이 쿼리는 JSON 열들로 구성된 단일 행을 반환하며, 각 열은 데이터의 압축된 요약 정보를 담고 있습니다.

파일로 저장하려면 다음과 같이 실행합니다.

COPY (
    -- 위와 동일한 쿼리
)
TO 'C:/Users/Sajithkumar Swami/Downloads/labour_summary.json'
WITH (FORMAT JSON);

이제 AI에 전달할 준비가 된 JSON 파일이 생성되었습니다.

AI에게 바통 넘기기

AI 어시스턴트(예: Claude)를 열고 다음을 입력합니다.

원하는 작업을 설명하는 명확한 프롬프트
labour_summary.json의 JSON 내용

예를 들어 다음과 같이 요청할 수 있습니다.

"당신은 노동시장 분석 전문가입니다. 이 JSON을 사용하여 국가 수준의 추세, 성별 차이, 지역별 패턴, 연령대별 인사이트, 실업률 변화 양상을 요약하십시오. 그리고 LinkedIn에 게시할 수 있는 3개 단락의 경영진 요약문을 작성하십시오."

이미 다음 작업을 수행했기 때문에 데이터를 정제했고 집계했고 JSON 형태로 구조화했으므로 AI는 데이터 가공이 아니라 인사이트 도출에 집중할 수 있습니다.

왜 이 조합이 강력한가

DuckDB는 다음을 담당합니다.

  • 대용량 CSV 처리
  • 빠른 집계와 필터링
  • 깔끔하고 재현 가능한 SQL 로직

AI는 다음을 담당합니다.

  • 해석
  • 스토리텔링
  • 경영진 요약 작성
  • 시각적·서술적 프레이밍

데이터 엔지니어나 통계학자가 될 필요는 없습니다. 다음만 하면 됩니다.

데이터를 로드하고
몇 개의 뷰를 만들고
요약 결과를 JSON으로 내보내고
AI가 이를 인사이트와 스토리로 변환하도록 맡기면 됩니다.

이것이 초보자라도 DuckDB와 AI를 활용해 "거대한 CSV 파일"을 "명확한 이야기"로 바꾸는 방법입니다.

 

<출처: https://medium.com/@careertips101/analyzing-large-datasets-with-duckdb-and-ai-a-beginner-friendly-guide-0cbae6ae7966>

댓글