gyeomii

📈3D Graph2 본문

개발

📈3D Graph2

gyeomii 2023. 7. 27. 18:53
반응형

주식데이터로 그래프 그리기

주식 종목 개수

가격 변동 데이터 수

  • 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