[5/6] 파이썬 고객 리뷰 분석: 배달앱 데이터로 배우는 텍스트 마이닝

맛집 리뷰 데이터 분석
맛집 리뷰 데이터 분석
맛집 리뷰 데이터 분석

단어는 어떻게 쓰이느냐에 따라 다릅니다.

같은 단어여도 어떤 상황에서 어떤 문장으로 쓰이느냐에 따라 그 의미가 달라지죠.


예컨대 라면이라는 단어는 라면 회사에서 중요한 단어로 여겨질 겁니다. 그러나 라면과 전혀 관련 없는 회사에서는 라면이라는 단어가 그렇게 중요한 단어로 인식 되지 않을 겁니다.


단어에 점수를 책정하는 일, 사람이 직접 하면 쉽지 않습니다. 그러나 파이썬 머신러닝 라이브러리 중 하나인 scikit-learn에 있는 TfidfVectorizer를 활용하면 각 단어에 중요도를 부여할 수 있습니다.


이번 글에서는 단어에 가중치(중요도)를 적용할 수 있는 TfidfVectorizer를 이용해서 텍스트 분석을 하는 방법을 소개하겠습니다.

단어는 어떻게 쓰이느냐에 따라 다릅니다.

같은 단어여도 어떤 상황에서 어떤 문장으로 쓰이느냐에 따라 그 의미가 달라지죠.


예컨대 라면이라는 단어는 라면 회사에서 중요한 단어로 여겨질 겁니다. 그러나 라면과 전혀 관련 없는 회사에서는 라면이라는 단어가 그렇게 중요한 단어로 인식 되지 않을 겁니다.


단어에 점수를 책정하는 일, 사람이 직접 하면 쉽지 않습니다. 그러나 파이썬 머신러닝 라이브러리 중 하나인 scikit-learn에 있는 TfidfVectorizer를 활용하면 각 단어에 중요도를 부여할 수 있습니다.


이번 글에서는 단어에 가중치(중요도)를 적용할 수 있는 TfidfVectorizer를 이용해서 텍스트 분석을 하는 방법을 소개하겠습니다.

리뷰 텍스트에는 어떤 단어가 가장 많이 나왔을까?


1. 데이터 불러오기 및 확인하기

먼저 판다스(pandas)라는 도구를 사용해 데이터를 불러옵니다. 판다스는 엑셀 시트처럼 데이터를 다룰 수 있게 해주는 강력한 도구입니다.


import pandas as pd

df = pd.read_excel('92년생김치찜.xlsx')

df.head()


이 코드는 '92년생김치찜.xlsx' 파일을 읽어와 df라는 변수에 저장합니다. df.head()는 데이터의 첫 5행을 보여줍니다. 이는 마치 책의 첫 페이지를 훑어보는 것과 같습니다.


2. 결측치 확인 및 제거하기

결측치는 비어있는 데이터를 말합니다. 이는 분석 결과를 왜곡시킬 수 있으므로 처리해야 합니다.


# 결측치 확인

print(df.isnull().sum())

# 결측치 제거

df = df.dropna()


첫 번째 줄은 각 열의 결측치 개수를 보여줍니다. 두 번째 줄은 모든 결측치를 제거합니다.

3. 불필요한 열 제거하기

분석에 필요 없는 정보는 제거하여 데이터를 간소화합니다.


df = df.drop(['URL', 'created_at'], axis=1)

df.head()


이 코드는 'URL'과 'created_at' 열을 제거합니다.


4. 파이썬을 이용한 고객 리뷰 분석: TF-IDF

이제 AI가 텍스트를 이해할 수 있도록 숫자로 변환하는 과정을 거칩니다. 이를 위해 TfidfVectorizer를 사용합니다.

TfidfVectorize를 이용하면, 단어에 가중치를 부여해서 분석할 수 있습니다.


from sklearn.feature_extraction.text import TfidfVectorizer

stop_words = ['맛있게', '맛있어요', '먹었습니다', '잘먹었습니다', '2개리뷰', '너무 맛있었어요']

tfidf = TfidfVectorizer(ngram_range=(3, 4), min_df=1, max_df=0.9, max_features=50, stop_words=stop_words)

X = tfidf.fit_transform(df['CONTENT'])

tfidf_df = pd.DataFrame(X.toarray(), columns=tfidf.get_feature_names_out())

tfidf_df


  • ngram_range=(3, 4): 3개에서 4개의 단어 조합을 고려합니다.

  • min_df=1, max_df=0.9: 너무 적게 나오거나(1번 미만) 너무 자주 나오는(90% 이상) 단어는 제외합니다.

  • max_features=50: 가장 중요한 50개 특성만 결과로 보여줍니다.

  • stop_words: 분석에서 제외할 단어들을 지정합니다.

5. 파이썬을 활용한 앱 리뷰 분석 결론

  • CountVectorizer와 다르게 단어에 가중치를 적용했습니다.

  • 가중치를 적용한 단어 조합은 빈도만 고려한 단어 조합과는 다른 결과를 보입니다.


CountVectorizer를 적용한 결과 :

  1. 배달도 빠르고

  2. 고기도 많고

  3. 양도 많아서

  4. 진짜 많고

  5. 너무 맛있었어요

  6. 양도 많고

  7. 양도 엄청

  8. 1인분인데 양도

  9. 부드럽고 김치도


TfidfVectorize를 적용한 결과 :

  1. "ㅂㅐ달도 빠르고 리뷰로 목살 추가했더니 고기가 김치보다 많아졌어요 김치 푸욱 익어서 좋아용"

  2. "호평 털어서 이집이 최고있듯 맛을 잊지못해 2틀간격으로 시켜먹었네여 단골 예약입니다"

  3. "1인분치거 양이 혜자 미텼고 맛도 미쵸쏘"

  4. "92년생 김치찜까지 매운맛은 먹어보는데 맵찔이인 저도 맛나게 먹었아요 마냥 맵기망 하지않고 매운맛"

  5. "같게 시킨건데 이번건 너무 매워서"

  6. "했는데 예전보다 훨씬더 매워졌네요 그래도 잘먹었습니닽"

  7. "해먹는데 다르곳은 조미료맛 나고 김치 몰껑거려서요 입맛을 사로잡았습니다 단골예약이요"

  8. "혼밥고르다가 시켰는데 너무 맛나네용"

  9. "1인분인데 양도 많고 밥에 계란후라이랑 스팸도 와서 완전 흡입했어요 다음에 시킬게요"

  10. "1인분인데 양도 많아서 두끼도 가능할거 같아요"

  11. "허겁지겁 먹었네요 오랜만에 정말"

  12. "1인맞나요 많던뎅 고기도 너무 부드러워요"

  13. "ㅠㅠ 매운맛 적당히 추가했는데"

  14. "ㅎㅎ 조만간 재주문 할거같아요"

CountVectorizer만으로는 고객 니즈를 정확히 파악하기가 어려웠습니다. 하지만 TfidfVectorizer를 적용해서 더 의미 있는 분석 결과를 얻을 수 있었습니다.

이 같은 고객 리뷰 분석 방법은 서비스 개선 방향을 결정하는 데 큰 도움을 줄 수 있습니다.

정봉준

Jung Bong Jun

mgz.less@gamil.com

© Copyright 2024

정봉준

Jung Bong Jun

mgz.less@gamil.com

© Copyright 2024

정봉준

Jung Bong Jun

mgz.less@gamil.com

© Copyright 2024