23.10.23 주식데이터분석

eunjoo·2023년 10월 23일
0

1_1.주가가져오기

야후 파이낸스로 주식 데이터 가져오기

!pip install yfinance pandas-datareader
from  pandas_datareader import data as pdr
import yfinance as yf
import matplotlib.pyplot as plt
# 야후에서 데이터를 가져오는 방식이 크롤링
yf.pdr_override()

코스피 종합주가지수 가져오기

# 코스피 종합주가 지수
KOSPI_IDX = '^KS11'
#KOSDAK_IDX ='^KQ11'

#데이터를 가져올 시작날짜
sdate = '2011-01-02'
#데이터를 가져올 최종날짜
edate = '2021-11-04'

# KOSPI종합주가지수를 가져오려면 가져올 데이터의
# 1. 인덱스 문자열,
# 2.시작일과 3.종료일을 넣어준다.
# 종료일을 넣지 않을 경우 오늘 데이터까지 가져온다.
kospi = pdr.get_data_yahoo(KOSPI_IDX, sdate, edate)
#type(kospi)
kospi

# 가로축은 시간(index), 세로축은 마감 종합주가지수
plt.figure(figsize=(18, 7))
kospi['Close'].plot(label='KOSPI', title='KOSPI INDEX', grid=True, legend=True)#close y 축 kospi x축
plt.show()

국내 기업 주식 데이터 조회

SEC_IDX = '005930.KS'
sdate = '2020-01-03'

sec = pdr.get_data_yahoo(SEC_IDX, sdate)
sec

# 가로축은 시간(index), 세로축은 마감 종합주가지수
plt.figure(figsize=(18, 7))
sec['Close'].plot(label='KOSPI', title='KOSPI INDEX', grid=True, legend=True)
plt.show()

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
#런타임 다시 시작
import matplotlib.pyplot as plt

plt.rc('font', family='NanumBarunGothic')

# 적역 폰트와 상관없이 특정 텍스트만 폰트를 설정할 수 있다.
# 참조 링크 : https://mindscale.kr/course/python-visualization-basic/font/

plt.text(0.3, 0.3, '한글', size=100)

plt.figure(figsize=(9, 7))
sec['Close'].plot(label='SEC', title='삼성전자 주가', grid=True, legend=True)
plt.show()

1_2.다우존스분석

!pip install scipy
!pip install finance-datareader
!pip install yfinance
!pip install scipy
!pip install finance-datareader
!pip install yfinance
kospi

dow

# 데이터프레임에 kospi와 다우존스지수를 넣어보자
df = pd.DataFrame({'DOW':dow['Close'], 'KOSPI':kospi['Close']})
df

df.corr()

# KOSPI와 DOW데이터를 가지고 회귀
from scipy import stats #싸이파이 직석을 그림 튜닝포인터가 없어 싸이클런에 비해서 약함 종종 시각화할때 사용
regr = stats.linregress(df['DOW'], df['KOSPI'])
regr

r_value = df['DOW'].corr(df['KOSPI'])
r_value

r_squared = r_value **2
r_squared

import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
from scipy import stats
import matplotlib.pyplot as plt

KOSPI_IDX = 'KS11'
DOW_IDX = 'DJI'


sdate = '2000-01-04'

kospi = fdr.DataReader(KOSPI_IDX, sdate)
dow = pdr.get_data_yahoo('^DJI',sdate)

df = pd.DataFrame({'X': dow['Close'], 'Y' : kospi['Close']})
df = df.fillna(method='bfill')
df = df.fillna(method='ffill') #결측치가 생겨서 fillna로 채움
from sklearn.linear_model import LinearRegression

model = LinearRegression()
# df.X는 pandas의 series타입 -> numpy array으로 변경 
X = df.X.to_numpy()
Y = df.Y.to_numpy()
Y

# 5663행
Y.shape

# 1차원 -> 2차원으로 변경
X = X.reshape(-1,1)
Y = Y.reshape(-1,1)
Y.shape

# x는 DOW, y는 KOSPI로된 데이터에서 선형회귀를 예측
model.fit(X,Y)

# y wx+b coef->w에 해당 기울기 값
model.coef_

# intercept는 b에 해당
model.intercept_

model_line = f'Y = {model.coef_[0][0]:.2f} * X + {model.intercept_[0]:.2f}' #직선의 방정
print(model_line)

