포스트

NYC 택시 수요 예측 파이프라인 만들기 (3) 데이터 수집과 EDA

NYC TLC 공식 데이터를 직접 받아 스키마를 확인하고, 수요 예측에 필요한 패턴을 탐색한 과정을 정리했습니다.

NYC 택시 수요 예측 파이프라인 만들기 (3) 데이터 수집과 EDA

이번 글에서 할 일

1편에서 프로젝트 설계를, 2편에서 개발환경 구성을 정리했습니다. 이번에는 파이프라인의 출발점인 데이터를 다룹니다.

  1. Yellow Taxi 데이터 1개월분 확보
  2. 스키마와 데이터 품질 확인
  3. 수요 예측 관점에서 EDA: 시간과 지역 패턴 찾기

데이터 가져오기: Kaggle 대신 공식 소스에서 직접

처음 설계할 때는 Kaggle 데이터셋을 쓸 생각이었는데, 확인해보니 NYC TLC(Taxi & Limousine Commission)가 공식 페이지에서 월별 Parquet 파일을 직접 배포하고 있었습니다. 그래서 Kaggle을 거치지 않고 공식 소스에서 바로 받는 것으로 변경했습니다.

이유는 세 가지입니다.

  1. 인증이 필요 없다: Kaggle API 토큰 설정 없이 URL로 바로 받을 수 있습니다.
  2. 월별 Parquet 파일: 이 프로젝트는 “1개월로 검증 → 여러 달로 확장” 계획인데, 월 단위 파일 구조가 정확히 맞습니다. 나중에 Airflow에서 URL 패턴으로 수집을 자동화하기도 쉽습니다.
  3. 최신 데이터: Kaggle 쪽 데이터셋은 오래된 연도의 대용량 CSV지만, 공식 소스는 최신 월까지 Parquet으로 제공합니다.

받은 파일은 두 개입니다.

1
2
3
4
5
# 2024년 1월 운행 기록 (Parquet, 약 48MB)
curl -O https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet

# 지역 ID ↔ 지역명 매핑 테이블
curl -O https://d37ci6vzurychx.cloudfront.net/misc/taxi_zone_lookup.csv

둘 다 data/raw/에 두고, 데이터 파일은 Git에 올리지 않습니다.

스키마 확인

2024년 1월 한 달치가 2,964,624행 × 19컬럼, Parquet 기준 48MB입니다. CSV였다면 수백 MB였을 텐데, 컬럼 지향 압축 덕분에 노트북에서도 부담 없이 다룰 수 있는 크기입니다.

주요 컬럼은 다음과 같습니다.

컬럼의미
tpep_pickup_datetime승차 시각
tpep_dropoff_datetime하차 시각
PULocationID승차 지역 ID
DOLocationID하차 지역 ID
passenger_count승객 수
trip_distance이동 거리 (마일)
fare_amount기본 요금
total_amount총 결제 금액

이 중 수요 예측에 실제로 쓰는 것은 tpep_pickup_datetimePULocationID 두 개입니다. 나머지는 데이터 품질 확인과 이상치 필터링에 활용합니다.

taxi_zone_lookup.csv는 265개 지역의 LocationID를 자치구(Borough), 지역명(Zone)과 매핑해주는 테이블입니다. 1월 데이터에는 이 중 260개 지역이 등장합니다. 집계와 시각화 단계에서 “236번 지역”이 아니라 “Upper East Side North”로 읽을 수 있게 해줍니다.

데이터 품질 이슈

스키마만 확인했는데 벌써 하나 발견했습니다. 1월 데이터인데 tpep_pickup_datetime의 범위가 2002-12-31 ~ 2024-02-01로 나옵니다. 수집 기간을 한참 벗어난 행이 섞여 있다는 뜻이라, 집계 전에 기간 필터링이 필수입니다.

EDA: 수요 패턴 탐색

집계 단위가 PULocationID × 1시간이므로, EDA도 그 관점으로 진행했습니다.

시간대별 패턴

요일별 패턴

지역별 분포

관찰 정리와 다음 단계

다음 글에서는 이 관찰을 바탕으로 원본 운행 기록을 시간과 지역별로 집계해 학습용 Feature 테이블을 만듭니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.