오픈소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#10 네이버 데이터랩(2) - 쇼핑 인사이트
안녕하세요. 디노랩스입니다!
오늘은 어제에 이어서 네이버 데이터랩 API 기능 중 쇼핑 인사이트! 활용하는 법을 소개해 드리려고 합니다.
쇼핑 인사이트도 마찬가지로 네이버 데이터랩 사이트(LINK)에서 제공하고 있고, 데이터랩 API를 활용하면 직접 데이터를 수집하여 사용 목적에 알맞게 데이터를 가공할 수 있으며 반복 작업이 필요한 경우 조금 더 효율적으로 데이터를 수집할 수 있습니다!!
(1)API이용신청
먼저 마찬가지로 API 이용신청을 해야겠죠?ㅎㅎ
통합 검색어 트렌드 API 신청과 동일하게 쇼핑인사이트 API 이용을 위해서는 API 이용 신청을 해야합니다. 아래 링크에 접속하여 로그인한 뒤 애플리케이션 등록 버튼을 눌러 아래 입력예시와 같이 입력하여 이용신청을 완료해주세요.
- 애플리케이션 이름은 임의로 설정해도 무관합니다.
- 웹 서비스 URL 은 아래와 같이 localhost로 설정하거나 활용하고 있는 주피터 노트북 url로 설정해주세요.
https://developers.naver.com/main/
NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음
developers.naver.com
<입력 예시>
(2)분야별 조회
쇼핑인사이트 데이터 조회 기능은 크게 분야별 조회, 키워드별 조회로 나눌 수 있습니다.
먼저 분야별 조회 기능을 살펴보겠습니다.
이전과 마찬가지로 필요한 라이브러리를 import 하고 생성한 API의 client ID와 client secret key 를 입력합니다.
# colab에서 한글 폰트 사용을 하기 위한 코드
import matplotlib.font_manager as fm
!apt-get -qq -y install fonts-nanum > /dev/null
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
fm._rebuild()
# 한글 폰트 사용을 위해 런타임을 재시작합니다.
import os
os.kill(os.getpid(), 9)
# 이전 셀을 실행한 후 반드시 실행해주세요!!
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm
# 마이너스 표시 문제
mpl.rcParams['axes.unicode_minus'] = False
# 한글 폰트 설정
path = '/usr/share/fonts/truetype/nanum/NanumGothicBold.ttf'
font_name = fm.FontProperties(fname=path, size=18).get_name()
plt.rc('font', family=font_name)
fm._rebuild()
import os
import sys
import json
import urllib.request
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
import seaborn as sns
import warnings
warnings.filterwarnings(action='ignore')
client_id = "YOUR_CLIENT_ID" # 발급받은 CLIENT_ID 를 입력해주세요
client_secret = "YOUR_CLIENT_SECRET" # 발급받은 CLIENT_SECRET 을 입력해주세요
(2-1)분야별 트렌드 조회
우선 분야별 전체 트렌드 조회를 살펴보겠습니다.
해당 기능의 url과 요청변수를 목적에 맞게 입력해줍니다.
(예제로는 2020년 20~40대 여성의 "패션의류", "화장품/미용" 에 대한 월별 트렌드를 불러오겠습니다.)
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/categories"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = [
{"name":"패션의류", "param":["50000000"]},
{"name":"화장품/미용", "param":["50000002"]},
] # 분야 이름과 분야 코드 쌍의 배열 (최대 3개)
## name : 쇼핑 분야 이름
## param : 쇼핑 분야 코드 (네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는
## cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.)
device = ""
gender = "f"
ages = ["20", "30", "40"]
요청변수에 대한 상세 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
참고로 위에서 입력한 조건은 데이터랩에서 아래와 같와 같이 입력한 것과 동일한 조건입니다.
이제 해당 요청변수를 담은 body라는 딕셔너리를 생성한 뒤 JSON 형태로 변환하여 파라미터를 넘겨줍니다.
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"device": device,
"gender": gender,
"ages": ages
}
body = json.dumps(body)
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()
print(rescode)
rescode 가 위와 같이 200이 나왔다면 정상적으로 API를 통해 데이터를 반환한 것입니다.
반환된 데이터는 어떤 정보를 담고 있을까요?
JSON 형태로 반환된 데이터를 파이썬 딕셔너리 객체로 변환하여 확인해봅시다.
from pprint import pprint
result = json.loads(response.read())
pprint(result)
반환된 데이터는 다음과 같은 정보를 담고 있습니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 쇼핑 분야 이름
- category : 쇼핑 분야 코드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
이제 반환된 정보를 담은 데이터프레임을 생성하겠습니다.
if(rescode==200):
df = pd.DataFrame(result['results'][0]['data'])[['period']]
for i in range(len(category)):
tmp = pd.DataFrame(result['results'][i]['data'])
tmp = tmp.rename(columns={'ratio': result['results'][i]['title']})
df = pd.merge(df, tmp, how='left', on=['period'])
df = df.rename(columns={'period': '날짜'})
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
마찬가지로 데이터프레임을 시각화해보겠습니다.
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.legend(loc='upper right')
plt.show()
시각화 결과 2020년 20~40대 여성은 화장품/미용 분야보다는 패션의류 분야를 더 많이 클릭했으며 특히 8월부터 11월까지 패션의류 분야에 대한 클릭량이 급격히 상승한 것을 확인할 수 있습니다.
추가로 아래 사진은 동일한 조건으로 네이버 데이터랩에서 살펴본 그래프이며 우리가 API를 통해 불러온 데이터가 네이버 데이터랩 사이트에서 제공하는 데이터와 동일한 것을 확인할 수 있습니다.
(2-2) 분야 내 기기별 트렌드 조회
이번에는 쇼핑 분야 내에서 기기(pc, mobile)별 클릭 트렌드를 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/device"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000000" # 쇼핑 분야 코드 (1개만 입력)
## 네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는
## cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.
gender = "f"
ages = ["20", "30", "40"]
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"gender": gender,
"ages": ages
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이전의 반환된 데이터와 다르게 group 이라는 정보가 추가되었습니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 쇼핑 분야 이름
- category : 쇼핑 분야 코드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 기기. 검색 환경에 따른 조건입니다.
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-2
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
if(rescode==200):
df = pd.DataFrame()
date = []
pc = []
mo = []
for data in result['results'][0]['data']:
if data['group'] == 'pc':
date.append(data['period'])
pc.append(data['ratio'])
else:
mo.append(data['ratio'])
df['날짜'] = date
df['pc'] = pc
df['mobile'] = mo
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('기기별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.legend(loc='upper right')
plt.show()
역시 pc보다는 mobile 을 사용한 검색 클릭량이 훨씬 많군요!!
(2-3) 분야 내 성별 트렌드 조회
이번에는 쇼핑 분야 내에서 성별(남성, 여성) 클릭 트렌드를 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/gender"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000000" # 쇼핑 분야 코드 (1개만 입력)
## 네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는
## cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.
device = ""
ages = ["20", "30"]
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"device": device,
"ages": ages
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이번에는 group 이라는 정보가 성별을 나타냅니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 쇼핑 분야 이름
- category : 쇼핑 분야 코드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 성별. 검색 사용자의 성별에 따른 조건입니다.
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-3
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
if(rescode==200):
df = pd.DataFrame()
date = []
female = []
male = []
for data in result['results'][0]['data']:
if data['group'] == 'f':
date.append(data['period'])
female.append(data['ratio'])
else:
male.append(data['ratio'])
df['날짜'] = date
df['여성'] = female
df['남성'] = male
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('성별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.legend(loc='upper right')
plt.show()
역시 남성보다는 여성의 패션의류 클릭량이 많은 것을 확인할 수 있습니다.
(2-4) 분야 내 연령별 트렌드 조회
이번에는 쇼핑 분야 내에서 연령별(10대,20대,30대,40대,50대,60대 이상) 클릭 트렌드를 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/age"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000000" # 쇼핑 분야 코드 (1개만 입력)
## 네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는
## cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이번에는 group 이라는 정보가 연령을 나타냅니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 쇼핑 분야 이름
- category : 쇼핑 분야 코드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 연령. 검색 사용자의 연령에 따른 조건
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-4
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
if(rescode==200):
df = pd.DataFrame()
date = sorted(list(set(data['period'] for data in result['results'][0]['data'])))
g10, g20, g30, g40, g50, g60 = [], [], [], [], [], []
for i in range(len(date)):
for data in result['results'][0]['data']:
if data['period'] == date[i]:
if data['group'] == '10':
g10.append(data['ratio'])
if data['group'] == '20':
g20.append(data['ratio'])
if data['group'] == '30':
g30.append(data['ratio'])
if data['group'] == '40':
g40.append(data['ratio'])
if data['group'] == '50':
g50.append(data['ratio'])
if data['group'] == '60':
g60.append(data['ratio'])
for group in [g10,g20,g30,g40,g50,g60]:
if len(group) != i+1:
group.append('')
df['날짜'] = date
df['10대'] = g10
df['20대'] = g20
df['30대'] = g30
df['40대'] = g40
df['50대'] = g50
df['60대+'] = g60
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('연령별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.show()
30,40대가 네이버쇼핑에서 패션의류 카테고리를 가장 많이 클릭했네요!!
(3)키워드별 조회
이번에는 키워드별 검색 클릭량을 조회해보겠습니다.
(3-1) 키워드별 트렌드 조회
우선 키워드별 전체 트렌드 조회를 살펴보겠습니다.
해당 기능의 url과 요청변수를 목적에 맞게 입력해줍니다.
(예제로는 2020년 20~30대의 "헬스", "필라테스", "등산" 에 대한 월별 트렌드를 불러오겠습니다.)
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/keywords"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000007" # 쇼핑 분야 코드 (네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는 cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.)
keyword = [
{"name":"헬스", "param":["헬스"]},
{"name":"필라테스", "param":["필라테스"]},
{"name":"등산", "param":["등산"]},
] # 검색 키워드 그룹 이름과 검색 키워드 쌍의 배열. (최대 5개)
## name : 검색 키워드 그룹 이름
## param : 비교할 검색어 (1개만 설정 가능)
ages = ["20", "30"]
요청변수에 대한 상세 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-5
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
참고로 위에서 입력한 조건은 데이터랩에서 아래와 같와 같이 입력한 것과 동일한 조건입니다.
이제 해당 요청변수를 담은 body라는 딕셔너리를 생성한 뒤 JSON 형태로 변환하여 파라미터를 넘겨줍니다.
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"keyword": keyword,
"ages": ages
}
body = json.dumps(body)
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()
print(rescode)
rescode 가 위와 같이 200이 나왔다면 정상적으로 API를 통해 데이터를 반환한 것입니다.
반환된 데이터는 어떤 정보를 담고 있을까요?
JSON 형태로 반환된 데이터를 파이썬 딕셔너리 객체로 변환하여 확인해봅시다.
from pprint import pprint
result = json.loads(response.read())
pprint(result)
반환된 데이터는 다음과 같은 정보를 담고 있습니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 검색 키워드 그룹 이름
- keword : 검색 키워드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-5
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
이제 반환된 정보를 담은 데이터프레임을 생성하겠습니다.
if(rescode==200):
df = pd.DataFrame(result['results'][0]['data'])[['period']]
for i in range(len(keyword)):
tmp = pd.DataFrame(result['results'][i]['data'])
tmp = tmp.rename(columns={'ratio': result['results'][i]['title']})
df = pd.merge(df, tmp, how='left', on=['period'])
df = df.rename(columns={'period': '날짜'})
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
마찬가지로 데이터프레임을 시각화해보겠습니다.
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.legend(loc='upper right')
plt.show()
등산 키워드 검색 클릭량이 상반기에 급격히 상승하는 반면, 헬스,필라테스 키워드 검색 클릭량은 감소하여 크게 반등하지 못하는 트렌드를 확인할 수 있네요.
코로나19 확산으로 인한 실내운동시설 이용제한이 운동에 대한 수요를 등산으로 이동시켰다고 볼 수 있을까요?😱😱
추가로 아래 사진은 동일한 조건으로 네이버 데이터랩에서 살펴본 그래프이며 우리가 API를 통해 불러온 데이터가 네이버 데이터랩 사이트에서 제공하는 데이터와 동일한 것을 확인할 수 있습니다.
(3-2) 키워드 내 기기별 트렌드 조회
이번에는 키워드별 검색 클릭 트렌드를 기기(pc, mobile)별로 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/keyword/device"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000007" # 쇼핑 분야 코드 (네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는 cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.)
keyword = "등산" # 검색 키워드
ages = ["20", "30"]
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"keyword": keyword,
"ages": ages
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이전의 반환된 데이터와 다르게 group 이라는 정보가 추가되었습니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 검색 키워드 그룹 이름
- keyword : 검색 키워드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 기기. 검색 환경에 따른 조건입니다.
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-6
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
if(rescode==200):
df = pd.DataFrame()
date = []
pc = []
mo = []
for data in result['results'][0]['data']:
if data['group'] == 'pc':
date.append(data['period'])
pc.append(data['ratio'])
else:
mo.append(data['ratio'])
df['날짜'] = date
df['pc'] = pc
df['mobile'] = mo
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('기기별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.legend(loc='upper right')
plt.show()
등산 키워드 역시 pc보다는 mobile 을 사용한 검색 클릭량이 훨씬 많네요!!
(3-3) 키워드 내 성별 트렌드 조회
이번에는 키워드별 검색 클릭 트렌드를 성별(여성, 남성)로 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/keyword/gender"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000007" # 쇼핑 분야 코드 (네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는 cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.)
keyword = "등산" # 검색 키워드
ages = ["20", "30"]
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"keyword": keyword,
"ages": ages
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이번에는 group 이라는 정보가 성별을 나타냅니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 검색 키워드 그룹 이름
- keyword : 검색 키워드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 성별. 검색 사용자의 성별에 따른 조건
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-7
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
if(rescode==200):
df = pd.DataFrame()
date = []
female = []
male = []
for data in result['results'][0]['data']:
if data['group'] == 'f':
date.append(data['period'])
female.append(data['ratio'])
else:
male.append(data['ratio'])
df['날짜'] = date
df['여성'] = female
df['남성'] = male
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('성별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.show()
성별에 따라 트렌드를 조회했을 때 큰 차이를 보이지 않지만 20,30대 남성보다는 20,30대 여성의 등산 키워드 클릭량이 많은 것을 확인할 수 있습니다.
(3-4) 키워드 내 연령별 트렌드 조회
이번에는 키워드별 검색 클릭 트렌드를 연령별(10대,20대,30대,40대,50대,60대 이상)로 조회해보겠습니다.
# 통합 검색어 트렌드 조회기능과는 달리 각각의 기능이 다른 url을 가지므로 유의해주세요!!
url = "https://openapi.naver.com/v1/datalab/shopping/category/keyword/age"
startDate = "2020-01-01" # 조회 기간 시작 날짜
endDate = "2020-12-31" # 조회 기간 종료 날짜
timeUnit = "month" # 구간 단위
category = "50000007" # 쇼핑 분야 코드 (네이버쇼핑에서 카테고리를 선택했을 때의 URL에 있는 cat_id 파라미터의 값으로 분야 코드를 확인할 수 있습니다.)
keyword = "등산" # 검색 키워드
body = {
"startDate": startDate,
"endDate": endDate,
"timeUnit": timeUnit,
"category": category,
"keyword": keyword,
}
body = json.dumps(body)
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()
from pprint import pprint
result = json.loads(response.read())
pprint(result)
이번에는 group 이라는 정보가 연령을 나타냅니다.
- startDate : 조회 기간 시작 날짜
- endDate : 조회 기간 종료 날짜
- timeUnit : 구간 단위
- results : 반환된 정보 전체를 담고 있는 결과값
- title : 검색 키워드 그룹 이름
- keyword : 검색 키워드
- data : 검색 트렌드 데이터를 담고 있는 결과값
- period : 구간별 시작 날짜
- group : 연령. 검색 사용자의 연령에 따른 조건
- ratio : 구간별 클릭량의 상대적 비율
더욱 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md#%EC%9D%91%EB%8B%B5-8
쇼핑인사이트 - Datalab
쇼핑인사이트 쇼핑인사이트 개요 개요 쇼핑인사이트 API 개요 쇼핑인사이트 API는 네이버 데이터랩의 쇼핑인사이트를 API로 실행할 수 있게 하는 RESTful API입니다. 네이버 통합검색의 쇼핑 영역과
developers.naver.com
len(result['results'][0]['data'])
if(rescode==200):
df = pd.DataFrame()
date = sorted(list(set(data['period'] for data in result['results'][0]['data'])))
g10, g20, g30, g40, g50, g60 = [], [], [], [], [], []
for i in range(len(date)):
for data in result['results'][0]['data']:
if data['period'] == date[i]:
if data['group'] == '10':
g10.append(data['ratio'])
if data['group'] == '20':
g20.append(data['ratio'])
if data['group'] == '30':
g30.append(data['ratio'])
if data['group'] == '40':
g40.append(data['ratio'])
if data['group'] == '50':
g50.append(data['ratio'])
if data['group'] == '60':
g60.append(data['ratio'])
for group in [g10,g20,g30,g40,g50,g60]:
if len(group) != i+1:
group.append('')
df['날짜'] = date
df['10대'] = g10
df['20대'] = g20
df['30대'] = g30
df['40대'] = g40
df['50대'] = g50
df['60대+'] = g60
df['날짜'] = pd.to_datetime(df['날짜'])
else:
print("Error Code:" + rescode)
df
columns = df.columns[1:]
n_col = len(columns)
fig = plt.figure(figsize=(12,6))
plt.title('연령별 검색 클릭 트렌드', size=20, weight='bold')
for i in range(n_col):
sns.lineplot(x=df['날짜'], y=df[columns[i]], label=columns[i])
plt.ylabel("클릭량")
plt.gca().invert_yaxis()
plt.show()
등산 용품에 대한 20대 검색 클릭량이 증가하긴 했지만 여전히 30,40대의 클릭량이 훨씬 많네요!!
통합 검색어 트렌드를 검색 및 시각화 하는 클래스를 구현한 것과 같이 쇼핑인사이트 트렌드에 대한 검색 및 시각화 클래스를 구현해보시기 바랍니다!😉

이렇게 오늘은 네이버 데이터랩, 쇼핑 인사이트의 API를 이용해 보았습니다!
우리가 자주 쓰는 검색포털 "네이버"에서 제공하는 검색, 쇼핑 클릭 데이터들을 쉽게 수집해서 사용할 수 있다니 정말 유용한 정보인 것 같습니다 ㅎㅎ
'BLOG > 오픈소스 리뷰기' 카테고리의 다른 글
[오픈소스 리뷰기] 나만의 텔레그램 챗봇 만들기! (0) | 2021.11.19 |
---|---|
[오픈소스 리뷰기] 네이버 검색광고 API 이용하기 (5) | 2021.11.17 |
[오픈소스 리뷰기] 네이버 데이터랩(1) - 통합 검색어 트렌드 (1) | 2021.11.15 |
[오픈소스 리뷰기] DART 전자공시시스템(2) - DART-FSS라이브러리 활용하기! (0) | 2021.11.12 |
[오픈소스 리뷰기] DART 전자공시시스템(1) - API 이용하기 (0) | 2021.11.11 |