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

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

한국어 텍스트 분석은 다른 언어보다 어렵습니다.

교착어(접사 등이 어근에 붙으면, 새로운 의미를 가진 단어가 생기는 언어), 띄어쓰기 등 고려해야 할 점이 많기 때문입니다.

반면에 영어는 단어 별로 띄어쓰기가 되어 있고, 교착어 또한 아니죠. 그래서 상대적으로 영어 텍스트 분석이 쉽습니다.


다행히(?) 파이썬에는 Konlpy라는 한국어 자연어 처리 라이브러리가 있습니다.

해당 라이브러리를 이용하면, 보다 쉽게 한국어 텍스트 분석을 진행하는 게 가능합니다.


이번 글에서는 파이썬의 Konlpy 라이브러리를 활용하여 앱 리뷰 분석을 수행해 보겠습니다. Konlpy 라이브러리를 이용하면, 고객 리뷰에 대한 심층적인 텍스트 분석이 가능합니다.

고객 리뷰 분석 목적은 '앱 리뷰 텍스트에는 어떤 단어가 가장 많이 나왔을까?'입니다. 파이썬을 이용한 리뷰 분석을 통해 이 질문에 답하고자 합니다.

한국어 텍스트 분석은 다른 언어보다 어렵습니다.

교착어(접사 등이 어근에 붙으면, 새로운 의미를 가진 단어가 생기는 언어), 띄어쓰기 등 고려해야 할 점이 많기 때문입니다.

반면에 영어는 단어 별로 띄어쓰기가 되어 있고, 교착어 또한 아니죠. 그래서 상대적으로 영어 텍스트 분석이 쉽습니다.


다행히(?) 파이썬에는 Konlpy라는 한국어 자연어 처리 라이브러리가 있습니다.

해당 라이브러리를 이용하면, 보다 쉽게 한국어 텍스트 분석을 진행하는 게 가능합니다.


이번 글에서는 파이썬의 Konlpy 라이브러리를 활용하여 앱 리뷰 분석을 수행해 보겠습니다. Konlpy 라이브러리를 이용하면, 고객 리뷰에 대한 심층적인 텍스트 분석이 가능합니다.

고객 리뷰 분석 목적은 '앱 리뷰 텍스트에는 어떤 단어가 가장 많이 나왔을까?'입니다. 파이썬을 이용한 리뷰 분석을 통해 이 질문에 답하고자 합니다.

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


'리뷰 텍스트에는 어떤 단어가 가장 많이 나왔을까?'라는 질문에 답하기 위해서 3가지 분석 방법을 사용했습니다.


  1. 파이썬과 Konlpy OKt를 활용한 앱 리뷰 분석

  2. AI(머신러닝, scikit-learn, CountVectorizer)를 이용한 분석

  3. AI(머신러닝, scikit-learn, TfidfVectorizer)를 이용한 분석


이번 글에서는 'Konlpy OKt를 활용한 분석' 방법을 소개하겠습니다.


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. 형태소 분석기를 이용해 고객 리뷰 텍스트에서 명사 추출하기

한국어 텍스트 분석을 하기 위해서 KoNLPy 라이브러리의 Okt 형태소 분석기를 사용합니다.

Okt 형태소 분석기는 트위터(현 'X') 등 SNS에서 사용하는 줄임말 등을 쉽게 처리할 수 있는 한국어 형태소 분석기입니다.


from konlpy.tag import Okt

from collections import Counter

okt = Okt()

df['CONTENT_nouns'] = df['CONTENT'].apply(lambda x : okt.nouns(x))


위 코드는 각 리뷰 텍스트에서 명사를 추출합니다.

명사를 추출하면 불필요한 조사 등이 생략 되어서 의미 있는 정보를 알기가 비교적 쉽습니다.

5. 열 순서 변경하기

데이터를 보기 좋게 정리합니다.


df = df.reindex(columns=['NAME', 'RATING', 'CONTENT', 'CONTENT_nouns', 'MENU', 'IS_REPURCHASE', 'DATE'])

df.head()


꼭 필요한 과정은 아니지만, 리뷰 텍스트와 리뷰 텍스트에서 추출한 명사를 같이 보고 싶어서 'CONTENT'와 'CONTENT_nouns'를 함께 배치했습니다.


6. 모든 명사를 하나의 리스트로 모으기

추출한 명사를 하나의 리스트로 만듭니다. 리스트로 만들면 코드 활용 범위가 넓어지기 때문입니다.


all_nouns = sum(df['CONTENT_nouns'].tolist(), [])

all_nouns

7. 가장 많이 등장하는 명사 확인하기

Counter() 안에 리스트로 감싼 명사 데이터(all_nouns)를 넣습니다.

해당 매서드를 사용하면, 명사 데이터의 수를 쉽게 파악할 수 있습니다.


nouns_counter = Counter(all_nouns)

nouns_freq_df = pd.DataFrame(nouns_counter.items(), columns=['단어', '빈도'])

nouns_freq_df = nouns_freq_df.sort_values(by='빈도', ascending=False)

print(nouns_freq_df.head(10))


이 코드는 각 단어의 등장 횟수를 세고, 빈도가 높은 순으로 정렬합니다.


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

  • '김치'라는 단어가 가장 많이 나온 걸 확인할 수 있었습니다.

  • '양도', '고기', '두부'라는 단어의 빈도가 높았습니다.


빈도 수 높은 키워드에는 가격과 같은 민감한 키워드가 없었습니다.

오히려 김치찜 자체에 대한 키워드(고기·두부·양 등)가 많이 등장했습니다.


제가 가게 사장님이라면, 시장 상황이 어려울 경우 가격을 적절히 올릴 것 같습니다.

대신 고객이 마음에 들어 했던 요소인 '고기·두부·양'에 있어서 만큼은 타협하지 않을 듯 합니다.

가격이 상승해도 고객이 마음에 들었던 점을 더 강화해서 불만 리뷰가 작성 되지 않도록 노력할 거 같습니다.

정봉준

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