본문 바로가기

API

[네이버 개발자센터 API] 연령대별 통합 검색어 트렌드(파이썬)

반응형

네이버 API의 통합 검색어를 이용해 연령대별 검색어 트렌트가 어떻게 다른지 확인해보겠습니다.

 

1. 네이버 API에서 통합 검색어 트렌드 데이터를 가져올 환경 확인(Skip가능)

2. 연령대별 통합 검색어 트렌드 비교

 

1. 네이버 API에서 통합 검색어 트렌드 데이터를 가져올 환경 확인(Skip가능)

https://yenpa.tistory.com/9

 

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

네이버 API의 데이터랩 > 통합 검색어 트렌드 데이터를 확인해보겠습니다. 1, 2번은 스킵 가능합니다. 1. 네이버 개발자센터 API이용신청 2. client_id, client_secret 확인 3. 예제 코드 실행 및 결과확인 4.

yenpa.tistory.com

 

2. 연령대별 통합 검색어 트렌드 비교

위 포스팅의 결과를 수정한 전체 코드는 아래와 같습니다.

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

age_conv={'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세 이상'}

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

    url = "https://openapi.naver.com/v1/datalab/search";
    
    response_results_all = pd.DataFrame()
    
    for age in ages:
        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']=[age]

        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']
            result['age']=age # 연령대 정보를 추가

            response_results = pd.concat([response_results,result])
        
        response_results_all = pd.concat([response_results_all,response_results])
        
    #title별로 그래프를 그리기 위한부분
    titles=response_results['title'].unique() 

    for age in ages:
        plt.figure(figsize=(4,1))
        for title in titles:
            data=response_results_all.loc[(response_results_all['title']==title) 
                          & (response_results_all['age']==age),:]
            plt.plot(data['period'],data['ratio'],label=title)
            plt.xticks(rotation=90)
            plt.legend()
        plt.title(str(age_conv[age]))
        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','4','5','6','7','8','9','10','11']  # #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)

 

주요구문을 살펴보겠습니다.

age의 숫자 정보를 알기 쉬운 정보로 바꾸기 위한 Dictionary입니다.

age_conv={'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세 이상'}

전체 데이터가 저장될 DataFrame이 되겠습니다.

response_results_all = pd.DataFrame()

연령대 별로 Naver API의 통합트렌드 정보를 가져와서 response_result에 저장 후

response_results_all에 합치는 작업이 되겠습니다.

for age in ages:
	...생략...
    for data in response_json['results']:
        result=pd.DataFrame(data['data'])
        result['title']=data['title']
        result['age']=age # 연령대 정보를 추가

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

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

그래프를 그리는 부분으로 age(연령대) 단위로 그래프를 그립니다.

for age in ages:
    plt.figure(figsize=(4,1))
    for title in titles:
        data=response_results_all.loc[(response_results_all['title']==title) 
                      & (response_results_all['age']==age),:]
        plt.plot(data['period'],data['ratio'],label=title)
        plt.xticks(rotation=90)
        plt.legend()
    plt.title(str(age_conv[age]))
    plt.show()

결과는 아래와 같습니다.

경복궁 -  제주도의 검색어 트렌트의 경우, 20세 이상은 제주도가 검색 비중이 높은데

0~12세의 경우는 경복궁이 높은 달도 있는것이 확인됩니다.

아래 검색어에 대한 결과를 확인해보겠습니다.

startDate='2022-01-01'
endDate='2022-09-30'
timeUnit='month'  #'day','week','month'
keywordGroups=[
    {'groupName':'아이돌', 'keywords':['아이돌','그룹']},
    {'groupName':'단풍놀이', 'keywords':['단풍놀이','코스','명소']},
]

예상대로 10대까지는 아이돌이 단풍놀이를 앞서네요.

 

이상으로 연령대별 검색어 트렌트를 비교해 봤습니다.

반응형