저번 글에서는 메모리 월별 수출 금액을 간단하게 차트로 그려봤습니다.
- https://sweetquant.tistory.com/313
이번에는 메모리 수출과 삼성전자, SK 하이닉스의 주가를 같이 살펴보도록 하겠습니다. 이를 통해 수출금액이 주가에 영향을 미칠까를 고민해 볼 수 있기 때문입니다.
우선, 기존에 구축했던 DB_DTECH.HIST_YM 테이블에는 2019년부터 2021년 8월 25일까지의 월별주가 데이터가 입력되어 있습니다.(아래 글에서 구축했습니다.)
- https://sweetquant.tistory.com/304
여기서는 메모리 수출금액과 주가를 비교하기 위해 SK 하이닉스와 삼성전자에 대해서만 추가로 월별주가(2010년1월부터 2018년12월까지)를 입력해야 합니다. 아래 파일을 다운 받아서 DB_DTECH DB에서 실행하면 됩니다.
데이터를 업로드 했으면, 아래와 같은 SQL로 삼성전자와 SK하이닉스의 2010년부터의 월별 종가를 구할 수 있습니다.
SELECT B.YM
,MAX(CASE WHEN A.STK_NM = '삼성전자' THEN B.C_PRC END) Samsung
,MAX(CASE WHEN A.STK_NM = 'SK하이닉스' THEN B.C_PRC END) Hynix
FROM DB_DTECH.STOCK_KRX A
INNER JOIN DB_DTECH.HIST_YM B
ON (B.STK_CD = A.STK_CD)
WHERE A.STK_NM IN ('삼성전자','SK하이닉스')
GROUP BY B.YM
ORDER BY B.YM
[결과]
YM Samsung Hynix
======== =========== ============
201001 15680.000 22750.000
201002 14880.000 21000.000
201003 16360.000 26700.000
... 생략 ...
지난 글에서는 월별 메모리품목별 수출금액 데이터를 구했습니다.
아래 그림을 보면, 좌측은 월별 메모리품목별 수출금액을 구하는 SQL과 결과입니다.(지난 글에서 설명한 SQL입니다.) 우측은 월별 삼성전자와 하이닉스의 주가(월말 종가)를 구하는 SQL과 결과입니다.
위 그림에서 좌측과 우측의 결과를 합쳐서 하나로 보여주기 위해서는 조인을 사용해야 합니다. 두 결과 모두 월별 데이터 집계이기 때문에 월(YM) 컬러을 사용해 조인을 처리하면 됩니다. 아래와 같이 SQL을 구현할 수 있습니다.
SELECT T2.YM
,T2.DRAM ,T2.CHIP ,T2.FLASH
,T3.Samsung ,T3.Hynix
FROM (
SELECT T1.YM
,MAX(CASE WHEN T1.HS_NM = '디램' THEN T1.OUT_AMT END) DRAM
,MAX(CASE WHEN T1.HS_NM = '복합구조칩 집적회로' THEN T1.OUT_AMT END) CHIP
,MAX(CASE WHEN T1.HS_NM = '플래시 메모리' THEN T1.OUT_AMT END) FLASH
FROM DB_DTECH.TRADE_YM T1
WHERE T1.HS_NM IN ('디램','복합구조칩 집적회로','플래시 메모리')
GROUP BY T1.YM
ORDER BY T1.YM
) T2 INNER JOIN (
SELECT B.YM
,MAX(CASE WHEN A.STK_NM = '삼성전자' THEN B.C_PRC END) Samsung
,MAX(CASE WHEN A.STK_NM = 'SK하이닉스' THEN B.C_PRC END) Hynix
FROM DB_DTECH.STOCK_KRX A
INNER JOIN DB_DTECH.HIST_YM B
ON (B.STK_CD = A.STK_CD)
WHERE A.STK_NM IN ('삼성전자','SK하이닉스')
GROUP BY B.YM
ORDER BY B.YM
) T3 ON (T2.YM = T3.YM)
ORDER BY T2.YM
[결과]
YM DRAM CHIP FLASH Samsung Hynix
======== ============= ============= ============ =========== ============
201001 807931.000 322032.000 205735.000 15680.000 22750.000
201002 768520.000 388025.000 206517.000 14880.000 21000.000
201003 937606.000 487808.000 242982.000 16360.000 26700.000
201004 976082.000 543395.000 253916.000 16980.000 28400.000
... 생략 ...
위에서 HIST_YM, STOCK_KRX, TRADE_YM 은 모두 테이블입니다. 하지만, TRADE_YM을 GROUP BY 처리한 FROM절의 T2는 테이블이라기 보다는 데이터 결과 집합입니다. 마찬가지로 HIST_YM을 GROUP BY 처리한 T3 역시 데이터 결과 집합니다. 이처럼 조인은 테이블과 테이블이 아닌 데이터 결과 집합과 데이터 결과 집합 사이에 이루어질 수 있습니다. 더 나아가서 테이블 역시 데이터 결과 집합이라고 인식하셔도 됩니다.
항상 조인을 할 때는 두 데이터 집합 간의 연결 고리를 잘 찾아야 합니다. 두 데이터 집합 모두 월별로 집계되었기 때문에 월을 이용해 두 데이터 결과 집합을 연결하면 됩니다.
이번에는 위 SQL을 그대로 파이썬에 붙여서 차트를 그려보겠습니다. 삼성전자와 하이닉스 주가는 subplot으로 별도로 그려지도록 처리합니다.
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
# MySQL 연결 처리
myMyConn = pymysql.connect(user='root', password='1qaz2wsx', host='localhost', port=3306, charset='utf8',
database='DB_SQLSTK')
myMyCursor = myMyConn.cursor()
sql = """
SELECT T2.YM
,T2.DRAM ,T2.CHIP ,T2.FLASH
,T3.Samsung ,T3.Hynix
FROM (
SELECT T1.YM
,MAX(CASE WHEN T1.HS_NM = '디램' THEN T1.OUT_AMT END) DRAM
,MAX(CASE WHEN T1.HS_NM = '복합구조칩 집적회로' THEN T1.OUT_AMT END) CHIP
,MAX(CASE WHEN T1.HS_NM = '플래시 메모리' THEN T1.OUT_AMT END) FLASH
FROM DB_DTECH.TRADE_YM T1
WHERE T1.HS_NM IN ('디램','복합구조칩 집적회로','플래시 메모리')
GROUP BY T1.YM
ORDER BY T1.YM
) T2 INNER JOIN (
SELECT B.YM
,MAX(CASE WHEN A.STK_NM = '삼성전자' THEN B.C_PRC END) Samsung
,MAX(CASE WHEN A.STK_NM = 'SK하이닉스' THEN B.C_PRC END) Hynix
FROM DB_DTECH.STOCK_KRX A
INNER JOIN DB_DTECH.HIST_YM B
ON (B.STK_CD = A.STK_CD)
WHERE A.STK_NM IN ('삼성전자','SK하이닉스')
GROUP BY B.YM
ORDER BY B.YM
) T3 ON (T2.YM = T3.YM)
ORDER BY T2.YM
"""
# DataFrame에 SQL 결과 저장
df = pd.read_sql(sql, myMyConn)
# 결과 출력
print(df)
# 차트로 처리할 항목을 Series에 별도로 담는다.
dram = df['DRAM']
chip = df['CHIP']
flash = df['FLASH']
samsung = df['Samsung']
hynix = df['Hynix']
dram.index = df['YM']
samsung.index = df['YM']
hynix.index = df['YM']
plt.figure(figsize=(11, 9))
plt.subplot(311)
dram.plot(label='DRAM', title="Memory Out & Samsung & SK Hynix")
chip.plot(label='Chip')
flash.plot(label='Flash memory')
plt.legend(loc='lower left')
plt.subplot(312)
samsung.plot(label='Samsung')
plt.legend(loc='lower left')
plt.subplot(313)
hynix.plot(label='Hynix')
plt.legend(loc='lower left')
plt.show()
print(df.corr())
위의 파이썬 코드를 실행하면 아래와 같은 차트가 만들어집니다.
차트만 보고서는 수출금액이 삼성전자나 SK하이닉스의 주가에 영향을 주는지 정확히 알아 볼 수가 없습니다. 대충 보기에는 메모리 품목 중에 Chip 부분의 수출금액과 삼성전자와 SK하이닉스의 주가 움직임이 유사한 느낌은 듭니다.
차트가 유사하다는 것은 위 파이썬 코드 중에, 마지막 줄의 df.corr을 통해 확인할 수 있습니다.
df는 파이썬 모듈중에 pandas.dataframe입니다. dataframe의 corr을 수행하면, dataframe에 입력된 데이터들의 상관계수를 구할 수있습니다.
저도 수학적으로는 잘 모르지만, 상관계수가 1에 가까우면 두 계열의 수치 간에 정비례한 상관 관계가 있다고 합니다.
df.corr()의 결과를 보면 아래와 같습니다.
DRAM CHIP FLASH Samsung Hynix
DRAM 1.000000 0.763169 0.843413 0.618390 0.698179
CHIP 0.763169 1.000000 0.769157 0.866243 0.858389
FLASH 0.843413 0.769157 1.000000 0.742537 0.810480
Samsung 0.618390 0.866243 0.742537 1.000000 0.959931
Hynix 0.698179 0.858389 0.810480 0.959931 1.000000
결과를 보면 ,Chip과 삼성의 상관계수가 0.866이고 Chip과 하이닉스의 상관계수가 0.85로 높은것을 알 수 있습니다. 그리고 삼성과 하이닉스의 상관관계는 무려 0.95나 됩니다.
이처럼 높은 상관계수를 사용하면 수익을 얻을 수 있는 투자 전략을 만들 수 있지 않을까 생각이 듭니다. 하지만 그렇게 쉽지가 않답니다. 수출 데이터는 매월 15일에 지난달 데이터가 집계가 됩니다. 그러므로 우리가 수출 데이터를 접하기 전에 주가는 올라 버렸을 가능성이 있습니다. 더욱이, 제품의 수출 전에는 '계약'이라는 단계가 필요합니다. '만약에 거대 '계약'이 있다면, 수출까지 발생하기 전에 주가는 이미 다 오르지 않을까 싶습니다. 또한 주가라는 것은 어느 한 요소만으로 결정되지는 않습니다.
그럼에도 불구하고, 조금 더 고민해볼 필요는 있을거 같습니다. 투자 전략을 못 얻더라도 SQL 실력과 데이터를 바라보는 눈을 얻을 수 있으니까요.
오늘은 여기까지입니다. 감사합니다.
위와 같이 주식 데이터를 마음대로 분석해볼 수 있는 SQL을 공부하고 싶다면 아래 책을 참고해주세요~!
※ 책 소개: https://sweetquant.tistory.com/243
※ 책 미리보기: https://sweetquant.tistory.com/257
※ 완전판 E-Book
▶ 유페이퍼: https://www.upaper.net/ryu1hwan/1142997
▶ 알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=273701425
▶ Yes24: http://www.yes24.com/Product/Goods/102264444?OzSrank=1
'데이터분석 > D-Tech 데이터로 하는 재테크' 카테고리의 다른 글
카테시안 조인 이해하기 (0) | 2021.09.27 |
---|---|
셀프 조인 이해하기 (0) | 2021.09.23 |
데이터 분석 - 오라클의 CORR 집계함수 (0) | 2021.09.17 |
복합구조칩 수출과 상관 관계가 가장 높은 종목은? (0) | 2021.09.08 |
파이썬과 SQL로 메모리 수출입 차트 만들기 (0) | 2021.09.03 |
메모리 품목 수출입 데이터 DB화하기 (0) | 2021.09.03 |
수출이 급증한 300215 품목의 정체는? (0) | 2021.09.03 |
수출 통계로 투자 업종 찾기 (0) | 2021.09.02 |