<jupyter_start><jupyter_text>- Github: [yoonkt200](https://github.com/yoonkt200/python-data-analysis)  4.2 강남역 맛집 리뷰로 알아보는 감성 분류분류 모델의 가장 대표적인 활용 방법 중 하나는 바로 **감성 분류**이다. 감성 분류란 문서(텍스트 데이터)를 긍정(posutive)의견 또는 부정(negative)의견으로 나누어 분류하는 것이다. 이번 절에서는 강남역 맛집 리뷰 데이터를 활용하여 감성 분류를 수행해본다. 더불어 어떠한 키워드가 맛집을 식별해 주는 중요 키워드인지도 함께 알아보자. Step1 크롤링: 네이버 플레이스 리뷰 크롤링첫 번째 단계에서는 크롤링을 이용하여 감성 분류에 필요한 데이터를 직접 수집한다. 이번 예제에서 크롤링할 데이터는 네이버 플레이스의 페이지 구조는 다음의 그림과 같다. 만약 '강남역 고기집'과 같은 특정 검색어를 입력하면 링크가 포함된 음식점의 정보가 랭킹 형태로 나열된다. 네이버 플레이스 API는 별도의 라이브러리 설치나 개발자 등록 없이 source_url에 검색 규칙을 추가하는 것만으로도 크롤링을 적용할 수 있다. 아래의 코드와 같이 start, display, query, sortingOrder 파라미터로 검색 규칙을 추가한다.- start, display: 검색 결과를 얼마만큼 보여줄지에 관련된 파라미터- query: 검색하고 싶은 장소나 음식점에 대한 검색어- sortingOrder: 어떤 방식으로 검색 결과를 정렬할지에 대한 파라미터검색 규칙을 추가한 url_concat에 requests.get 함수를 적용하면 json 형태의 검색 결과 데이터를 얻을 수 있다. 그리고 이를 json.loads 함수로 변환하면 파이썬의 dictionary와 동일한 형태로 사용할 수 있다. 데이터를 출력한 결과는 다음과 같다.- 관련도순 상위 100개의 고기집 리스트 정보 API 구하기<jupyter_code># -*- coding:utf-8 -*-
%matplotlib inline

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import requests
import json
# 네이버 플레이스 API를 호출하기 위한 기본 주소이다.
source_url = "http://store.naver.com/sogum/api/businesses?"
# 검색 규칙 파라미터를 추가 한다.
url_parameter_start = "start=1"
url_parameter_display = "&display="
url_parameter_query = "&query=강남역+고기집"
url_parameter_sorting = "&sortingOrder=precision"
url_concat = source_url + url_parameter_start + \
        url_parameter_display + str(100) + url_parameter_query + url_parameter_sorting

# 반환받은 API 데이터에 json.loads 함수를 사용한다
json_data = requests.get(url_concat).text
restaurant_list_data = json.loads(json_data)

# 관련도순 상위 100개의 고기집 리스트 정보를 출력한다.
print(str(restaurant_list_data)[:100]+"...")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0813692480359147, 'fraction_numerical': 0.012906846240179574, 'mean_word_length': 4.322388059701493, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '308474', 'license': 'MIT', 'n_tokens_mistral': 1192, 'n_tokens_neox': 1543, 'n_words': 252, 'path': 'Chapter 4.2_NOT YET.ipynb', 'repo_name': 'goldang01/python_data_analysis_study', 'size': '1782'}