본문 바로가기

API

[네이버 개발자센터 API] 통합 검색어 트렌드 데이터 가져오기(파이썬)

반응형

네이버 API의 데이터랩 > 통합 검색어 트렌드 데이터를 확인해보겠습니다.

1, 2번은 스킵 가능합니다.

 

1. 네이버 개발자센터 API이용신청

2. client_id, client_secret 확인

3. 예제 코드 실행 및 결과확인

4. 응용 : 검색어 트렌드를 그래프로 확인

 

1. 네이버 개발자센터 API이용신청

https://yenpa.tistory.com/2

 

[네이버 개발자센터 API] API 이용신청 및 Application 등록방법

네이버 개발자센터에서 API 이용신청 및 Application을 등록하는 방법을 알아보겠습니다. 1. 사이트접속 2. 로그인 3. API 이용신청 및 Application 등록 4. 등록정보확인 1. 사이트 접속 아래의 네이버 개

yenpa.tistory.com

 

2. client_id, client_secret 확인

https://yenpa.tistory.com/5

 

[네이버 개발자센터 API] client_id, client_secret확인

네이버 개발자센터 사이트내에서 나의 client_id, client_secret을 확인해보겠습니다. 1. client_id, client_secret확인 사이트 내에서 Products > 검색을 클릭합니다. 하단의 오픈 API 이용 신청으로 이동합니다..

yenpa.tistory.com

 

3. 예제 코드 실행 및 결과확인

사이트 내에서 Products > 데이터랩을 클릭합니다.

아래의 페이지에서 개발 가이드 보기를 클릭합니다.

아래의 코드로 기본 통합데이터의 데이터 수집이 가능합니다.

client_id, client_secret은 본인의 데이터 입력, query에는 검색할 단어를 입력하시면 됩니다.

#-*- coding: utf-8 -*-
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
url = "https://openapi.naver.com/v1/datalab/search";
body = "{\"startDate\":\"2017-01-01\",\"endDate\":\"2017-04-30\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"한글\",\"keywords\":[\"한글\",\"korean\"]},{\"groupName\":\"영어\",\"keywords\":[\"영어\",\"english\"]}],\"device\":\"pc\",\"ages\":[\"1\",\"2\"],\"gender\":\"f\"}";

request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
request.add_header("Content-Type","application/json")
response = urllib.request.urlopen(request, data=body.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 

4. 응용 : 검색어 트렌드를 그래프로 확인

필요한 라이브러리를 import합니다.

import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt

나중 그래프에서 한글이 깨지지 않도록 설정합니다.

plt.rc('font', family='NanumGothic')

데이터 수집하는 부분을 함수로 선언합니다.

import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='NanumGothic') 

def getresult(startDate,endDate,timeUnit,keywordGroups,device,gender,ages):

    url = "https://openapi.naver.com/v1/datalab/search";

    body_dict={} #검색 정보를 저장할 변수
    body_dict['startDate']=startDate
    body_dict['endDate']=endDate
    body_dict['timeUnit']=timeUnit
    body_dict['keywordGroups']=keywordGroups
    body_dict['device']=device
    body_dict['gender']=gender
    body_dict['ages']=ages

    body=str(body_dict).replace("'",'"') # ' 문자로는 에러가 발생해서 " 로 변환

    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id",client_id)
    request.add_header("X-Naver-Client-Secret",client_secret)
    request.add_header("Content-Type","application/json")
    response = urllib.request.urlopen(request, data=body.encode("utf-8"))
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        response_json = json.loads(response_body)
    else:
        print("Error Code:" + rescode)

    # 결과데이터중 'data' 와 'title'만 따로 DataFrame으로 저장
    response_results = pd.DataFrame()
    for data in response_json['results']:
        result=pd.DataFrame(data['data'])
        result['title']=data['title']

        response_results = pd.concat([response_results,result])

        
    #title별로 그래프를 그리기 위한부분
    titles=response_results['title'].unique() 
    
    plt.figure(figsize=(8,3))

    for title in titles:
        data=response_results.loc[response_results['title']==title,:]
        plt.plot(data['period'],data['ratio'],label=title)
        plt.xticks(rotation=90)
        plt.legend()
    plt.show()

결과 데이터의 response_json에서 response['results']['data'] 에 기간별 검색 비율데이터가 있어

이부분만 따로 DataFrame에 저장하고, 데이터 구분을 위해 'title' column에 정보를 추가했습니다.

 response_results = pd.DataFrame()
    for data in response_json['results']:
        result=pd.DataFrame(data['data'])
        result['title']=data['title']

        response_results = pd.concat([response_results,result])

title 별 그래프를 그리는 부분입니다.

    for title in titles:
        data=response_results.loc[response_results['title']==title,:]
        plt.plot(data['period'],data['ratio'],label=title)
        plt.xticks(rotation=90)
        plt.legend()
    plt.show()

 

다음은 검색어 정보의 입력부분이 되겠습니다.

검색어 부분을 입력하기 좋도록 수정했습니다.

client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"

startDate='2022-01-01'
endDate='2022-09-30'
timeUnit='month'  #'day','week','month'
keywordGroups=[
    {'groupName':'경복궁', 'keywords':['야간개장','주차','티켓']},
    {'groupName':'제주도', 'keywords':['맛집','브이패스']},
]
device='pc'  #'pc','mo'
gender='f'   #'m','f'
ages=['1','2','3']  #1: 0∼12세, 2: 13∼18세, 3: 19∼24세, 4: 25∼29세, 
#5: 30∼34세, 6: 35∼39세, 7: 40∼44세, 8: 45∼49세, 9: 50∼54세, 10: 55∼59세, 11: 60세 이상


getresult(startDate,endDate,timeUnit,keywordGroups,device,gender,ages)

그래프로 확인해보겠습니다.

24세 이하의 연령대에서 7~8월에 제주도 검색량이 높아진것을 확인할수 있습니다.

이상으로 검색트렌드를 그래프로 확인하는 방법을 알아봤습니다.

반응형