tak's data blog

프랜차이즈 카페 top 10 리뷰 분석(스타벅스, 이디야 등등) 본문

프로젝트

프랜차이즈 카페 top 10 리뷰 분석(스타벅스, 이디야 등등)

hyuntaek 2021. 10. 16. 21:14
반응형
SMALL

 

 

안녕하세요! 아주 오랜만에 게시물을 작성하네요... 요즘 취업 시즌이다보니 하반기 준비를 하느라 정신이 없었습니다ㅠㅠ

다시 부족한 부분 공부하며 게시물을 올리도록 하겠습니다!!

 

어느 도메인에서나 고객들의 리뷰 데이터를 분석하여 데이터 서비스를 기획하는 일은 중요합니다.

 

지난번 BOAZ에서 카페 추천시스템 프로젝트를 위해 수집한 리뷰 데이터를 통해 각 카페에 대해 분석하도록 하겠습니다. 

 

지난 번 크롤링 코드에 이어

명사 추출, 불용어 제거 등의 과정을 통해 워드 클라우드를 생성하여 인사이트를 도출하는 과정을 가지겠습니다.

 

총 10개의 프랜차이즈 카페를 기준으로 분석하겠습니다.

1. 스타벅스

2. 투썸

3. 이디야

4. 빽다방

5. 메가커피

6. 커피빈

7. 할리스

8. 폴바셋

9. 컴포즈

10. 공차

 

 

 

우선 전체적인 매장 수와 그에 따른 수집 리뷰 수입니다!

(데이터는 서울의 지하철 역을 기준으로 수집 되었습니다.) 

역시 스타벅스가 매장 수, 리뷰 수가 압도적으로 많았습니다. 그에 이디야 등은 매장 수에비해 리뷰 수가 적다는 점이 있었습니다.

 

 

 

 

1. 전처리(명사 추출, 불용어 제거 등)

 

 

우선 다음과 같은 데이터프레임에서 

import konlpy.tag

okt=konlpy.tag.Okt()

#명사 추출
review['noun']=review['review'].apply(lambda x : okt.nouns(x))

review['noun']=review['noun'].apply(lambda x : " ".join(x))

okt를 통해 명사를 추출하고 아래의 noun칼럼을 추가하였습니다.

 

 

 

 

분석에 어려움을 줄 수 있는 '불용어 제거'와 '한글자 단어'를 제거하기 위한 과정을 가지겠습니다.

# 의미 없는 한글자 제외
def 한글자제외(noun):
    return len(noun) >= 2

