캔들차트 그리기 (네이버, KS.035420)
1) 일반 시세 그래프: matplotlip 사용
import pandas as pd #금융 데이터들을 다루기 위한 라이브러리
import requests #서버와 클라이언트가 통신(get, post)할 수 있도록 도와주는 라이브러리
from bs4 import BeautifulSoup # text 파일 형식 -> html의 태그로 바꿔줌
#그래프를 그리기 위한 라이브러리
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
from mplfinance.original_flavor import candlestick_ohlc
from datetime import datetime
#일별 주가 데이터를 사용하기 위해 일별 주가 데이터가 있는 주소 찾기
url = 'https://finance.naver.com/item/sise_day.nhn?code=068270'
#리스트 안에 데이터들을 저장하기 위한 용도
columns = [] # 열 이름(날짜, 종가, 전일비, 시가 등)을 저장
rows = [] # 각 열에 해당되는 값들을 저장
index = [] # 데이터들을 구분하기 위한 고유한 값
with requests.get(url, headers = {'User-agent' : 'Mozilla/5.0'} ) as html:
bs = BeautifulSoup(html.text, 'lxml') #get을 통해 얻은 text 파일을 Beautifulsoup를 통해서 html 태그로 모두 파싱(parsing)
#th = table header
th_tags = bs.find_all('th')
print(th_tags)
#th_tags 리스트 안에 있는 각 각의 요소들의 텍스트 값들을 들고옴
for th in th_tags:
#columns 리스트에 태그를 제거한 텍스트 값들을 추가
columns.append(th.get_text())
print(columns)
###### 데이터 전처리 #######
#그래프를 그릴 수 있도록 크롤링한 데이터를 변형(가공)
for page in range(1,6):
page_url = 'https://finance.naver.com/item/sise_day.nhn?code=068270&page={}'.format(page)
print(page_url)
response = requests.get(page_url, headers= {'User-agent': 'Mozilla/5.0'})
bs = BeautifulSoup(response.text, 'lxml')
dates = bs.find_all('span', class_='p10') #날짜 모두 가져오기
values = bs.find_all('span', class_='p11') #종가, 전일비, 시가, 고가...
values = [int(val.get_text().strip().replace(',','')) for val in values]
dates = [str(date.get_text()) for date in dates]
#추출한 값들을 리스트화함
#temp 리스트에는 [날짜, 종가, 전일비, 시가, 고가, 저가, 거래량] 순으로 넣음
j = 0
for i in range(0, len(values), 6):
temp = []
temp.append(dates[j]) #날짜
temp.extend(values[i:i+6]) #종가, 전일비, 시가, 고가, 저가, 거래량
rows.append(temp)
j += 1
#### 리스트 -> 데이터 프레임 (시계열 데이터를 표현하기에 적합한 자료형)
df = pd.DataFrame(rows, columns = columns)
#빠진 데이터 혹은 NaN 값들을 삭제
df.dropna()
#데이터를 날짜순으로 정렬
df = df.sort_values(by='날짜')
print(df)
2) OHLC: mpl_finance 이용
for idx in range(0, len(df)):
dt = datetime.strptime(df['날짜'].values[idx], '%Y.%m.%d').date()
df['날짜'].values[idx] = mdates.date2num(dt)
ohlc = df[['날짜', '시가', '고가', '저가','종가']]
plt.figure(figsize=(9,6))
ax = plt.subplot(1,1,1)
plt.title('NAVER CANDLE STICK')
candlestick_ohlc(ax, ohlc.values, width=0.7, colorup='green', colordown='orange') #캔들 스틱 그리는 함수
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.grid(color='gray', linestyle='--')
plt.show()
'PYTHON 파이썬 > 주가 분석' 카테고리의 다른 글
05.01 CLASS HW (OHLC 차트 ①) (0) | 2021.05.07 |
---|---|
05.01 CLASS SUMMARY (1) | 2021.05.07 |
04.17 CLASS HW (웹 스크레이핑) (1) | 2021.04.17 |
04.10 CLASS HW (BeautifulSoup) (1) | 2021.04.17 |
04.03 CLASS HW (HTML) (1) | 2021.04.10 |