Python边做边学︱初始股票数据(附代码)
关系数据库SQLite ———初识股票数据
01
任务说明
02
任务展示
金融量化分析已成为金融从业者的必备技能之一。其中,数据又是其重要基础,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。随着信息量的日益膨胀,学会获取、查询和加工数据信息变得越来越重要。然而,熟悉数据库操作又是数据处理的基石,接下来我们就从存、取数据入手吧!
■ 图 8-1 SQLiteExpert 中查看股票数据
■ 图 8-2 由股票数据绘制的 K 线图
03
任务实现
1
●
安装金融数据包
要对股票数据进行量化分析,首先需要有可靠的股票历史数据来源。综合对比市面流行的金融数据包,为了简化数据获取的流程,选择开源金融数据包 Tushare 来获取股票数据。
在 Python 中,要提前安装好 pandas 和 lxml 库,然后再安装 Tushare 库。Tushare 库可以通过 pip 命令在线完成安装。
安装 Tushare 库,在命令提示符窗口中输入命令:
Pip install tushare
2
●
获取股票 K 线数据
在 PyCharm 中新建工程 SQLStock ,并新建一个 Python 文件 SqliteHelp.py 。首先,输入如下代码,测试从 Tushare 库获取数据是否正常。
importtushare asts
daily=ts.get_k_data("601398",start=“2019-12-01”,end=“2019-12-31”)
print(daily)
结果数据包含 8 列,第 1 列为自动产生的 index ,之后是日期、开盘价、收盘价、最高价、最低价和成交量,最后 1 列为股票代码。ts.get _ k _ data 函数中只需输入主要的几个参数:第 1 个是股票代码,第 2 个是开始日期,第 3 个是结束日期。
■ 图 8-3 从 Tushare 获得的股票数据
3
●
编写 SQLite 数据库操作类
为了便于对数据库操作的统一管理,首先编写一个 SQLite 数据库操作类。在 SQLite 类的初始化构造方法中,通过 sqlite.connect ()产生数据库连接对象 self.conn ,再通过 self.conn.cursor ()获得游标对象 self.cursor 。
SQLite 类主要定义了数据库的几个基本操作函数。
(1 )建表 createTable (self ),这个操作一般只在第一次进行;表的结构由从 Tushare 库获取的股票数据特征决定,表名固定为“stock ”。为了防止重复数据加入表中,根据 sdate ,code 字段建立了表的唯一性索引。
(2 )插入数据方法 insert (self ,sql ,parm ),通过执行 SQL 语句,提交事务后完成。该函数通常需要用户传入两个参数。其一是 sql ,它表示要执行的 SQL 语句,另一个是 parm ,它代表 SQL语句中用到的实际参数值。
(3 )查询数据的方法 query (self ,sql ),也是通过执行指定的 SQL 语句来实现。
(4 )获取查询结果有两个函数。一个是 show ( self ),通过游标取得所有结果记录,另一个是showone ( self ),通过游标只取得一条结果记录。
(5 )最后一个是类的析构方法__ del __(),关闭数据库中的游标和连接。
编写一个 SQLite 数据库操作类,详细代码如下。
"""
Sqlite数据操作类
"""
import sqlite3 as sqlite
import os.path as osp
import tushare as ts
classSQLiteDB(object):
conn = ''#连接对象
cursor = ''#游标
def__init__(self, dbname):
try:
self.conn = sqlite.connect(osp.abspath(dbname))
except Exception as what:
print(what)
# sys.exit()
# self.conn.row_factory = sqlite.Row
self.cursor = self.conn.cursor()
# 1.建表
defcreateTable(self):
# Id int PRIMARY KEY,
sql='''create table stock
(
sdate date,
open float,
close float,
high float,
low FLOAT,
volume interger,
code varchar(10))
'''
self.cursor.execute(sql)
print("create table OK!")
###建立唯一性索引,防止出现重复数据
sql = "CREATE UNIQUE INDEX idx ON stock (sdate, code)"
self.cursor.execute(sql)
self.conn.commit()
# 2.插入数据
definsert(self, sql, parm):
res=self.cursor.execute(sql, parm)
self.conn.commit() # 提交事物
return res
# 3.查询语句
defmyquery(self, sql):
try:
self.cursor.execute(sql)
self.conn.commit()
except Exception as what:
print(what)
# 4.通过游标获取所有结果记录
defshow(self):
re = self.cursor.fetchall()
return re
# 5.通过游标获取一条结果记录,并将游标指向下一条记录
defshowone(self):
return self.cursor.fetchone()
# 6.断开连接
def__del__(self):
self.cursor.close()#关闭游标
self.conn.close()#关闭连接
print('DB closed!')
4
●
股票 K 线数据存入 SQLite 数据库
直接在 SqliteHelp.py 中添加股票数据入库的程序。操作步骤如下。
(1 )采用语句 SQLiteDB('D :/ mystock.db ')实例化 SQLite 类对象。其中,' D :/ mystock.db '是新建的数据库名称。
(2 )调用建表函数 db.createTable (),完成数据库中表的建立,由于表只需要建立一次,所以表名放在了 SQLiteDB 类中,命名为“stock ”。
(3 )通过 tushare 获取历史数据。
(4 )对 tushare 的数据做简单的格式转换,遍历后取出每一行,转换为列表类型。
(5 )SQL 采用 replace 语句而不是 insert 语句,主要是因为表在定义时限制了唯一性,防止插入数据重复。
(6 )最后,将参数 doc 及 SQL 语句传入 SQLiteDB 类中的 insert 函数,完成数据入库操作股票 K 线数据存入 SQLite 数据库,程序代码如下。
if __name__=='__main__':
###1.建立连接数据库
db = SQLiteDB('D:/mystock.db')
## 2.建立表
db.createTable()
# #####3.通过tushare获取数据
daily = ts.get_k_data("000001", index=True, start="2019-12-01", end="2019-12-31")
print(daily)
for row in daily.index:
doc = list(daily.loc[row])
# sql="insert into stock2 values (?,?,?,?,?,?,?)"
# db.insert(sql,doc)#插入记录
#避免重复插入
sql='replace into stock values(?,?,?,?,?,?,?)'
db.insert(sql, doc) # 插入记录
5
●
采用 SQLiteExpert 查看股票历史数据
在“开始”菜单中找到 SQLiteExpert ,打开程序窗口,通过菜单栏的 File→OpenDatabase 打开数据库 mystock.db ,展开左边的目录结构,可看到之前建好的表 stock 。双击该表,则在右边主窗体显示采集到的股票数据,显示结果如图 8-4 所示。
■ 图 8-4 SQLiteExpert 中查看数据
6
●
绘制 K 线图
在 PyCharm 中新建 Python 文件 AnalyStock.py ,从数据库中读取指定数据,并绘制 K 线图。绘制 K 线图主要用到 mpl _ finance 库。
该程序首先实例化一个 SQLiteDB 对象,连接数据库,然后通过 SQL 语句查询指定股票代码为“sh000001 ”的历史数据,再将结果数据格式整理,最后通过绘图函数 plotkline 绘制 K 线图。
绘图函数 plotkline 中,先是设置图像的 X 、 Y 坐标以及标题等基本信息,然后调用函数 mpf.candlestick _ ohlc 实现绘图,此函数的一个关键输入参数是 data _ list 。data _ list 要求是一个由 tuple构成的列表,每个 tuple 又由日期、开盘价、最高价、最低价、收盘价构成。
详细代码如下。
from SqliteHelp import SQLiteDB
import tushare as ts
import matplotlib.pyplot as plt ## 导入画图模块
import mpl_finance as mpf ## 导入 mplfinance 模块
import sqlite3 as sqlite
from datetime import datetime # 导入datetime模块,和直接import datetime是不同的模块
from matplotlib.pylab import date2num ## 导入日期到数值一一对应的转换工具
# from pandas.plotting import register_matplotlib_converters
###绘制K线图的函数
defplotkline(title,data_list):
plt.rcParams['font.family'] = 'SimHei'## 设置字体
fig, ax1 = plt.subplots(1,1,sharex=True) ## 创建图片和坐标轴
fig.subplots_adjust(bottom=0.2) ## 调整底部距离
ax1.xaxis_date() ## 设置X轴刻度为日期时间
plt.xticks(rotation=45) ## 设置X轴刻度线并旋转45度
plt.yticks() ## 设置Y轴刻度线
plt.title("股票代码"+title+" K线图") ##设置图片标题
plt.xlabel("时间") ##设置X轴标题
plt.ylabel("股价(元)") ##设置Y轴标题
plt.grid(True, 'major', 'both', ls='--', lw=.5, c='k', alpha=.3) ##设置网格线
mpf.candlestick_ohlc(ax1, data_list, width=0.7, colorup='r', colordown='green', alpha=1) ##设置利用mpf画股票K线图
plt.show() ## 显示图片
plt.close() ## 关闭plt,释放内存
##1.建立连接数据库
db = SQLiteDB('D:/mystock.db')
##2.用sqlite类读取数据
sql="select sdate,open,high,low,close from stock where code='sh000001'"
db.myquery(sql)
res=db.show()
print(res)
##3.按照绘制蜡烛图的函数要求构造对应参数
listk=[]
for rr in res:
bk = rr[0]
yy = datetime.strptime(bk, '%Y-%m-%d') # 字符串转换为时间格式
timestamp = date2num(yy)#转为需要的格式
rr=(timestamp,)+rr[1:]
listk.append(rr)
##4.绘制K线图
# register_matplotlib_converters()
plotkline("sh000001",listk)
以上程序段运行结果如图 8-5 所示。
■ 图 8-5 由股票数据绘制的 K 线图
03
源代码下载
关注微信公众号,后台回复关键词 “初始股票” 即可获得完整源代码。
04
参考书籍
《Python边做边学-微课视频版》
ISBN:978-7-302-56793-6
陈秀玲 田荣明 冉涌 主编
定价:49.8元
本书采用项目化教程的模式,以理论讲解与实战案例演练相结合的方式,以知识点为主线,将每个项目按照知识点拆解分为多个任务,每个任务均以充满趣味性的游戏入手,系统、全面、循序渐进地讲解Python知识点,使读者能够学以致用,融会贯通。全书共分为8个项目,分别是认识新朋友(Python)、开启编程之旅、高级编程之路、叩开面向对象编程之门、异常处理、Python图形界面设计、网络爬虫和使用Python操作数据库。本书的每个知识点都有相应的实现代码,并配有详细的注释说明,便于读者快速理解和掌握。
本书适合零基础的读者,也可作为高等院校的教材,还可供相关领域的广大科研人员、从事大数据分析、数据爬取或深度学习的专业人员等作为参考书使用。
05
精彩推荐
Python边做边学︱猜单词游戏(附代码) Python边做边学︱疯狂僵尸游戏(附代码) Python边做边学︱小猪佩奇游戏(附代码) Python 韩信点兵思政案例(含优惠码) 机器学习案例︱人脸识别和人脸检测(附视频) Python ︱爬取天气预报信息(附视频) 《机器学习》实验指导书(附实验参考+代码) Python爬虫综合实战 │ 创建云起书院爬虫(附代码) Python爬虫实战 │ Email提醒(附代码) Python深度学习 │一文掌握卷积神经网络 Python爬虫实战 │ 用selenium爬取百度表情包(附代码) Python爬虫实战│状态521网页的爬取 Python爬虫实战│爬取天气数据的实例详解(附源码) Python实训:用贪婪算法分析业务员路径问题|附源码
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。