하나의 지저분한 DoorDash 데이터세트를 사용하여 데이터 정리 파이프라인을 구축한 방법


편집자 이미지
# 소개
에 따르면 CrowdFlower의 설문조사데이터 과학자는 데이터를 정리하고 정리하는 데 업무 시간의 60%를 소비합니다.
이 기사에서는 DoorDash의 실제 데이터 세트를 사용하여 데이터 정리 파이프라인을 구축하는 과정을 안내합니다. 여기에는 거의 200,000개의 음식 배달 기록이 포함되어 있으며 각 기록에는 배달 시간, 총 품목 및 매장 카테고리(예: 멕시코 요리, 태국 요리 또는 미국 요리)와 같은 수십 가지 기능이 포함되어 있습니다.
# DoorDash 데이터로 음식 배달 시간 예측
DoorDash는 고객이 주문하는 순간부터 음식이 집에 도착하는 순간까지 음식을 정확하게 배달하는 데 걸리는 시간을 추정하는 것을 목표로 합니다. ~ 안에 이 데이터 프로젝트우리는 과거 배송 데이터를 기반으로 총 배송 기간을 예측하는 모델을 개발하는 임무를 맡고 있습니다.
그러나 우리는 전체 프로젝트를 수행하지는 않을 것입니다. 즉, 예측 모델을 구축하지 않을 것입니다. 대신 프로젝트에 제공된 데이터 세트를 사용하고 데이터 정리 파이프라인을 생성하겠습니다.
우리의 작업 흐름은 두 가지 주요 단계로 구성됩니다.
# 데이터 탐색
데이터 세트의 처음 몇 행을 로드하고 보는 것부터 시작해 보겠습니다.
// 데이터세트 로드 및 미리보기
import pandas as pd
df = pd.read_csv("historical_data.csv")
df.head()
출력은 다음과 같습니다.
이 데이터세트에는 주문 생성 시간과 실제 배송 시간을 캡처하는 날짜/시간 열이 포함되어 있으며, 이는 배송 기간을 계산하는 데 사용할 수 있습니다. 그 밖에 매장 카테고리, 총 품목 수, 소계, 최저 품목 가격 등의 기능도 포함되어 있어 다양한 유형의 데이터 분석에 적합합니다. 우리는 이미 몇 가지 NaN 값이 있다는 것을 볼 수 있으며, 다음 단계에서 이를 더 자세히 살펴보겠습니다.
// 다음을 사용하여 열을 탐색하세요 info()
다음을 사용하여 모든 열 이름을 검사해 보겠습니다. 정보() 방법. 기사 전체에서 이 방법을 사용하여 열 값 개수의 변경 사항을 확인하겠습니다. 이는 누락된 데이터와 전반적인 데이터 상태를 나타내는 좋은 지표입니다.
출력은 다음과 같습니다.
보시다시피 15개의 열이 있지만 Null이 아닌 값의 수가 각 열에 따라 다릅니다. 이는 일부 열에 누락된 값이 포함되어 제대로 처리되지 않으면 분석에 영향을 미칠 수 있음을 의미합니다. 마지막으로: 생성_시간 그리고 실제_배송_시간 데이터 유형은 객체입니다. 날짜/시간이어야 합니다.
# 데이터 클리닝 파이프라인 구축
이 단계에서는 모델링을 위한 데이터세트를 준비하기 위해 구조화된 데이터 정리 파이프라인을 구축합니다. 각 단계에서는 타임스탬프 형식, 누락된 값, 관련 없는 기능과 같은 일반적인 문제를 해결합니다.
// 날짜 및 시간 열 데이터 유형 수정
데이터 분석을 하기 전에 시간을 표시하는 열을 수정해야 합니다. 그렇지 않으면 우리가 언급한 계산(실제_배달_시간 – 생성_시간) 잘못될 것입니다.
우리가 고치고 있는 것:
- 생성_시간: 주문한 시간
- 실제_배송_시간: 음식이 도착했을 때
이 두 열은 객체로 저장되므로 올바르게 계산하려면 날짜/시간 형식으로 변환해야 합니다. 이를 위해 날짜/시간 함수를 사용할 수 있습니다. 팬더. 코드는 다음과 같습니다.
import pandas as pd
df = pd.read_csv("historical_data.csv")
# Convert timestamp strings to datetime objects
df["created_at"] = pd.to_datetime(df["created_at"], errors="coerce")
df["actual_delivery_time"] = pd.to_datetime(df["actual_delivery_time"], errors="coerce")
df.info()
출력은 다음과 같습니다.
위 스크린샷에서 볼 수 있듯이, 생성_시간 그리고 실제_배송_시간 이제 날짜/시간 객체입니다.
주요 컬럼 중, store_primary_category null이 아닌 값(192,668)이 가장 적습니다. 이는 누락된 데이터가 가장 많다는 의미입니다. 그렇기 때문에 먼저 청소에 집중하겠습니다.
// 데이터 대치 mode()
데이터세트에서 가장 지저분한 열 중 하나는 누락된 값이 많다는 사실에서 알 수 있듯이 store_primary_category. 멕시코, 미국, 태국 등 어떤 종류의 식품 매장을 이용할 수 있는지 알려줍니다. 그러나 많은 행에 이 정보가 누락되어 문제가 됩니다. 예를 들어 데이터를 그룹화하거나 분석하는 방법을 제한할 수 있습니다. 그럼 어떻게 고치나요?
이 행을 삭제하는 대신 채우겠습니다. 이를 위해 우리는 더 스마트한 대체를 사용할 것입니다.
우리는 각각을 매핑하는 사전을 작성합니다. 매장_ID 가장 빈번한 범주로 이동한 다음 해당 매핑을 사용하여 누락된 값을 채웁니다. 그 전에 데이터 세트를 살펴보겠습니다.
코드는 다음과 같습니다.
import numpy as np
# Global most-frequent category as a fallback
global_mode = df["store_primary_category"].mode().iloc[0]
# Build store-level mapping to the most frequent category (fast and robust)
store_mode = (
df.groupby("store_id")["store_primary_category"]
.agg(lambda s: s.mode().iloc[0] if not s.mode().empty else np.nan)
)
# Fill missing categories using the store-level mode, then fall back to global mode
df["store_primary_category"] = (
df["store_primary_category"]
.fillna(df["store_id"].map(store_mode))
.fillna(global_mode)
)
df.info()
출력은 다음과 같습니다.
위 스크린샷에서 볼 수 있듯이, store_primary_category 이제 열의 null이 아닌 개수가 더 많아졌습니다. 하지만 이 코드로 다시 확인해 보겠습니다.
df["store_primary_category"].isna().sum()
다음은 NaN 값의 수를 보여주는 출력입니다. 0입니다. 우리는 그들 모두를 제거했습니다.
그리고 대치 이후의 데이터 세트를 살펴보겠습니다.
// 남은 NaN 삭제
이전 단계에서 다음을 수정했습니다. store_primary_category그런데 뭔가 눈치채셨나요? 열 전체에서 null이 아닌 개수가 여전히 일치하지 않습니다!
이는 데이터세트의 일부 부분에서 여전히 누락된 값을 처리하고 있다는 분명한 신호입니다. 이제 데이터 정리와 관련하여 두 가지 옵션이 있습니다.
- 누락된 값을 채우세요.
- 버려라
이 데이터세트에 거의 200,000개의 행이 포함되어 있다는 점을 고려하면 일부를 잃어도 괜찮습니다. 데이터 세트가 작을수록 더 주의해야 합니다. 이 경우 각 열을 분석하고 표준을 설정(평균, 중앙값, 가장 빈번한 값 또는 도메인별 기본값을 사용하여 결측값을 채울 방법 결정)한 다음 채우는 것이 좋습니다.
NaN을 제거하기 위해 pandas 라이브러리의 dropna() 메서드를 사용합니다. 우리는 설정 중입니다 제자리=참 다시 할당할 필요 없이 변경 사항을 DataFrame에 직접 적용합니다. 이 시점에서 데이터세트를 살펴보겠습니다.
코드는 다음과 같습니다.
df.dropna(inplace=True)
df.info()
출력은 다음과 같습니다.
위 스크린샷에서 볼 수 있듯이 이제 각 열에는 동일한 수의 Null이 아닌 값이 있습니다.
모든 변경 후의 데이터세트를 살펴보겠습니다.
// 다음에는 무엇을 할 수 있나요?
이제 깨끗한 데이터 세트가 있으므로 다음에 수행할 수 있는 몇 가지 작업은 다음과 같습니다.
- EDA를 수행하여 전달 패턴을 이해합니다.
- 배달 시간이나 바쁜 대시보드 비율과 같은 새로운 기능을 엔지니어링하여 분석에 더 많은 의미를 추가하세요.
- 변수 간의 상관 관계를 분석하여 모델 성능을 높입니다.
- 다양한 회귀 모델을 구축하고 가장 성능이 좋은 모델을 찾으세요.
- 최고 성능 모델을 사용하여 배송 기간을 예측합니다.
# 최종 생각
이 기사에서는 잘못된 데이터 유형 수정 및 누락된 값 처리와 같은 일반적인 데이터 품질 문제를 해결하여 DoorDash의 실제 데이터 세트를 정리했습니다. 우리는 이 데이터 프로젝트에 맞춰 간단한 데이터 정리 파이프라인을 구축하고 잠재적인 다음 단계를 탐색했습니다.
실제 데이터 세트는 생각보다 복잡할 수 있지만 이러한 문제를 해결할 수 있는 방법과 요령도 많이 있습니다. 읽어주셔서 감사합니다!
네이트 로시디 데이터 과학자이자 제품 전략 분야의 전문가입니다. 그는 또한 분석을 가르치는 부교수이기도 하며 데이터 과학자가 상위 기업의 실제 인터뷰 질문을 사용하여 인터뷰를 준비하는 데 도움이 되는 플랫폼인 StrataScratch의 창립자이기도 합니다. Nate는 취업 시장의 최신 동향에 대해 글을 쓰고, 인터뷰 조언을 제공하고, 데이터 과학 프로젝트를 공유하고, SQL의 모든 것을 다룹니다.
Post Comment