본문 바로가기

BLOG/오픈소스 리뷰기

[오픈소스 리뷰기] 네이버 데이터랩(2) - 쇼핑 인사이트

오픈소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#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를 이용해 보았습니다! 

우리가 자주 쓰는 검색포털 "네이버"에서 제공하는 검색, 쇼핑 클릭 데이터들을 쉽게 수집해서 사용할 수 있다니 정말 유용한 정보인 것 같습니다 ㅎㅎ