corr = df['X'].corr(df['Y'])
corr

plt.figure(figsize=(7,7))
plt.plot(X, Y,'.')
plt.plot(X, model.coef_*X + model.intercept_, 'r')
plt.legend(['DOW x KOSPI', model_line])
plt.title(f'DOW x KOSPI (R = {corr:.2f})')
plt.xlabel('Dow Jones Average')
plt.ylabel('KOSPI')
plt.show()

1_3.종목인덱스를가져와서사용해보기

<-- 업데이트 되면서 오류가 생김 다시.. -->

1_4.원달러환율과현대차와상관관계분석

!pip install finance-datareader bokeh
import FinanceDataReader as fdr
df_krx = fdr.StockListing('KOSPI')
df_krx.head()

sdate = '2015-01-01'
edate = '2021-11-05'
ks11 = fdr.DataReader('KS11',sdate, edate)
usdkrw = fdr.DataReader('USD/KRW',sdate)
usdkrw.tail()

krwusd = []
for value in usdkrw['Close']:
    # 원달러환율을 가져와서 역수로 계산하기
    invValue = 1/value
    krwusd.append(round(invValue, 7))

print(krwusd)

결과 : [0.0009152, 0.0009144, 0.0009001, 0.0009021, 0.0009113, 0.0009109, 0.0009138, 0.0009244, 0.0009247, 0.0009284, 0.0009242, 0.0009298, 0.0009276, 0.0009267, 0.0009202, 0.0009243, 0.0009219, 0.0009221, 0.0009265, 0.0009288, 0.0009222, 0.0009101, 0.0009099, 0.0009107, 0.0009163, 0.0009195, 0.0009218, 0.0009118, 0.000914, 0.0009111, 0.0009044, 0.0009081, 0.0009129, 0.0009089,...,0.0007401, 0.0007429, 0.0007444, 0.0007425, 0.0007452, 0.0007472, 0.0007417, 0.0007396, 0.000742, 0.0007391, 0.0007382, 0.0007373, 0.0007392]

import pandas as pd
print(usdkrw.index)

# krw/usd와 index를 사용하여 데이터프레임 만들기
df_1 = pd.DataFrame({'Date':usdkrw.index,
              'KRW/USD':krwusd}) #역수치해야 그래프 모양새가 코스피와 비슷해짐
df_1 = df_1.set_index('Date')
df_1

from matplotlib import pyplot as plt

# 같은기간동안 kospi와 krwusd의 관계
plt.plot(usdkrw.index, krwusd, ks11['Close'])

df_2 = pd.DataFrame({'Date':ks11.index,
              'KOSPI':ks11['Close']
             })
df_2 = df_2.set_index('Date')
df_2

df_com = pd.concat([df_1, df_2], axis=1)
df_com = df_com.dropna(axis=0)
df_com.head(10)

from sklearn.preprocessing import MinMaxScaler

#정규화를 통해 2개 데이터간의 상관관계를 좀 더 들여다보기 위해
scaler = MinMaxScaler()
# 스케일을 적용할 column을 정의합니다.
scale_cols = ['KRW/USD','KOSPI']
# 스케일 후 columns
scaled = scaler.fit_transform(df_com[scale_cols])
scaled

#plt.plot(df_com.index, df_com['KRW/USD'], df_com['KOSPI'])
df_graph = pd.DataFrame(scaled, index=df_com.index, columns=list("AB"))

plt.figure()
df_graph.plot()
# A 원달러 B 코스피 서로 단위가 다름 리멕스스케일러를 이용해서 스케일 단위를 맞춰준다.

corr= df_graph.corr()
corr

import FinanceDataReader as fdr

# 현대차(005380)
dic = {'현대차':'005380'}

df = fdr.DataReader(dic['현대차'], '2015-01-01')
df.head(20)

df.tail(5)

df = pd.DataFrame({'Date':df.index,
              'HyundaiMotors':df['Close']
             })
df = df.set_index('Date')
df

df_com = pd.concat([df_1, df_2, df], axis=1)
df_com

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
# 스케일을 적용할 column을 정의합니다.
scale_cols = ['KRW/USD','KOSPI','HyundaiMotors']
#scale_cols = ['KRW/USD','HyundaiMotors']
# 스케일 후 columns
scaled = scaler.fit_transform(df_com[scale_cols])
scaled

0개의 댓글