- 한국교통안전공단 데이터 안심구역에서 제공된 수도권 교통카드 일별 이용 이력을 수집·가공해 각종 데이터로 산출하는 프로젝트입니다.
- This project transforms secured metropolitan smart-card logs into a reproducible commute OD pipeline covering ingestion, validation, clustering, aggregation, and grid enrichment.
- 처리 기간: 2025년 1월~6월
- 기준 데이터: 2024년 7월 집계 결과
- 원천: TS 데이터 안심구역 TB_KTS_DWTCD_METROPOLITAN 및 TB_KTS_STTN CSV.
- Processing window: Jan–Jun 2025 (baseline checks aligned to Jul 2024 outputs)
- Sources: TS secure-zone exports TB_KTS_DWTCD_METROPOLITAN and TB_KTS_STTN CSV dumps.
- 새마을금고
- 대중교통 출퇴근 데이터 (통근OD)
- 대중교통 체류시간 데이터
- 일별/시간대별 집계 데이터
- 통학OD 데이터
transportation-data/
├── airflow/ # 인 하우스 자동화 dag 프로세스 (통근OD, 체류시간)
├── data_safety_zone/ # 안심구역 내부 프로세스 코드
│ ├── admin/ # 안심구역 관련 유틸 코드
│ ├── stay_time/ # 안심구역 - 체류시간 산출 코드
│ └── work_od/ # 안심구역 - 통근OD 산출 코드
├── research/ # 연구용으로 상품화되지 않고 진행된 프로세스
│ ├── daily_hourly_agg/ # 일별/시간대별 집계 산출 코드
│ ├── school_commute_od/ # 통학OD 산출 코드
│ ├── stay_time/ # 체류시간 산출 코드(노트북)
│ └── work_od/ # 통근OD 산출 코드(노트북 및 202407 산출 버전)
├── README.md
├── .gitignore
└── .env # 사용자 직접 작성 환경변수
[import_data CSVs 🚍]
│
▼
(step1) Daily purpose aggregation → parquet
│
▼
(step2) Residence / office time-window split
│
▼
(step3) Coordinate swap correction
│
▼
(step4) Valid-card batching
│
▼
(step5) DBSCAN clustering (home / work)
│
▼
(step6) Card mapping merge → card_id_work_od_mapping.parquet
│
▼
(step7) Monthly OD validation stats
│
▼
(step8) Monthly OD aggregation metrics
│
▼
(step9) Station cleansing + grid tagging
│
▼
(step10) Grid-enriched work OD parquet → downstream _output
- 원시 CSV 적재
- Daily Purpose Aggregation — DuckDB COPY로 일별 목적 통행 테이블을 구축합니다
(Load raw CSVs via DuckDB to produce daily purpose trips).
- Daily Purpose Aggregation — DuckDB COPY로 일별 목적 통행 테이블을 구축합니다
- 시간창 분리
- Time-Window Split — 평일 오전/저녁 통근 구간을 residence·office 윈도우로 분리합니다
(Generate residence/office slices for commute hours).
- Time-Window Split — 평일 오전/저녁 통근 구간을 residence·office 윈도우로 분리합니다
- 좌표 보정
- Coordinate Fix — 센서 오류로 뒤바뀐 X/Y를 재정렬하고 정정 현황을 기록합니다
(Swap incorrect coordinates and log corrections).
- Coordinate Fix — 센서 오류로 뒤바뀐 X/Y를 재정렬하고 정정 현황을 기록합니다
- 유효 카드 추출
- Valid Card Assignment — residence·office 양측에서 충분한 통행이 있는 카드만 남기고 배치 ID를 할당합니다
(Filter active cards and assign batch IDs).
- Valid Card Assignment — residence·office 양측에서 충분한 통행이 있는 카드만 남기고 배치 ID를 할당합니다
- 클러스터링
- DBSCAN — EPSG:5179 좌표계로 변환 후 DBSCAN으로 주거·직장 후보 정류장을 탐색합니다
(Cluster home/work stops in projected space).
- DBSCAN — EPSG:5179 좌표계로 변환 후 DBSCAN으로 주거·직장 후보 정류장을 탐색합니다
- 배치 병합
- Batch Merge — 각 배치 결과를 통합해 card_id_work_od_mapping.parquet을 생성합니다
(Merge batch outputs into the mapping parquet).
- Batch Merge — 각 배치 결과를 통합해 card_id_work_od_mapping.parquet을 생성합니다
- 통근 검증
- Commute Validation — 카드 매핑과 목적 통행을 교차해 월별 통근 건수를 검증합니다
(Cross-check monthly OD counts with confidence thresholds).
- Commute Validation — 카드 매핑과 목적 통행을 교차해 월별 통근 건수를 검증합니다
- 통계 집계
- Aggregation — 통근 OD를 집계해 건수·체류시간·이동시간 통계를 만듭니다
(Aggregate commute metrics such as trip counts and durations).
- Aggregation — 통근 OD를 집계해 건수·체류시간·이동시간 통계를 만듭니다
- 정류장 정제
- Station Cleansing — 정류장 좌표를 5179로 변환하고 to_grid_vec 함수로 격자 ID를 부여합니다
(Cleanse station coordinates and attach grid IDs).
- Station Cleansing — 정류장 좌표를 5179로 변환하고 to_grid_vec 함수로 격자 ID를 부여합니다
- 그리드 조인
- Grid Join — OD 통계를 정제된 정류장·격자 데이터와 결합해 최종 산출물을 만듭니다
(Join OD statistics with station grids for delivery).
- Grid Join — OD 통계를 정제된 정류장·격자 데이터와 결합해 최종 산출물을 만듭니다
| 구분 Category | 구성 요소 Stack | 주요 활용 Purpose |
|---|---|---|
| 데이터베이스 / OLAP | DuckDB 0.10+ | 고속 CSV 적재, SQL 기반 집계, Parquet 출력 |
| 언어 / 런타임 | Python 3.12 | 전체 파이프라인 스크립팅, 가상환경 실행 |
| 데이터 처리 | pandas · numpy | 데이터 정제, 윈도우링, 결과 검증 |
| 공간 분석 | scikit-learn (DBSCAN) | 주거·직장 후보 정류장 군집화 |
| 스토리지 / 포맷 | Parquet (ZSTD) | 증분 저장, 후속 분석 및 공유 |
| 실행 환경 | PowerShell, 가상환경 | 배치 실행 및 자동화 스케줄링 |
- PowerShell 또는 가상환경에서
python version_2/step1_run_monthly_purpose_batch.py등 단계별 스크립트를 순차 실행합니다. config.py에서 경로·배치 크기·DBSCAN 하이퍼파라미터를 조정할 수 있습니다.- 중간 출력은
output/하위 폴더에 parquet 형식으로 저장되며, DuckDB 뷰어나 pandas로 검증할 수 있습니다.
- Notion 요약(진행 로그 및 상세 산출물) 👉 Notion Link
- 추가 문의는 프로젝트 메인 노트북 및 step 스크립트 상단 주석을 참고하세요.