top of page

[데이터 시각화] 포스트메이트(Postmates, 미국의 배달앱) 데이터 분석하기


오프닝

음식을 요리하는 것은 일반적으로 외식하는 것보다 훨씬 건강하고 저렴한 옵션입니다. 그러나 종종 음식 요리하는 것은 선택 사항이 아닐 수도 있습니다. 때로는 부엌에 재료가 없을 수도 있고, 요리하고 설거지하는 긴 과정이 너무나도 귀찮아서일 수 있습니다. 이럴 때 음식을 직접 요리하는 것이 아닌 주변에서 먹을 곳을 찾는 것이 우선시 될 수 있습니다. 그러나 먹을 곳을 찾는 것조차 쉬운 일이 아닙니다. 주변에 무엇이 있는지, 내가 좋아하는 음식을 파는 곳이 어딘지, 특정 식단을 제공하는 음식점은 있는지, 가격서부터 사람들이 많이 찾는 곳 등등 음식점을 고를 때 생각해야 할 부분들이 너무나도 많기 때문입니다.



프로젝트 시작하면서

이 프로젝트를 위해서, 우선은 대부분 맨해튼 지역에 있는 뉴욕시 700개 이상의 레스토랑 메뉴를 스크래핑 했습니다. 그런 다음 이 데이터를 시각화하기 위해 세 개의 다른 부문으로 나뉜 간단한 대화형 대시보드를 만들었습니다. 이 대시보드의 첫 번째 섹션에는 스크랩한 모든 레스토랑과 뉴욕시의 위치가 표시되게끔 했습니다. 두 번째 섹션에서는 사용자가 특정 음식을 입력하고 해당 음식과 가장 유사한 메뉴 항목 목록을 다시 가져올 수 있게 했습니다. 마지막으로 사용자가 특정 메뉴 항목을 선택하고 해당 항목을 판매하는 공급업체의 가격 분포를 얻을 수 있게 만들었습니다.



섹션 I - 뉴욕시의 레스토랑

해당 섹션의 애플리케이션에서는 뉴욕시 지도에서 수집한 모든 식품 공급업체를 표시했습니다.

점의 색상은 공급업체가 속한 카테고리를 표시합니다. 점의 크기는 얼마나 많은 포스트메이트 사용자가 해당 공급업체를 선호하는지 나타냅니다. 큰 점은 더 많은 즐겨찾기를 표시하고 작은 점은 더 적은 즐겨찾기를 나타냅니다. 카테고리중 하나를 두 번 클릭하게되면 해당 카테고리에 속한 공급업체만 표시됩니다. 예를 들어 피자 카테고리를 두 번 클릭하면 아래 그림과 같은 결과가 표시됩니다.


섹션 II - 특정 품목의 공급업체 찾기

이 섹션은 사용자가 검색 창에 특정 음식을 입력하고 유사한 메뉴 항목을 판매하는 공급업체를 다시 찾을 수 있게 만들었습니다. 예시로 "avocado toast"를 입력하면 아래 출력과 같은 결과가 나타나게 만들었습니다.


유사한 메뉴 항목을 선택하는 방법

유사한 메뉴 항목을 찾기 위한 알고리즘을 구축하는 데는 데이터 프로세싱 단계가 필요했습니다. 궁극적으로 코사인 유사도로 비슷한 값을 찾기 위한 전 단계였습니다.



데이터 전처리 (Data Preprocessing)

먼저 메뉴 항목 이름과 메뉴 항목 설명이 포함된 각 메뉴 항목에 대한 단어 모음을 만들었습니다. 불용어 - "the", "a" 또는"are"와 같이 큰 의미를 갖지 않은 단어들 - 는 제거되었습니다. 그런 다음 모든 단어를 소문자로 변환하고 구두점을 제거했습니다. 모든 단어를 소문자로 변환하면 "Sushi" 와 "sushi"를 같은 단어로 간주합니다. 구두점을 제거하면 "Chocolate" 및 "Chocolate," 과 같은 항목도 같은 것으로 간주하게 했습니다. 마지막으로, 각 단어는 단어의 사전 형태를 얻기 위해 표제어를 지정했습니다. 표제어로 분류된 단어의 예시로는 "eggs"에서 "egg"로 또는 "smashed"에서 "smash"로의 변화가 이루어졌습니다.



카운트 벡터라이저 (Count Vectorizer)

코사인 유사도(Cosine Similarity)가 작동하기위해 각 메뉴 항목의 단어 모음을 숫자 데이터로 변환했습니다. 여기서 저는 Python의 카운트 벡터 라이저 (Count Vectorizer)를 사용하여 각 벡터가 전체 말뭉치(Corpus)에 포함된 각 카운트 단어를 포함하는 벡터를 얻었습니다.



코사인 유사도 (Cosine Similarity)

각 메뉴 항목에 대한 통계 벡터를 얻은 후, 이전에 행한 동일한 전처리 단계 및 벡터 변환을 거쳐 사용자 입력 문자열의 벡터 표현을 얻도록 했습니다. 카운트 벡터라이저는 사용자 입력 문자열에 변환되지만 재사용에 적합하지 않으므로 모든 메뉴 항목의 어휘는 사용자 입력 문자열의 어휘와 일치하도록 만들었습니다. 그런 다음 사용자 입력 문자열과 데이터셋의 모든 메뉴 항목의 코사인 유사도가 계산되도록 했습니다. 점수가 높은 메뉴 항목은 사용자 입력과 더 유사한 것으로 간주되게 했습니다. 검색어 "Spaghetti Meatballs"에 대한 상위 10개 코사인 유사도 점수는 아래와 같습니다.



섹션 III - 품목 가격 분포

이 섹션에서는 사용자가 메뉴 항목을 선택하고 해당 메뉴 항목에 대한 가격 분포를 얻을 수 있습니다. "Fries" 메뉴의 가격 분포는 아래와 같습니다.


또한, 특정 품목을 판매하는 각 공급업체를 표시하는 막대 차트는 판매된 가격을 기준으로 오름차순으로 정렬됩니다. 메뉴 항목 "Fries"에 대한 막대 차트는 아래와 같습니다.



프로젝트를 마치며

이 프로젝트의 향후 계획은 뉴욕시에 더 많은 레스토랑을 추가하는 것 입니다. 또한 포스트메이트에 새로운 레스토랑을 포함하기 위해 데이터 스크래핑 프로세스를 자동화하는 것입니다.

응용 프로그램의 세 번째 섹션에서 선택할 수 있는 메뉴 항목 목록에는 "Diet Coke (can)", "Diet Coke", 및 "Diet Coke Can" 과 같은 중복 메뉴 항목이 포함되어 있습니다. 향후 개정판에서 이와 같은 중복 항목을 제거하고 싶습니다.

여러분도 유펜솔루션과 함께 원하는 데이터를 수집하고 분석하여 새로운 프로젝트를 시작해보는 건 어떨까요?


해당 프로젝트 링크







Comments


bottom of page