반응형
네이버 API와 SK의 API를 이용해서 여행지의 월별 검색수와 여행자수의 데이터를 비교해보겠습니다.
아래 1, 2번의 데이터를 활용해서 만들었습니다.
1. 통합 검색 트렌드의 월간 실 검색수 추정하기
2. [SK Open API] 검색 지역의 월간 추정 여행자수 가져오기
3. 월별 검색수와 여행자수 비교하기
1. 통합 검색 트렌드의 월간 실 검색수 추정하기
2. [SK Open API] 검색 지역의 월간 추정 여행자수 가져오기
3. 월별 검색수와 여행자수 비교하기
통합트렌드에서 월간 실 검색수 추정하는 코드입니다.
client_id, client_secret은 본인의 데이터의 입력이 필요합니다.
#통합검색어 트렌드 확인
import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='NanumGothic')
def gettrenddata(keyword1,keyword2,startDate,endDate):
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
timeUnit='month'
keywordGroups=[
{'groupName':keyword1, 'keywords':[keyword1]},
{'groupName':keyword2, 'keywords':[keyword2]},
]
url = "https://openapi.naver.com/v1/datalab/search";
response_results_all = pd.DataFrame()
body_dict={} #검색 정보를 저장할 변수
body_dict['startDate']=startDate
body_dict['endDate']=endDate
body_dict['timeUnit']=timeUnit
body_dict['keywordGroups']=keywordGroups
body_dict['device']=device
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])
response_results_all = pd.concat([response_results_all,response_results])
return response_results_all
API_KEY, SECRET_KEY, CUSTOMER_ID는 본인의 데이터의 입력이 필요합니다.
#연관검색어의 월별검색수 확인
import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt
import time
import random
import requests
import hashlib
import hmac
import base64
class Signature:
@staticmethod
def generate(timestamp, method, uri, secret_key):
message = "{}.{}.{}".format(timestamp, method, uri)
hash = hmac.new(bytes(secret_key, "utf-8"), bytes(message, "utf-8"), hashlib.sha256)
hash.hexdigest()
return base64.b64encode(hash.digest())
def get_header(method, uri, api_key, secret_key, customer_id):
timestamp = str(round(time.time() * 1000))
signature = Signature.generate(timestamp, method, uri, secret_key)
return {'Content-Type': 'application/json; charset=UTF-8', 'X-Timestamp': timestamp,
'X-API-KEY': api_key, 'X-Customer': str(customer_id), 'X-Signature': signature}
def getrelkeyword(keyword1,keyword2):
BASE_URL = 'https://api.naver.com'
API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
CUSTOMER_ID = 'YOUR_CUSTOMER_ID'
uri = '/keywordstool'
method = 'GET'
params={}
params['hintKeywords']=[keyword1,keyword2]
params['showDetail']='1'
r=requests.get(BASE_URL + uri, params=params,
headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))
return pd.DataFrame(r.json()['keywordList'])
SK API의 월간 여행자수 추정데이터를 불러오는 코드입니다.
#검색어의 여행자수 구해오기
import requests
import pandas as pd
# 여행지 리스트 수집
def gettravellist(appkey):
url = "https://apis.openapi.sk.com/puzzle/travel?type=sig"
headers = {
"accept": "application/json",
"appkey": appkey
}
response = requests.get(url, headers=headers)
result=response.json()
return pd.DataFrame(result['contents'])
# 검색 지역의 월간 여행자수 구하기
def gettraveller_bymonth(appkey,districtCode,districtName,yearmonth):
url = "https://apis.openapi.sk.com/puzzle/traveler-count/raw/monthly/districts/" + \
districtCode + "?" + "yearMonth=" + yearmonth + \
"&gender=all&ageGrp=all&companionType=all"
headers = {
"accept": "application/json",
"appkey": appkey
}
response = requests.get(url, headers=headers)
#
result=response.json()
travelerCount=result['contents']['raw']['travelerCount']
yearMonth=result['contents']['raw']['yearMonth']
df=pd.DataFrame({'districtCode':[districtCode],'districtName':[districtName],
'yearMonth':[yearMonth],'travelerCount':[travelerCount]})
df['date']=pd.to_datetime(df['yearMonth'], format='%Y%m')
return(df.set_index('date'))
def gettraveller(appkey,keywords,yearmonths):
#여행지 리스트 가져오기
df_list=gettravellist(appkey)
#여행지가 여러개일 경우 하나의 DataFrame에 저장하기
result_all=pd.DataFrame()
for keyword in keywords:
#여행지에서 검색어를 포함한 지역들을 가져오기
districtName_df=df_list.loc[df_list['districtName'].str.contains(keyword),:]
for yearmonth in yearmonths:
for i, r in districtName_df.iterrows():
districtCode = r['districtCode']
districtName = r['districtName']
result=gettraveller_bymonth(appkey,districtCode,districtName,yearmonth)
result_all = pd.concat([result_all,result])
return result_all
위의 함수들을 이용해서 실제 데이터를 불러와 결과를 확인해보겠습니다.
검색할 여행지는 '제주', '속초' 두가지 이고 기간은 202205~202209까지 총 5개월입니다.
2022년 9월이외에는 속초의 검색수가 많은것을 확인가능합니다.
keyword1='속초'
keyword2='제주'
startDate='2022-05-01'
endDate='2022-09-30'
device='mo' #'pc','mo'
trend_fin=getcountbymonth(keyword1,keyword2,startDate,endDate,device)
#그래프 작성
from matplotlib.ticker import StrMethodFormatter
titles=trend_fin['title'].unique()
plt.figure(figsize=(6,2))
for title in titles:
data=trend_fin.loc[(trend_fin['title']==title) ,:]
plt.plot(data['period'],data[(device+'검색수')],label=title)
plt.xticks(rotation=90)
plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}'))
plt.legend()
plt.title('월별검색수')
plt.show()
다음은 '제주','속초'에 대한 여행자수를 확인합니다.
skappkey는 본인의 데이터 입력이 필요합니다.
appkey='YOUR_APPKEY'
#제주를 검색어로.
keywords=[keyword1,keyword2]
yearmonths=['202205','202206','202207','202208','202209']
travel_df=gettraveller(appkey,keywords,yearmonths)
travel_df
그래프로도 확인해보면 아래와 같습니다.
titles=travel_df['districtName'].unique()
plt.figure(figsize=(6,2))
for title in titles:
data=travel_df.loc[(travel_df['districtName']==title) ,:]
plt.plot(data.index,data['travelerCount'],label=title)
plt.xticks(rotation=90)
plt.legend()
plt.title('여행자수')
plt.show()
8월이 휴가철이라 여행자수가 많은것을 알수 있습니다.
제주도의 경우 월별 검색수가 9월에 상승한 것을 알수 있는데,
10월이후 제주도 여행자수를 확인해 보는 것도 재미있지 않을까요.
이상으로 여행지의 월별 검색수와 여행자수의 데이터를 비교해 봤습니다.
반응형
'API' 카테고리의 다른 글
[네이버 API] 블로그 나만의 키워드 마스터 만들기(파이썬) (7) | 2022.10.15 |
---|---|
[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥) (4) | 2022.10.15 |
[SK Open API] 검색 지역의 월간 추정 여행자수 가져오기 (4) | 2022.10.14 |
[SK Open API] 앱 등록 및 상품 구매 후 응답결과확인(무료) (4) | 2022.10.12 |
네이버 API 통합 검색 트렌드의 월간 실 검색수 추정하기(파이썬) (5) | 2022.10.12 |