241101 TIL

mj_data·2024년 11월 1일

TIL

목록 보기
29/32

기초 프로젝트

사용한 데이터는 Kaggle 음식 배달 데이터
그동안 배운 전처리, 시각화를 활용하여 EDA를 해볼 예정이다.
가능하다면 추가적인 분석도.

데이터 대충보기

df = pd.read_csv('data/Food_delivery_dataset.csv')

엑셀로 보면 ID 컬럼이 인덱스로 되어있는데, '0x4607' 이런 난잡한 형식이기에 index_col없이 불러와 숫자를 인덱스로 삼았다.
이것저것 보던 중 조금 이상한 점을 발견했는데,
Delivery_person_ID가 같아도 나이와 평점이 모두 제각각이거나, 출발지 도착지의 위, 경도가 모두 같은데 Metropolitian과 Urban으로 나눠진다던지, 도착 장소가 다양하지 않다던지 등이 있다.
프로젝트 지침에서는 Delivery_person_ID마다 나이와 평점을 평균내서 대체하라고 되어있긴 하다. 뭔가 찜찜하지만 데이터가 수집되는 매커니즘에 대한 정보가 아예 없어 추측하여 처리하기보다는 그냥 하라는 대로 대체하려고 한다.

전처리 할만한 것들

칼럼 정리

  • Delivery_person_ID의 뒷부분만 다른 경우는 같은 음식점의 배달원으로 보이기에 앞부분만을 떼어내어 가게별 ID를 따로 빼 놓는 것도 좋을 것 같다. 자세히 보니 좀더 규칙성이 보이는데 'INDORES13DEL02'의 경우 INDO + RES13 + DEL02 같은 느낌인 것 같다. 앞의 알파벳들만 모아 ChatGPT에 물어보니, 인도의 도시 약칭인 것 같다.
  • Delivery_person_AgeDelivery_person_Ratings의 경우 앞서 말했듯 각 평균으로 전환(아마 format함수를 사용해서)해줘야하고 각각 int와 float으로 데이터 타입 변경이 필요하다.
  • 경도와 위도를 바탕으로 레스토랑 위치와 배달지 간의 직선거리를 계산하여 별도의 칼럼에 저장해야한다.
  • Order_DateTime_OrderdTime_Order_picked로 각각 합쳐서 datetime으로 형변환을 해주려 한다.
  • Weatherconditions의 경우 앞에 conditions라는 쓸데 없는 문자열이 붙어있어 제거해주어 날씨만 나오게 바꿔줘야 한다.
  • Time_taken(min)의 경우 앞에 (min)을 제거한 뒤 숫자형으로 바꿔줘야 한다. Time_Order_pickedTime_taken(min)을 더한 뒤 Time_Orderd에서 빼면 주문부터 배달 완료까지 걸린 시간을 대강 파악할 수도 있다.

결측값

  • .info()를 사용했을 때 null값이 아예 없는 것으로 보이는데, 이는 데이터 타입이 object로 되어있는 부분때문에 그런 것 같다. 각각 데이터타입을 다시 정의해 주어야 한다.
  • 날짜 및 시간 타입의 변수에 Nan이 있어 처리해주어야 한다. 밑에 이상치에서 언급할 Age 50 Rating 6과 겹치는 지도 확인해 본뒤 모두 삭제할 지 대체해서 사용할 지 생각해봐야할 것 같다.
  • Time_Orderd의 결측값은 Time_Order_picked에서 대부분의 음식조리시간인 5~10분을 빼서 채워넣어도 괜찮을 것 같다.

이상치

  • 이상치의 경우 Rating이 6인 경우가 있는데, 뭔가 5점 만점인 것 같아 살펴보니 Rating이 6인 경우는 모두 Age가 50이고 주문시간, 날씨, 도로혼잡도 값이 Nan인 것 보면 세부정보를 입력하지 않으면 자동으로 Age 50, Rating 6이 되는 것으로 보인다.
  • 위도, 경도의 경우 가끔 -가 붙어있는 경우가 있어 절댓값을 씌워줘야 할 것 같다. 또한 0인 경우는 결측값으로 처리하거나 해당 ID를 통해 가게 위치를 대입시켜도 될 것 같다.
  • 날짜 및 시간 타입의 변수에도 Nan이 있어 처리해주어야 한다. 위에 Age 50 Rating 6과 겹치는 지도 확인해 본뒤 모두 삭제할 지 대체해서 사용할 지 생각해봐야할 것 같다.

0개의 댓글