# 불용어 설정
stop_words = """아 휴 아이구 아이쿠 아이고 어 나 우리 저희 따라 의해 을 를 에 의 가 으로 로 에게 뿐이다 의거하여 근거하여 입각하여 기준으로 예하면 예를 들면 예를 들자면 저 소인 소생 저희 지말고 하지마 하지마라 다른 물론 또한 그리고 비길수 없다 해서는 안된다 뿐만 아니라 만이 아니다 만은 아니다 막론하고 관계없이 그치지 않다 그러나 그런데 하지만 든간에 논하지 않다 따지지 않다 설사 비록 더라도 아니면 만 못하다 하는 편이 낫다 불문하고 향하여 향해서 향하다 쪽으로 틈타 이용하여 타다 오르다 제외하고 이 외에 이 밖에 하여야 비로소 한다면 몰라도 외에도 이곳 여기 부터 기점으로 따라서 할 생각이다 하려고하다 이리하여 그리하여 그렇게 함으로써 하지만 일때 할때 앞에서 중에서 보는데서 으로써 로써 까지 해야한다 일것이다 반드시 할줄알다 할수있다 할수있어 임에 틀림없다 한다면 등 등등 제 겨우 단지 다만 할뿐 딩동 댕그 대해서 대하여 대하면 훨씬 얼마나 얼마만큼 얼마큼 남짓 여 얼마간 약간 다소 좀 조금 다수 몇 얼마 지만 하물며 또한 그러나 그렇지만 하지만 이외에도 대해 말하자면 뿐이다 다음에 반대로 반대로 말하자면 이와 반대로 바꾸어서 말하면 바꾸어서 한다면 만약 그렇지않으면 까악 툭 딱 삐걱거리다 보드득 비걱거리다 꽈당 응당 해야한다 에 가서 각 각각 여러분 각종 각자 제각기 하도록하다 와 과 그러므로 그래서 고로 한 까닭에 하기 때문에 거니와 이지만 대하여 관하여 관한 과연 실로 아니나다를가 생각한대로 진짜로 한적이있다 하곤하였다 하 하하 허허 아하 거바 와 오 왜 어째서 무엇때문에 어찌 하겠는가 무슨 어디 어느곳 더군다나 하물며 더욱이는 어느때 언제 야 이봐 어이 여보시오 흐흐 흥 휴 헉헉 헐떡헐떡 영차 여차 어기여차 끙끙 아야 앗 아야 콸콸 졸졸 좍좍 뚝뚝 주룩주룩 솨 우르르 그래도 또 그리고 바꾸어말하면 바꾸어말하자면 혹은 혹시 답다 및 그에 따르는 때가 되어 즉 지든지 설령 가령 하더라도 할지라도 일지라도 지든지 몇 거의 하마터면 인젠 이젠 된바에야 된이상 만큼 어찌됏든 그위에 게다가 점에서 보아 비추어 보아 고려하면 하게될것이다 일것이다 비교적 좀 보다더 비하면 시키다 하게하다 할만하다 의해서 연이서 이어서 잇따라 뒤따라 뒤이어 결국 의지하여 기대여 통하여 자마자 더욱더 불구하고 얼마든지 마음대로 주저하지 않고 곧 즉시 바로 당장 하자마자 밖에 안된다 하면된다 그래 그렇지 요컨대 다시 말하자면 바꿔 말하면 즉 구체적으로 말하자면 시작하여 시초에 이상 허 헉 허걱 바와같이 해도좋다 해도된다 게다가 더구나 하물며 와르르 팍 퍽 펄렁 동안 이래 하고있었다 이었다 에서 로부터 까지 예하면 했어요 해요 함께 같이 더불어 마저 마저도 양자 모두 습니다 가까스로 하려고하다 즈음하여 다른 다른 방면으로 해봐요 습니까 했어요 말할것도 없고 무릎쓰고 개의치않고 하는것만 못하다 하는것이 낫다 매 매번 들 모 어느것 어느 로써 갖고말하자면 어디 어느쪽 어느것 어느해 어느 년도 라 해도 언젠가 어떤것 어느것 저기 저쪽 저것 그때 그럼 그러면 요만한걸 그래 그때 저것만큼 그저 이르기까지 할 줄 안다 할 힘이 있다 너 너희 당신 어찌 설마 차라리 할지언정 할지라도 할망정 할지언정 구토하다 게우다 토하다 메쓰겁다 옆사람 퉤 쳇 의거하여 근거하여 의해 따라 힘입어 그 다음 버금 두번째로 기타 첫번째로 나머지는 그중에서 견지에서 형식으로 쓰여 입장에서 위해서 단지 의해되다 하도록시키다 뿐만아니라 반대로 전후 전자 앞의것 잠시 잠깐 하면서 그렇지만 다음에 그러한즉 그런즉 남들 아무거나 어찌하든지 같다 비슷하다 예컨대 이럴정도로 어떻게 만약 만일 위에서 서술한바와같이 인 듯하다 하지 않는다면 만약에 무엇 무슨 어느 어떤 아래윗 조차 한데 그럼에도 불구하고 여전히 심지어 까지도 조차도 하지 않도록 않기 위하여 때 시각 무렵 시간 동안 어때 어떠한 하여금 네 예 우선 누구 누가 알겠는가 아무도 줄은모른다 줄은 몰랏다 하는 김에 겸사겸사 하는바 그런 까닭에 한 이유는 그러니 그러니까 때문에 그 너희 그들 너희들 타인 것 것들 너 위하여 공동으로 동시에 하기 위하여 어찌하여 무엇때문에 붕붕 윙윙 나 우리 엉엉 휘익 윙윙 오호 아하 어쨋든 만 못하다 하기보다는 차라리 하는 편이 낫다 흐흐 놀라다 상대적으로 말하자면 마치 아니라면 쉿 그렇지 않으면 그렇지 않다면 안 그러면 아니었다면 하든지 아니면 이라면 좋아 알았어 하는것도 그만이다 어쩔수 없다 하나 일 일반적으로 일단 한켠으로는 오자마자 이렇게되면 이와같다면 전부 한마디 한항목 근거로 하기에 아울러 하지 않도록 않기 위해서 이르기까지 이 되다 로 인하여 까닭으로 이유만으로 이로 인하여 그래서 이 때문에 그러므로 그런 까닭에 알 수 있다 결론을 낼 수 있다 으로 인하여 있다 어떤것 관계가 있다 관련이 있다 연관되다 어떤것들 에 대해 이리하여 그리하여 여부 하기보다는 하느니 하면 할수록 운운 이러이러하다 하구나 하도다 다시말하면 다음으로 에 있다 에 달려 있다 우리 우리들 오히려 하기는한데 어떻게 어떻해 어찌됏어 어때 어째서 본대로 자 이 이쪽 여기 이것 이번 이렇게말하자면 이런 이러한 이와 같은 요만큼 요만한 것 얼마 안 되는 것 이만큼 이 정도의 이렇게 많은 것 이와 같다 이때 이렇구나 것과 같이 끼익 삐걱 따위 와 같은 사람들 부류의 사람들 왜냐하면 중의하나 오직 오로지 에 한하다 하기만 하면 도착하다 까지 미치다 도달하다 정도에 이르다 할 지경이다 결과에 이르다 관해서는 여러분 하고 있다 한 후 혼자 자기 자기집 자신 우에 종합한것과같이 총적으로 보면 총적으로 말하면 총적으로 대로 하다 으로서 참 그만이다 할 따름이다 쿵 탕탕 쾅쾅 둥둥 봐 봐라 아이야 아니 와아 응 아이 참나 년 월 일 령 영 일 이 삼 사 오 육 륙 칠 팔 구 이천육 이천칠 이천팔 이천구 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 령 영 이 있 하 것 들 그 되 수 이 보 않 없 나 사람 주 아니 등 같 우리 때 년 가 한 지 대하 오 말 일 그렇 위하 때문 그것 두 말하 알 그러나 받 못하 일 그런 또 문제 더 사회 많 그리고 좋 크 따르 중 나오 가지 씨 시키 만들 지금 생각하 그러 속 하나 집 살 모르 적 월 데 자신 안 어떤 내 내 경우 명 생각 시간 그녀 다시 이런 앞 보이 번 나 
다른 어떻 여자 개 전 들 사실 이렇 점 싶 말 정도 좀 원 잘 통하 놓 커피 스타벅스 이디야 투썸 폴바셋 공차 빽다방 메가커피 커피빈 할리스 컴포즈"""
stop_words=stop_words.split(' ')

 

 

