SW/주가 예측

python : 주식 데이터 파싱, 저장, 받아오기 : 예제

얇은생각 2019. 6. 25. 07:30
반응형

주식데이터를 받아오는 방법은 다양합니다. 그 중에 파이썬을 활용하여 해당 종목에 데이터를 받아오고, 저장하는 방법에 대해 알아보겠습니다.


import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix


# file_name 다운로드한 주가 데이터를 저장할 파일 이름
# company_code 종목 코드
# year1/month1/date1 데이터를 다운로드할 시작일
# year2/month2/date2 데이터를 다운로드할 마감일
def download_stock_data(file_name, company_code, year1, month1, date1, year2, month2, date2):
start = datetime.datetime(year1, month1, date1)
end = datetime.datetime(year2, month2, date2)
df = web.DataReader("%s.KS" % (company_code), "yahoo", start, end)
df.to_pickle(file_name)
return df


def load_stock_data(file_name):
df = pd.read_pickle(file_name)
return df


download_stock_data('hyundai.data', '005380', 2018, 1, 1, 2018, 12, 31)
df = load_stock_data('hyundai.data')



우선 위와 같은 방법으로, 저장할 파일이름, 종목 코드 번호, 날짜들을 입력합니다. 그러면 해당 데이터를 잘 받아옵니다. 


그다음 load_stock_data 함수를 통해 읽어들일 파일 이름을 입력합니다.





# open 시가
# high 고가
# low 저가
# close 종가
# volume 거래량
# Adj Close 주식의 분할, 배당, 배분 등을 고려해 조정한 종가



해당 데이터는 위 항목들에 대한 데이터를 제공받습니다.





print(df)
# High Low Open Close Volume Adj Close
# Date
# 2018-01-02 153000.0 149000.0 150500.0 149500.0 731763.0 144619.265625
# 2018-01-03 151000.0 149000.0 149000.0 150500.0 450874.0 145586.625000
# 2018-01-04 151000.0 146000.0 150500.0 146500.0 931558.0 141717.203125
# 2018-01-05 149000.0 145500.0 146000.0 149000.0 463695.0 144135.593750
# 2018-01-08 151000.0 147500.0 148500.0 151000.0 482619.0 146070.296875
# 2018-01-09 152500.0 149500.0 151000.0 152500.0 465845.0 147521.328125

print(df.describe())
# High Low ... Volume Adj Close
# count 244.000000 244.000000 ... 2.440000e+02 244.000000
# mean 136513.114754 132818.852459 ... 5.716472e+05 130765.146741
# std 18780.260414 18610.989859 ... 3.227522e+05 17722.836693
# min 94000.000000 92500.000000 ... 1.797480e+05 90480.000000
# 25% 124500.000000 121375.000000 ... 3.676860e+05 119803.125000
# 50% 131000.000000 128500.000000 ... 4.979720e+05 126262.500000
# 75% 155000.000000 152000.000000 ... 6.829518e+05 148005.000000
# max 167500.000000 161500.000000 ... 3.017114e+06 158645.875000

# count 데이터 개수
# min 제일 작은 값
# max 제일 큰 값
# mean 산술평균을 의미
# std 표준편차를 의미
# 25%, 50%, 75% 사분위수를 의미


print(df.quantile([.25, .5, .75]))
# High Low Open Close Volume Adj Close
# 0.25 124500.0 121375.0 122375.0 122875.0 367686.00 119803.125
# 0.50 131000.0 128500.0 130000.0 129500.0 497972.00 126262.500
# 0.75 155000.0 152000.0 152625.0 153000.0 682951.75 148005.000


받아온 데이터를 로드해보고 출력한 결과입니다.


describe() 함수는 데이터에 관한 정보들을 확인할 수 있습니다.

또 추가적으로 quantile 함수를 활용해서 4분위 값들을 확인할 수 있습니다. 주석들을 참조해주세요.






scatter_matrix(df[['Open', 'High', 'Low', 'Close']], alpha=0.2, figsize=(6, 6), diagonal='kde')
plt.show()


df[['Open', 'High', 'Low', 'Close','Adj Close']].plot(kind='box')
plt.show()




scatter_matrix를 활용해 해당 데이터 항목들에 대한 상관성을 확인할 수 있습니다. 해당 데이터에 대한 값과 다른 항목들과 뚜렷한 양의 상관성을 가지고 있다는 것을 아래 그림을 통해 알 수 있습니다.


또 상자 그림을 활용해 데이터를 표현해 보았습니다. 상자 그림은 중앙값, 평균값, 사분위, 이상치 값들을 한눈에 알 수 있는 그래프입니다. 아래 그림을 참조해주세요.


python : 주식 데이터 파싱, 저장, 받아오기 : 예제1


python : 주식 데이터 파싱, 저장, 받아오기 : 예제2




이번 예제로 다양한 종목들을 받아올 수 있고, 데이터들의 상관성과 정보들을 확인하는 방법에 대해 알 수 있습니다. 이제 이것을 바탕으로 다양한 프로젝트를 진행해보겠습니다.

반응형