[1/6] 파이썬 고객 리뷰 분석: 배달앱 데이터로 배우는 텍스트 마이닝
[1] 분석 대상 선정
분석하려면 문제 정의 또는 목적을 정해야 한다고 합니다.
날카로운 문제 정의를 할 수 있으면 좋겠지만, 간단한 데이터셋으로는 비즈니스에 심각한 영향을 끼치는 문제를 알 수 없었습니다.
그래서 단순한 목적을 정했습니다. 제가 정한 목적은 '우리 동네 맛집에는 어떤 리뷰가 달릴까?'라는 단순한 목적이었습니다.
여기서 '우리 동네'는 문자 그대로 제가 사는 동네입니다.
제가 사는 동네에는 '남양주시 백종원'이라고 불릴 만큼 음식점 창업에 일가견이 있으신 사장님이 있습니다.
이곳 사장님이 최근 김치찜 가게를 오픈했는데, 이곳이 오픈 6개월 만에 기존 김치찜 맛집으로 알려진 가게를 배달앱 순위에서 밀어내더군요.
그래서 남양주시 백종원 님이 오픈한 김치찜 집을 '맛집'으로 보고, 해당 가게를 분석 대상으로 정했습니다.
[2] 데이터셋 준비
리뷰 데이터는 배달의민족에서 추출했습니다.
데이터추출은 크롤링 서비스를 제공하는 '해시스크래퍼'를 이용했습니다. 해시스크래퍼는 웹 뿐만 아니라, 모바일 내에 있는 정보도 크롤링 하는 기업입니다.
저는 모바일 크롤링에 경험이 없었기 때문에, 해시스크래퍼 도움을 받아 데이터셋을 구축했습니다.
데이터셋을 확인한 후, 질문 4개를 생각해 냈습니다.
4개 질문에 답하기 위해서 12개의 데이터분석 방법을 적용했습니다.
[4개 질문]
"리뷰를 길게 남긴 사람은 뭐라고 작성했을까?"
"재주문한 고객은 어떤 리뷰를 달았을까?"
"리뷰 텍스트에는 어떤 단어가 가장 많이 나왔을까?"
"비슷한 리뷰 내용은 어떤 게 있을까?"
[12개 데이터분석 방법]
기본 데이터 탐색 (df.head(), df.shape 등)
텍스트 길이 계산 (str.len())
결측치 처리 (isnull().sum(), dropna())
고객별 주문 횟수 계산 (value_counts())
재구매 여부 확인 (lambda 함수, map() 메서드 사용)
형태소 분석 (KoNLPy의 Okt,Kkma 사용)
단어 빈도 분석 (collections.Counter 사용)
CountVectorizer를 이용한 단어 빈도 분석
TF-IDF를 이용한 단어 중요도 분석
KMeans 알고리즘을 이용한 군집화 분석
TSNE를 이용한 차원축소 기법
matplotlib을 이용한 데이터시각화
[3] "리뷰를 길게 남긴 사람은 뭐라고 작성했을까?"
1. 파이썬으로 리뷰 데이터 불러오기 및 확인하기
파이썬을 사용한 고객 리뷰 분석에서는 판다스(pandas) 라이브러리가 필수적입니다. 이 강력한 도구를 이용해 앱 리뷰 데이터를 효과적으로 다룰 수 있습니다.
데이터분석을 위해 파이썬 라이브러리 중 하나인 판다스를 불러와 줍니다. 라이브러리란, 다양한 기능이 담긴 '저장소'라고 생각하면 됩니다. 우리는 이 저장소에 있는 기능을 활용해서 텍스트 데이터를 분석할 겁니다.
판다스를 불러올 때 사용한 'as'는 라이브러리 이름을 바꾸는 명령어입니다. 프로그래머들은 관례적으로 판다스를 'pd'로 줄여서 사용합니다.
만약 'import pandas as pd'를 실행했는데 오류가 난다면, 다음 명령어를 터미널에 입력하세요:
vscode 기준, 'ctrl + shift + `'을 누르면 새 터미널이 열립니다.
판다스를 이용해 데이터가 담긴 엑셀 파일을 불러옵니다. 엑셀 파일을 불러오는 방법은 'pd.read_excel('파일명.xlsx')'입니다.
파일을 불러온 후, 'df(DataFrame)'라는 변수에 담아줍니다. 이후 df.head()로 상위 5개 행을 확인합니다.
2. 분석 대상 결측치 확인하기
결측치는 잘못된 입력(NaN, Not a Number)이나 데이터가 없이 비어 있는 상태(null)를 말합니다. 데이터에 결측치가 있으면 정확한 분석이 불가능합니다.
결측치를 확인하는 방법은 'df['컬럼명'].isnull().sum()'을 입력하면 됩니다. .isnull()은 결측치 여부를 알려주고, .sum()은 결측치 개수를 합산합니다.
3. 분석 대상 내에 있는 결측치(NaN) 제거하기
결측치 제거는 'df = df.dropna(subset=['컬럼명'])'으로 할 수 있습니다. 제거 후 다시 결측치를 확인하면 '0'이 표시되어 잘 제거되었음을 알 수 있습니다.
4. 가장 긴 문자열(텍스트) 확인하기
이번 분석의 목적은 '가장 긴 텍스트를 확인하는 것'입니다.
'df['컬럼명'].str.len()'을 입력하면 각 텍스트의 길이를 확인할 수 있습니다. '.str'은 판다스에서 문자열을 다룰 때 사용하고, '.len()'은 데이터의 길이를 확인하는 메서드입니다.
텍스트 길이를 확인한 후, 내용과 비교하기 위해 다음 코드를 작성합니다:
.sort_values()는 데이터를 정렬할 때 사용하는 메서드입니다. ascending=False를 적용하면 내림차순으로 정렬되어 가장 긴 텍스트부터 볼 수 있습니다.
[4] 파이썬을 활용한 고객 리뷰 분석 결론
가장 긴 리뷰는 145자이며, 이는 가장 짧은 리뷰인 5자에 비해 약 29배 긴 수준입니다.
고객이 느낀 '만족스러웠던 점', '불만족스러웠던 점'을 알 수 있었습니다.
고객이 만족한 점: '1인분 주문이 가능해서 좋다'
고객이 불만족스러워한 점: '계란후라이 조리 요청이 제대로 반영되지 않았다', '포장 상태가 좋지 않다.'
제가 가게 사장님이라면, 1인분 주문이 가능하다는 점을 적극적으로 어필해 볼 거 같습니다. 김치찜이라는 메뉴 특성상 1인분 주문이 어렵기 때문입니다.
또 이 같은 점을 착안해서 다른 가게에서 내지 않은 '새로운 1인분 메뉴 출시'도 고려해 볼 수 있을 듯 합니다.
아울러 '최소 배달 주문 금액'도 낮춰 보는 걸 고려해 볼 수도 있을 거 같습니다.
1인분 주문이 가능해도 최소 배달 주문 금액 기준이 높으면, 다른 가게로 이탈할 가능성이 높기 때문입니다.
저와 같은 데이터셋으로 텍스트분석을 진행 하고 싶으신 분은 깃허브(github)에서 데이터셋을 다운 받아주시면 됩니다.
이번 글에서 다룬 텍스트분석 방법은 난이도가 높지 않은 편이기 때문에, 초보자 분들도 쉽게 따라하실 수 있습니다.
이외에도 더 다양한 분석 방법이 궁금하신 분은 다음 글을 참고해 주시길 바랍니다.