그 다음은 워드 클라우드를 생성하기 위한 단어사전 코드입니다.

from konlpy.tag import Twitter 
from collections import Counter

# 단어 사전 생성
def word_dict(df,cl):
    df2 = df[df['label'] == cl]
    title_str = df2['review'].sum()
    cluster_nouns = Twitter().nouns(title_str)
    cluster_nouns = list(filter(한글자제외, cluster_nouns))
    remove_stop = [word for word in cluster_nouns if word not in stop_words]
    count_nouns = Counter(remove_stop)
    word_dict = dict(count_nouns.most_common(400))

    return word_dict

각 label(즉, 프랜차이즈 카페)에 따라 명사 단어와 불용어를 처리하고 가장 빈도수가 높은 단어 400개로 사전을 생성하였습니다.

 

 

각 카페별 워드 클라우드를 생성하기 위해 함수로 작성하였습니다.

from wordcloud import WordCloud
from wordcloud import ImageColorGenerator

# 워드 클라우드 생성 함수
def wordcloud(word_dict):
    wc = WordCloud(font_path = r'C:\Users\user\NanumBarunGothic (1).ttf',
               relative_scaling=0.5,
               background_color = "white",  
               max_font_size = 250,        
               margin = 0).generate_from_frequencies(word_dict)             
    plt.figure(figsize=(15,15))
    plt.imshow(wc) 
    plt.axis("off")

 

 

2. 워드클라우드 생성 

다음과 같이 워드 클라우드를 생성해보면

cafe_list = ['스타벅스','투썸','이디야','빽다방','메가커피','커피빈','할리스','폴바셋','컴포즈','공차']

for cafe in cafe_list:
    wordcloud(word_dict(review, cafe))

 

 

스타벅스(좌) / 투썸플레이스(우)

스타벅스는 다른 곳에 비해 '매장'의 비율이 압도적으로 높았고, 커피, 케익에 대한 얘기보다는 장소, 공간, 분위기 등의 언급이 많았습니다. 

그리고 투썸플레이스는 케익 맛집으로 역시나 '케익'의 비중이 높았습니다. 

 

이디야(좌) / 빽다방(우)

빽다방은 '불친절'의 비중이 다른 카페에 비해 높아 보임을 확인할 수 있었습니다.

 

메가커피(좌) / 커피빈(우)

메가커피는 역시 '가성비', '가격', '음료' 등의 단어 빈도수가 높았습니다.

 

할리스(좌) / 폴바셋(우)

특이하게도 할리스커피는 '공부', '자리', '스터디', '매장' 등의 장소와 관련된 단어가 많아 공부의 적합한 카페인지? 아니면 불만에 대한 얘기인지 추후 LDA 등의 분석을 통해 확인하면 좋을 것 같았습니다.

 

폴바셋은 '아이스크림', '라떼' 등 메뉴에 관한 얘기가 많았습니다.

 

컴포즈(좌) / 공차(우)

컴포즈는 메가커피와 비슷하게 '가격' 등의 가성비 위주의 단어가 즐비했고, 다른 카페에 비해 '테이크아웃', '와플', '스무디' 등의 언급이 많았습니다.

공차는 '음료', '밀크', '지점별로' 를 통해 지점별로 맛의 차이가 존재함을 예측해보았고,  알바생의 불친절에 관한 얘기가 많았습니다.

 

 

 

3. 최종 결과

최종적으로 10개의 카페를 비교한 결과 카페마다 나타나는 특징이 다름을 확인할 수 있었습니다. 매장별로 자주 언급되는 단어의 LDA를 통해 그에 대해 긍/부정을 판단할 수 있을 것입니다. 

 

또한 그 카페의 주력 메뉴가 '케익'인지 '와플'인지 '라떼'인지 등을 통해 메뉴 개발에 인사이트를 제공할 수도 있을 것입니다.

혹은 '장소', '스터디', '매장'등 음료보다는 장소에 치중을 두는 고객을 위한 분석도 실시할 수 있을 것입니다.

 

k-means, DBSCAN 등을 활용한 텍스트 군집 분석과 더불어 LDA를 실시하여 더 자세한 분석을 해보아야 할 것 같습니다.

 

 

반응형
LIST