Notice
Recent Posts
Recent Comments
Link
gyeomii
📈3D Graph2 본문
반응형
주식데이터로 그래프 그리기
주식 종목 개수
가격 변동 데이터 수
- DB에 새로운 데이터를 추가 했다.
- 총 895종목이 있고 각 종목동 3952개의 데이터가 있다.
방법1
Dao생성
컬럼명(종목명) 가져오는 쿼리 작성
def selectPrice(self,s_code):
ret=[]
sql = f"select {s_code} from stock_sync_0121"
self.cur.execute(sql)
rows = self.cur.fetchall()
for r in rows:
ret.append(r[s_code])
return ret
종목별 데이터 가져오는 쿼리 작성
def selectCode(self):
ret=[]
sql = f"""
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'stock_sync_0121'
"""
self.cur.execute(sql)
rows = self.cur.fetchall()
for r in rows:
ret.append(r['COLUMN_NAME'])
ret.remove('in_time')
return ret
전체 코드
import pymysql
class StockSyncDao:
def __init__(self):
self.conn = pymysql.connect(host='localhost', port=3305,
user='root', password='python',
db='_stock_old', charset='utf8')
self.cur = self.conn.cursor(pymysql.cursors.DictCursor)
def selectPrice(self,s_code):
ret=[]
sql = f"select {s_code} from stock_sync_0121"
self.cur.execute(sql)
rows = self.cur.fetchall()
for r in rows:
ret.append(r[s_code])
return ret
def selectCode(self):
ret=[]
sql = f""" SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'stock_sync_0121' """
self.cur.execute(sql)
rows = self.cur.fetchall()
for r in rows:
ret.append(r['COLUMN_NAME'])
ret.remove('in_time')
return ret
def __del__(self):
self.cur.close()
self.conn.close()
if __name__ == '__main__':
# dao = StockSyncDao()
# list = dao.selectCode()
# print(list)
주식 데이터 가져와서 그래프 그리기
import matplotlib.pyplot as plt
from day16.stocksyncdao import StockSyncDao
import numpy as np
sd = StockSyncDao()
arr_code = sd.selectCode()
arr_price = []
for i in arr_code:
arr_price.append(sd.selectPrice(i))
length = len(arr_price[0])
x = np.zeros(length)
y = []
for i in range(length):
y.append(i)
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
for idx, z in enumerate(arr_price):
z_n = np.array(z)
percentage = z_n/z_n[0]
ax.plot(x + idx, y, percentage)
plt.show()
- x축 : 한 종목의 전체 가격의 갯수 만큼 0을 찍음
- y축 : 전체가격 갯수의 범위만큼 0부터 1씩 증가시킨 값을 넣음
- z축 : 가격의 변화
- for문의 갯수 : 실제 종목 수
결과
방법 2
Dao
import numpy as np
import pymysql
class DaoStockSink:
def __init__(self):
self.conn = pymysql.connect(host='localhost', user='root', password='python',port=3305,
db='_stock_old', charset='utf8')
self.curs = self.conn.cursor()
def selects(self):
sql = f"""
select * from stock_sync_0121
"""
self.curs.execute(sql)
rows = self.curs.fetchall()
row_c = []
for r in rows:
len_r = len(r)
row_c.append(r[:len_r-1])
rows_n = np.array(row_c)
rows_t = np.transpose(rows_n)
return rows_t
def __del__(self):
self.curs.close()
self.conn.close()
if __name__ == '__main__':
dss = DaoStockSink()
list = dss.selects()
print("len",len(list))
for idx,tu in enumerate(list):
print(idx,tu)
그래프가져오기
import matplotlib.pyplot as plt
import numpy as np
from day16_2.daostocksink import DaoStockSink
dss = DaoStockSink()
arrzs = dss.selects()
mylen = len(arrzs[0])
print("mylen",mylen)
arrx = np.zeros(mylen)
arry = list(range(mylen))
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
for idx,arrz in enumerate(arrzs):
ax.plot(arrx+idx,arry,arrz/arrz[0])
plt.show()
반응형
'개발' 카테고리의 다른 글
🕷Data Crawling 2 (0) | 2023.08.22 |
---|---|
🕷Data Crawling 1 (0) | 2023.08.22 |
📈3D Graph1 (0) | 2023.07.27 |
HTML을 동적으로 사용하기 (0) | 2023.07.14 |
JavaScript 예제 (0) | 2023.07.04 |