주식 투자를 좋아하는 주린이으로서 이런 분석은 꼭 해보고 싶었다. 바로 주가와 검색량 간의 상관관계이다. 검색이 많이 이루어질수록 주가도 함께 오르지 않을까라는 의문을 갖고 있었는데 이번 기회에 이 것을 입증하고자 한다.
이번 분석 예제로 사용할 기업은 바로 애증의 현대차이다. 현대차 12층에 물려있긴 하지만 언제간 떡상하기를 기도하면서 이번 분석을 시작하고자 한다.
1. 검색량(Queries) 플랫폼
검색량을 추출할 시 사용할 수 있는 플랫폼?은 2곳이 있는데 하나는 바로 구글 트렌드이고 다른 하나는 네이버 데이터랩의 검색량 트렌드이다. 둘 다 내가 자주 사용하는 검색량 툴이긴 하지만 주식 분석에서는 투자자들은 네이버를 더 많이 사용하지 않을까라는 생각에 이번 분석에서는 네이버 데이터랩을 사용하도록 하겠다.
https://trends.google.com/trends/?geo=US
https://datalab.naver.com/keyword/trendSearch.naver
2. 네이버 개발자 API
네이버 데이터랩을 파이썬으로 가져오고 싶으면 네이버 개발자에서 계정을 등록해야되는데, 굉장히 간단하니 자세한 내용은 스킵하겠다. 아래 링크에 들어가서 계정 등록하고, 데이터랩을 사용할 API로 등록하면 API KEY가 주어질 것이다.
https://developers.naver.com/main/
다 완료하면 아래 이미지처럼 ClientID와 ClientSecret가 부여될 것이다.
3. 네이버 데이터랩에서 키워드 검색량 추출
바로 현대차 키워드 검색량(쿼리) 데이터를 추출해보겠다.
기간은 2019년 1월 1일 부터 2020년 7월 10일, 키워드는 "현대차","현대자동차","정의선"으로 조건 설정해서 뽑도록 하겠다.
*네이버 데이터랩, 구글 트렌드 모두 여러 키워드 조합의 조건 설정을 지원한다.
import os
import sys
import urllib.request
import json
import pandas as pd
import re
client_id = "네이버 API ID"
client_secret = "네이버 API Secret"
url = "https://openapi.naver.com/v1/datalab/search"
body = '''{"startDate":"2019-01-01","endDate":"2020-07-10","timeUnit":"date",
"keywordGroups":[{"groupName":"현대차","keywords":["현대차","현대자동차","정의선"]}]}'''
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()
query=response_body.decode('utf-8')
data_query=json.loads(query)
else:
print("Error Code:" + rescode)
dates=[]
queries=[]
for i in data_query['results'][0]['data']:
dates.append(i['period'])
queries.append(i['ratio'])
queries_df=pd.DataFrame()
queries_df['Date']=dates
queries_df['queries']=queries
위 코드를 실행하면 아래와 같은 일자별 쿼리량 데이터가 추출된다.
4. 야후 파이낸스 패키지를 통해 주가 데이터 가져오기
쿼리량을 아무 문제 없이 가져오면 다음은 바로 야후 파이낸스 패키지를 통해 현대차의 주가 데이터를 가져오도록 하겠다. 그러기 위해서는 아래 패키지부터 우선 설치해야 된다.
pip install yfinance
코드는 굉장히 간단하다. 현대차 주식코드(005380) 과 기간만 설정해주면 된다.
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
data = pdr.get_data_yahoo("005380.KS", start="2019-01-01", end="2020-07-13")
현대차 주가 데이타
5. 검새량, 주가 Dataframe 조인하기
말 그대로 날짜 기준으로 검색량과 주가 테이블을 조인하는 것이다.
#인덱스 날짜 기준으로 조인
queries_df=queries_df.set_index('Date')
#left outer join
df_left_join=pd.merge(queries_df,data,left_index=True, right_index=True, how='left')
#주가와 검색량 열만 필요
final_df=df_left_join[['queries','Close']]
#주말에 주가가 NAN으로 찍여 있는데 이를 앞 날짜 주가로 대체하기
final_df=final_df.fillna(method='pad')
#19년 1월 1일이 주가가 비워있는데 18년 12월 28일 주가로 대체
final_df=final_df.fillna(118500)
5. 시각화
검색량과 주가 트렌드 Line Chart로 시각화
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (16,12)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
x=final_df.index
y1=final_df['Close']
y2=final_df['queries']
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')
ax1.set_xlabel('Date')
ax1.set_ylabel('Stock Close Price', color='g')
ax2.set_ylabel('Queries', color='b')
plt.show()
...
둘이 상관 관계가 딱히 없네요..쩝
성의 없는 코딩 마무리
쿼리 종합
import os
import sys
import urllib.request
import json
import pandas as pd
import re
client_id = ""
client_secret = ""
url = "https://openapi.naver.com/v1/datalab/search"
body = '''{"startDate":"2019-01-01","endDate":"2020-07-10","timeUnit":"date",
"keywordGroups":[{"groupName":"현대차","keywords":["현대차","현대자동차","정의선"]}]}'''
# "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()
query=response_body.decode('utf-8')
data_query=json.loads(query)
else:
print("Error Code:" + rescode)
dates=[]
queries=[]
for i in data_query['results'][0]['data']:
dates.append(i['period'])
queries.append(i['ratio'])
queries_df=pd.DataFrame()
queries_df['Date']=dates
queries_df['queries']=queries
# ------------------------------------------------------------------------------------------
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
data = pdr.get_data_yahoo("005380.KS", start="2019-01-01", end="2020-07-13")
#인덱스 날짜 기준으로 조인
queries_df=queries_df.set_index('Date')
#left outer join
df_left_join=pd.merge(queries_df,data,left_index=True, right_index=True, how='left')
#주가와 검색량 열만 필요
final_df=df_left_join[['queries','Close']]
#주말에 주가가 NAN으로 찍여 있는데 이를 앞 날짜 주가로 대체하기
final_df=final_df.fillna(method='pad')
#19년 1월 1일이 주가가 비워있는데 18년 12월 28일 주가로 대체
final_df=final_df.fillna(118500)
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (16,12)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
x=final_df.index
y1=final_df['Close']
y2=final_df['queries']
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')
ax1.set_xlabel('Date')
ax1.set_ylabel('Stock Close Price', color='g')
ax2.set_ylabel('Queries', color='b')
plt.show()
'문송충의 코딩하기 > 파이썬 데이터 분석' 카테고리의 다른 글
공공데이터 Open API를 통해 삼성전자 주주 구성 분석하기 With Python (0) | 2020.07.15 |
---|---|
카카오 API를 활용한 동네 브랜드별 편의점 점포 수 구하기 with Python (0) | 2020.07.14 |
Twitter에서 "황희찬"키워드가 포함된 Mention 가져오기 (1) | 2020.07.11 |
Folium으로 회사 주변 GS25 위치 지도로 표시#2 (0) | 2020.07.08 |
Amazon Products Reviews 분석 #1 - 데이터 가져오기 (0) | 2020.07.03 |
댓글