돈벌고싶다

파이썬을 이용한 주식 포트폴리오 - 2. 비트코인과 코스피&나스닥 상관관계 분석 본문

주식 포트폴리오

파이썬을 이용한 주식 포트폴리오 - 2. 비트코인과 코스피&나스닥 상관관계 분석

coinwithpython 2022. 8. 31. 01:16
728x90
반응형

설명

저번 글에 이어, 시세 데이터를 활용하여 비트코인과 코스피, 비트코인과 나스닥 상관관계를 분석하겠습니다.

 


코드

1. 라이브러리 호출

import yfinance as yf
import pandas as pd
import numpy as np
import datetime
import time
import ccxt
from sklearn.preprocessing import StandardScaler

 

2. 함수 정의

def get_binance_data(symbol, interval, end_date):
    btc_ohlcv = binance.fetch_ohlcv(symbol, interval, limit=1000, params={'endTime':end_date})
    df = pd.DataFrame(btc_ohlcv, columns=['datetime', 'open', 'high', 'low', 'close', 'volume'])
    df['datetime'] = pd.to_datetime(df['datetime'], unit='ms')
    df.set_index('datetime', inplace=True)
    return df

def to_mstimestamp(string):
    string = datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")
    string = datetime.datetime.timestamp(string)
    string = int(string) * 1000
    return string

 

3. 데이터 불러오기

data_path = './data/'
binance = ccxt.binance()
bitcoin = get_binance_data('BTC/USDT', '1w', to_mstimestamp("2022-08-25 23:59:59"))
kospi = pd.read_csv(data_path + 'kospi_price.csv')
nasdaq = pd.read_csv(data_path + 'nasdaq_price.csv')

kosqi_price.csv 파일과 nasdaq_price.csv 파일은 저번 포스팅에서 생성하였기 때문에 생성 과정은 스킵하고 불러와 사용하도록 하겠습니다.

 

4. 데이터 가공

# 코스피 및 나스닥 데이터 인덱스 설정
kospi.set_index('Date', inplace=True)
nasdaq.set_index('Date', inplace=True)

# 비트코인 데이터 인덱스 설정
bitcoin.reset_index(drop=False, inplace=True)
bitcoin['datetime'] = bitcoin['datetime'].astype(str)
bitcoin.columns = ['Date', 'open', 'high', 'low', 'BTC', 'volume']
bitcoin.set_index('Date', inplace=True)

# 데이터 병합
df = pd.concat([kospi, nasdaq, bitcoin['BTC']], axis=1, join='outer')
df = df.sort_index(ascending=True)
df = df.iloc[4310:].copy()
df = df.interpolate()

# 데이터 정규화
scaler = StandardScaler()
scaler.fit(df)
scaled = scaler.transform(df)
df_scaled = pd.DataFrame(data=scaled, columns=df.columns)
df_scaled.index = df.index

 

5. 상관관계 계산

corr = df_scaled.corr(method = 'pearson')
withcoin = corr[corr['BTC']>0.9].index.tolist()
anticoin = corr[corr['BTC']<0.1].index.tolist()

 

6. 시각화

for symbol in withcoin:
    df_scaled[['BTC', symbol]].plot(figsize=(12, 5))

삼성전자
삼성SDI
Applied Materials
ASML
ZS

 

for symbol in anticoin:
    df_scaled[['BTC', symbol]].plot(figsize=(12, 5))

한국전력
S-Oil
한국항공우주
바이오마린 제약
월그린부츠얼라이언스

 

비트코인과 유사한 종목 5개, 안 유사한 종목 5개를 예시로 가져왔습니다. 다음 글에선 분석된 리스트를 바탕으로 기업에 대한 기본적 분석을 진행하여, 투자 종목을 선정해 보겠습니다.

 

 

728x90
반응형
Comments