콘텐츠로 이동

서울 아파트 실거래가 종단 간 예제

이 문서는 kpubdatadatago.apt_trade 데이터를 사용해 서울 아파트 실거래가를 수집하고, Polars로 정제한 뒤, Hugging Face Dataset 형태의 로컬 산출물로 패키징하는 end-to-end 예제입니다.

현재 예제는 선행 PR #52에서 추가된 config-driven publishing script를 재사용합니다. 새 YAML을 만들지 않고 scripts/configs/korean_apartment_trades.yaml을 기준 config로 사용합니다.

예제 범위

scripts/configs/korean_apartment_trades.yaml은 다음 범위의 아파트매매 실거래가를 수집합니다.

항목
Provider datago
Dataset apt_trade
지역 강남구 11680, 서초구 11650
기간 202401부터 202406까지
API 호출 수 12개 fetch_params
출력 저장소명 kpubdata/korean-apartment-trades
로컬 출력 경로 ./staging/korean-apartment-trades

전체 서울 25개 구와 장기 기간을 대상으로 하는 대용량 config가 필요하면 scripts/configs/seoul_apartment_trades.yaml을 참고할 수 있습니다. 다만 이 문서의 beginner 예제는 비용과 실행 시간을 줄이기 위해 더 작은 korean_apartment_trades.yaml을 기준으로 설명합니다.

설치

기본 개발 의존성과 publish 예제에 필요한 optional dependency를 설치합니다.

uv sync --extra dev --extra publish --extra docs

패키지로 설치해 실행하는 경우에는 다음 extra가 필요합니다.

pip install "kpubdata-builder[publish]"

publish extra에는 huggingface-hub, xmltodict, kaggle이 포함됩니다. 이 예제의 로컬 파일 생성에는 Polars와 Parquet 작성 의존성이 필요하고, 실제 Hugging Face 업로드를 할 때만 Hugging Face 인증이 필요합니다. 한국어 건물명 로마자 변환이 필요하면 kr-building-name-normalizer를 별도로 설치하세요.

사전 준비

datago.apt_trade는 data.go.kr 공공데이터 API를 호출합니다. 실제 데이터를 가져오려면 data.go.kr API key가 환경 변수에 설정되어 있어야 합니다.

export KPUBDATA_DATAGO_API_KEY="your-data-go-kr-api-key"

이 문서와 PR에서는 Hugging Face 실제 업로드를 수행하지 않습니다. HF_TOKEN이나 API key 값을 문서, config, 코드에 저장하지 마세요.

외부 API 호출은 네트워크 상태, data.go.kr 응답 지연, API quota에 영향을 받을 수 있습니다. korean_apartment_trades.yaml은 12개 파라미터 세트라 비교적 작지만, list_all: true로 페이지를 모두 순회하므로 실행 시간이 달라질 수 있습니다.

실행 명령

로컬 산출물만 생성하려면 --local-only를 사용합니다. 이 모드는 Parquet 파일과 dataset card를 만들고 업로드 단계 전에 종료합니다.

uv run python scripts/publish_to_hf.py scripts/configs/korean_apartment_trades.yaml --local-only

업로드 직전 단계까지의 흐름을 확인하되 실제 업로드를 건너뛰려면 --dry-run을 사용합니다.

uv run python scripts/publish_to_hf.py scripts/configs/korean_apartment_trades.yaml --dry-run

--dry-run은 fetch, transform, package, dataset card 생성까지 수행한 뒤 Hugging Face와 Kaggle 업로드만 건너뜁니다. --local-only가 가장 안전한 beginner 실행 모드입니다.

실행 로그를 더 자세히 보려면 --verbose를 추가합니다.

uv run python scripts/publish_to_hf.py scripts/configs/korean_apartment_trades.yaml --local-only --verbose

파이프라인 매핑

현재 스크립트는 Builder의 장기 모듈 구조를 설명하기 위한 config-driven 레퍼런스입니다. Issue #50의 Bronze/Silver/Gold 흐름은 다음처럼 매핑됩니다.

단계 스크립트 동작 관련 파일
Bronze kpubdata client로 datago.apt_trade를 fetch하고 checkpoint를 남김 scripts/pipeline/fetch.py
Silver column_mapping, dtypes, derived, filters를 Polars DataFrame에 적용하고 schema를 검증 scripts/pipeline/transform.py
Gold 정제된 DataFrame을 data/train.parquet로 패키징 scripts/pipeline/package.py
Export Hugging Face Dataset card 형식의 README.md 생성 scripts/pipeline/package.py
Publish --local-only가 아니면 HF/Kaggle upload 함수 호출, --dry-run이면 업로드 생략 scripts/pipeline/publish.py

Config 구조

scripts/configs/korean_apartment_trades.yaml은 크게 네 부분으로 나뉩니다.

Key 역할
source provider, dataset, list_all, fetch_params를 선언합니다.
transform 원천 필드명을 영어 컬럼명으로 바꾸고, 타입 캐스팅과 파생 컬럼, row filter를 정의합니다.
output HF repo 이름, Parquet 파일명, 로컬 staging directory를 정의합니다.
card dataset card의 제목, 설명, license, language, tags, feature 설명을 정의합니다.

대표 변환은 다음과 같습니다.

원천 필드 출력 컬럼
sggCd district_code
umdNm neighborhood
aptNm apartment_name
excluUseAr exclusive_area_m2
dealAmount deal_amount_10k_krw

deal_year, deal_month, deal_dayconcat_date(deal_year, deal_month, deal_day)deal_date 파생 컬럼을 만듭니다. deal_amount_10k_krw > 0 filter도 적용됩니다.

생성되는 파일 구조

--local-only 또는 --dry-run 실행이 성공하면 기본적으로 다음 구조가 생성됩니다.

staging/korean-apartment-trades/
├── README.md
└── data/
    └── train.parquet

README.md는 Hugging Face dataset card입니다. config의 card 섹션과 실제 DataFrame의 record count, feature count, numeric statistics, sample rows를 사용해 생성됩니다.

실행 중 checkpoint가 필요한 경우에는 다음 파일이 임시로 생길 수 있습니다.

staging/korean-apartment-trades/.checkpoints/fetch_checkpoint.json

성공적으로 publish 흐름이 끝나면 checkpoint는 삭제됩니다. --local-only로 중간에 종료하는 경우 checkpoint가 남을 수 있으며, 이어받기가 필요하면 --resume을 사용할 수 있습니다.

업로드하지 않는 검증

문서 예제 검증은 다음 순서로 진행하는 것을 권장합니다.

uv run ruff check .
uv run ruff format --check .
uv run mypy .
uv run mkdocs build
uv run python scripts/publish_to_hf.py scripts/configs/korean_apartment_trades.yaml --local-only

API key가 없거나 외부 API 호출이 실패하면 마지막 명령은 실패할 수 있습니다. 이 경우에도 --help로 CLI 옵션을 확인하고, 문서 빌드와 정적 검사를 먼저 통과시켜 문서 자체의 안전성을 확인할 수 있습니다.

uv run python scripts/publish_to_hf.py --help

주의 사항

  • 실제 Hugging Face 업로드를 하려면 HF_TOKEN이 필요하지만, 이 예제에서는 업로드를 수행하지 않습니다.
  • API key나 token은 코드, YAML, 문서, commit에 넣지 않습니다.
  • --dry-run은 업로드만 생략하며 데이터 fetch와 로컬 파일 생성은 수행합니다.
  • 대용량 config인 scripts/configs/seoul_apartment_trades.yaml은 호출 수가 많아 더 오래 걸리고 API quota를 더 많이 사용할 수 있습니다.