股票資料分析的圖形化界面實作
文章目錄
- 股票資料分析的圖形化界面實作
- 一、簡介
- 二、代碼
- 1、主代碼
- 2、獲取資料的操作
- 3、資料庫操作
- 4、圖形化界面
- 三、效果展示
一、簡介
我們知道股票的歷史資料是一個非常重要的資訊,我們可以通過歷史資料來預測未來的發展的趨勢,所以我們希望使用一個圖形化的界面來實作一個股票分析的呈現,
二、代碼
1、主代碼
from work1 import get_data
from work1 import read_data
from work1 import plot_data
import pymysql
from uitest import MyFrame1
import wx
from database1 import write_to_base
import time
class CalcFrame(MyFrame1):
def __init__(self, parent):
MyFrame1.__init__(self, parent)
# Virtual event handlers, overide them in your derived class
def get_data(self, event):
"""
獲取資料
:param event: 點擊
:return: 空
"""
get_data()
time.sleep(2)
dlg = wx.MessageDialog(None, '已經成功獲取資料', '獲取資料')
result = dlg.ShowModal()
dlg.Destroy()
event.Skip()
def store_data(self, event):
"""
存盤資料
:param event: 點擊
:return: 空
"""
write_to_base()
dlg = wx.MessageDialog(None, '已經成功存盤資料', '存盤資料')
result = dlg.ShowModal()
dlg.Destroy()
event.Skip()
def read_data(self, event):
"""
讀取資料
:param event: 點擊
:return: 空
"""
df0 = read_data()
dlg = wx.MessageDialog(None, '已經成功讀取資料', '讀取資料')
result = dlg.ShowModal()
dlg.Destroy()
event.Skip()
def show_data(self, event):
"""
展示資料
:param event: 點擊
:return: 空
"""
df0 = read_data()
plot_data(df0)
event.Skip()
if __name__ == '__main__':
"""
主函式
"""
app = wx.App(False)
frame = CalcFrame(None)
frame.Show(True)
# start the applications
app.MainLoop()
2、獲取資料的操作
import numpy as np
import tushare as ts
import matplotlib.pyplot as plt
import pandas as pd
def get_data():
"""
獲取資料
:return: 空
"""
# 獲取股票的資料
pro = ts.pro_api('c62ba9195fa8b54ff78a38cab1cec01b15def7f47c32f91fb273ee3a')
df = pro.daily(ts_code='000001.SZ', start_date='20190701', end_date='20210718')
# 存盤資料到一個檔案中
df.to_csv('./data.csv')
print(df)
def read_data():
"""
讀取資料
:return: 空
"""
# 讀取資料
df = pd.read_csv('./data.csv')
# 洗掉不需要的行
df = df.drop(['Unnamed: 0'], axis=1)
df = df.drop(['ts_code'], axis=1)
# 反轉行使得時間是從前到后的
df = df.iloc[::-1, :]
# 將時間由數字轉為字串
for i in range(497):
df.iloc[i, 0] = str(df.iloc[i, 0])
# 將字串轉為時間型別的資料
df['trade_date'] = pd.to_datetime(df['trade_date'])
# 將時間設定為索引
df = df.set_index(['trade_date'])
df = df.iloc[:-2, :]
print(df)
return df
def plot_data(df):
"""
展示資料
:param df: 一個DataFrame
:return: 空
"""
ma5 = (df['close'].rolling(5).mean()).iloc[30:]
ma10 = (df['close'].rolling(10).mean()).iloc[30:]
ma20 = (df['close'].rolling(20).mean()).iloc[30:]
plt.figure(figsize=(16, 9))
l1, = plt.plot(ma5, label="ma5")
l2, = plt.plot(ma10, label="ma10")
l3, = plt.plot(ma20, label="ma20")
l4, = plt.plot(df['close'].iloc[30:], label="close")
plt.legend(handles=[l1, l2, l3, l4], labels=["ma5", "ma10", "ma20", "close"])
plt.show()
3、資料庫操作
import pymysql
import pandas as pd
def write_to_base():
# pass
"""
寫入資料庫
:return:空
"""
df0 = pd.read_csv('./data.csv')
df0[['ts_code']] = df0[['ts_code']].astype(str)
df0[['trade_date']] = df0[['trade_date']].astype(str)
df0[['open']] = df0[['open']].astype(str)
df0[['high']] = df0[['high']].astype(str)
df0[['low']] = df0[['low']].astype(str)
df0[['close']] = df0[['close']].astype(str)
df0[['pre_close']] = df0[['pre_close']].astype(str)
df0[['change']] = df0[['change']].astype(str)
df0[['pct_chg']] = df0[['pct_chg']].astype(str)
df0[['vol']] = df0[['vol']].astype(str)
df0[['amount']] = df0[['amount']].astype(str)
# df0[['pre_close']] = df0[['pre_close']].astype(str)
# df0[['ts_code']] = df0[['ts_code']].astype(str)
# 打開資料庫連接
# print(data)
# data = tuple(data)
db = pymysql.connect(host="localhost",
user="root",
password="671513",
db="base1")
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# db.commit()
# db.ping(reconnect=True)
db.ping(reconnect=True)
cursor.execute("use base1")
db.commit()
sql = "INSERT INTO tb(ts_code,trdae_date,open,high,low,close,pre_close,changed,pct_chg,vol,amount) \
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"
# ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"
# ('000001.SZ','20210716','21.41','21.82','21.3','21.34','21.62','-0.28','-1.2951','573002.61','1230180.813')
# ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
for i in range(499):
db.ping(reconnect=True)
# 執行sql陳述句
cursor.execute(sql %\
(df0.iloc[i, 0], df0.iloc[i, 1], df0.iloc[i, 2], df0.iloc[i, 3],
df0.iloc[i, 4], df0.iloc[i, 5], df0.iloc[i, 6], df0.iloc[i, 7],
df0.iloc[i, 8], df0.iloc[i, 9], df0.iloc[i, 10]))
# 執行sql陳述句
db.commit()
# 關閉資料庫連接
db.close()
4、圖形化界面
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class MyFrame1
###########################################################################
class MyFrame1(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"股票資料分析", pos=wx.DefaultPosition, size=wx.Size(309, 300),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
bSizer1 = wx.BoxSizer(wx.VERTICAL)
self.m_button1 = wx.Button(self, wx.ID_ANY, u"獲取資料", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer1.Add(self.m_button1, 1, wx.ALL | wx.EXPAND, 5)
self.m_button2 = wx.Button(self, wx.ID_ANY, u"存盤資料", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer1.Add(self.m_button2, 1, wx.ALL | wx.EXPAND, 5)
self.m_button3 = wx.Button(self, wx.ID_ANY, u"讀取資料", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer1.Add(self.m_button3, 1, wx.ALL | wx.EXPAND, 5)
self.m_button4 = wx.Button(self, wx.ID_ANY, u"展示曲線", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer1.Add(self.m_button4, 1, wx.ALL | wx.EXPAND, 5)
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.m_button1.Bind(wx.EVT_BUTTON, self.get_data)
self.m_button2.Bind(wx.EVT_BUTTON, self.store_data)
self.m_button3.Bind(wx.EVT_BUTTON, self.read_data)
self.m_button4.Bind(wx.EVT_BUTTON, self.show_data)
def __del__(self):
pass
# Virtual event handlers, overide them in your derived class
def get_data(self, event):
event.Skip()
def store_data(self, event):
event.Skip()
def read_data(self, event):
event.Skip()
def show_data(self, event):
event.Skip()
#
#
# class CalcFrame(MyFrame1):
# def __init__(self, parent):
# MyFrame1.__init__(self, parent)
#
#
# app = wx.App(False)
#
# frame = CalcFrame(None)
#
# frame.Show(True)
#
# # start the applications
# app.MainLoop()
三、效果展示
我們采用視頻的方法來進行展示、
https://www.bilibili.com/video/BV1RF411q7g2?spm_id_from=333.999.0.0
股票資料分析的實作
最后,感謝大家的閱讀與支持了啦,這個全部的代碼放在了資源里面啦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387870.html
標籤:其他
上一篇:UI自動化平臺(一)
