크롤링을 활용한 우리동네 맛집 데이터 워드클라우드 만들기 실습

우리동네 맛집 데이터를 크롤링하여 워드클라우드로 시각화하는 실습을 소개합니다. 다양한 시각화 라이브러리와 함께 데이터를 분석하고 인사이트를 도출해보세요.

1. 데이터 시각화와 크롤링

 

1.1. 데이터 시각화란?

데이터 시각화는 복잡한 데이터나 패턴을 직관적으로 표현하여 이해하기 쉽게 만드는 과정입니다. 그림, 차트, 그래프 등 다양한 형태로 정보를 표현할 수 있으며, 효과적인 시각화는 데이터에 숨겨진 통찰력을 발견하는 데 큰 도움이 됩니다.
 

1.2. 파이썬 데이터 시각화 라이브러리 종류

1.2.1. Matplotlib(https://matplotlib.org/)

notion image
Matplotlib은 파이썬에서 2D 그래프를 그리는 데 사용되는 가장 기본적인 라이브러리입니다.
라인 플롯, 스캐터 플롯, 바 차트, 히스토그램, 파이 차트 등 다양한 차트와 플롯 스타일을 필요로 할때 사용합니다. 플롯 스타일링에 높은 유연성을 제공하기 때문에 많이 기본적으로 제일 많이 활용한다고 생각하시면 됩니다. 그렇기 때문에 다른 시각화 라이브러리들의 기반이 되는 라이브러리입니다.
 

1.2.2. Seaborn(https://seaborn.pydata.org/)

notion image
Seaborn은 Matplotlib을 기반으로 만들어진 고급 시각화 라이브러리입니다.
통계적 데이터 시각화에 중점을 둘때 주로 사용합니다. Matplotlib보다 더 나은 색상 팔레트, 테마, 그래픽 요소를 제공하고 히트맵, 페어플롯, 바이올린 플롯 등 다양한 차트를 지원합니다.
 

1.2.3. Plotly(https://plotly.com/python/)

notion image
Plotly는 대화형 그래프를 생성하기 위한 라이브러리입니다.
웹 상에서의 대화형 플롯 생성에 최적화되어 있습니다. Plotly 는 D3.js를 기반으로 하기 때문에, 다양한 플랫폼과 언어에서 지원됩니다.
 

1.2.4. Bokeh(https://bokeh.org/)

notion image
Bokeh는 조금 더 세련된 시각화를 생성하기 위한 파이썬 라이브러리입니다.
동적인 데이터 시각화를 생성해주기 때문에 웹을 만들어서 플랫폼에 활용하면 좋을 것 같다는 생각을 합니다. 요즘에는 무엇이든지, 동적,즉 반응형이 두각을 드러내고 있기 때문에 Bokeh를 사용하면 좀 더 매력적이고, 예쁜 보고서를 작성할 수 있습니다.
 

1.2.5. Altair(https://altair-viz.github.io/)

notion image
Altair는 Vega와 Vega-Lite를 기반으로 한 Python 전용 선언적 통계 시각화 도구입니다.
Altair는(은) 그래픽 작업의 복잡성에서 벗어나 데이터의 핵심 내용에 중점을 둘 수 있도록 설계되었습니다. Altair의 주요 특징 중 하나는 Altair의 API입니다. 이는 Vega-Lite의 직관적이고 일관된 문법을 기반으로 하여 사용자가 빠르게 익힐 수 있습니다. 이러한 구조 덕분에 사용자는 복잡한 코드 없이도 데이터를 간결하고 심미성있게 시각화할 수 있습니다.
 
위 다섯가지는 시각화 라이브러리 중 대표적인 일부이며, 이외에도 다양한 라이브러리가 실시간으로 출시,발전하고 있습니다. 한 가지만을 사용하는 것이 아니라 다양한 시각화 라이브러리를 접목시켜 보다 직관적으로 데이터를 분석하는데에 활용하시면 좋을 것 같습니다.
다음은 이 라이브러리 중, 주제로 사용할 ‘워드클라우드’를 설명하겠습니다.
 
 

2. 워드클라우드(Word Cloud)란?

워드 클라우드는 텍스트 데이터 내에서 단어의 빈도수나 중요도에 따라 다른 크기로 표현하는 시각화 기법입니다. 단어의 빈도수가 높을수록 그 단어는 클라우드 내에서 더 크게 표현되기 때문에 굉장히 직관적이라고 말할 수 있습니다. 워드클라우드를 활용하여 한 눈에 어떤 단어나 주제가 텍스트에서 중요한지를 쉽게 파악할 수 있는 장점이 있습니다.

2.1. 타 시각화 라이브러리와의 차이점

위에 언급했었던 시각화 라이브러리들과 가장 큰 차이점에 있어서는 텍스트를 기반으로 한다는 것입니다.
앞서 소개한 라이브러리는 모두 정형화된 데이터(엑셀 등 이미 데이터셋의 형태를 갖춘 데이터)를 기반으로 하지만, 워드클라우드는 사용자들이 웹에 댓글, 글 등의 텍스트 데이터를 작성했을 때 그것들을 분석하고 분할하여 시각화를 할 수 있도록 도와줍니다.
 
 

3. 예제 실습

3.1. 해시스크래퍼 로그인

먼저 https://www.hashscraper.com/ 에 가입하여 대시보드에 들어갑니다.
notion image
notion image
해시스크래퍼에 가입하셔서 대시보드를 확인해보시면, 다양한 크롤링 봇들이 있습니다. 이는 개발지식이 없는 비전공자도 쉽고 빠르게 데이터를 수집할 수 있습니다. 사이트마다 다양한 봇이 있기 때문에 필요하신 사이트를 검색하여 활용하시면 좋습니다.
 

3.2. 네이버 지도수집봇 찾기

이번에는 네이버 지도를 활용하기 위해 네이버지도를 검색한 뒤에 네이버 지도 수집 카드를 클릭해줍니다.
notion image
 
 
네이버지도 카드를 클릭하시면 해당 페이지가 나옵니다.
notion image
 

3.3. 수집 설정하기

키워드를 편집할 수 있게 해당 부분 및 설정 버튼을 클릭해줍니다.
notion image
팝업모달이 뜨게 되는데, ‘키워드’란에 지역+토픽키워드를 입력해줍니다.
최대 수집개수 또한 사용자 임의로 선택하실 수 있습니다.
지속적인 자동수집이 필요할 경우, 수집 주기를 설정해주시면 됩니다. 저장하고나서 데이터 수집 시작 버튼을 눌러 시작해줍니다.
notion image
 
 

3.4. 수집결과 확인

수집이 진행되면 아래 이미지와 같이 데이터 수집시작 버튼 밑에 나오기 시작합니다.
notion image
 
‘view’버튼을 클릭하면, 데이터의 결과가 나옵니다.
 
notion image
 
‘엑셀 다운로드’를 클릭하시면 해당 데이터를 다운받아보실 수 있습니다. 아래의 이미지는 다운받았을 때 나오는 엑셀 파일입니다.
notion image
 

3.5. 데이터 읽어오기

해당 데이터들을 read_excel로 읽어옵니다.
import pandas as pd my_hometown_shop = pd.read_excel('../blog/네이버 지도 수집.xlsx') my_hometown_shop
notion image
 
읽어온 데이터의 컬럼(column)중 워드클라우드 제작에 필요한 ‘카테고리’ 컬럼만 남겨두고 모두 제거해줍니다.
my_hometown_shop_new= my_hometown_shop['카테고리']
notion image
데이터를 프레임화 시키면 위와 같이 row가 보기좋게 정렬됩니다.
 

3.6. 워드클라우드 적용

정제한 데이터를 활용하여 워드클라우드를 적용하여줍니다.
from wordcloud import WordCloud import matplotlib.pyplot as plt import matplotlib.font_manager as fm sys_font = fm.findSystemFonts() nanum_fonts = [f for f in sys_font if 'Nanum' in f] path ='/Library/Fonts/NanumBarunpenRegular.ttf' # 아까 언급했던 경로로 직접 설정합니다. path = '/Library/Fonts/NanumBarunpenRegular.ttf' wordcloud = WordCloud(width=800, height=800, background_color='white', max_words=200, contour_width=3, contour_color='steelblue', font_path=path).generate(' '.join(my_hometown_shop['카테고리'])) plt.figure(figsize=(10, 10)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show()
notion image
해당 워드클라우드를 통해서 노량진의 맛집에는 생선회,한식이 큰 비중을 차지하는 것을 볼 수 있습니다.
위의 방식처럼 수집한 지역맛집 데이터를 통해 워드클라우드를 제작하면, 지역별 업종 분포도를 직관적으로 확인할 수 있습니다.
다양한 방식으로 활용해보시기 바랍니다.