最近我出了一本书,《基于股票大数据分析的Python入门实战 视频教学版》,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Python爬虫、数据分析和机器学习的技术,大家看了我的书,不仅能很快用比较热门的案例学好Python,更能了解些股票知识,不至于一入市就拍脑袋买卖。

在本文里,将给出若干精彩范例,包括用爬虫获取股市数据,用matplotlib可视化控件绘制K线和均线,以及用sklean库里的方法,通过机器学习预测股价的走势。

1 通过pandas_datareader库的方法爬取股市数据

pandas_datareader是一个能读取各种金融数据的库,在下面的getDataByPandasDatareader.py范例程序中演示了通过这个库获取股市数据的常规方法。

1 # coding=utf-8
2 from pandas_datareader import data as pdr
3 import yfinance as yf
4 yf.pdr_override()
5 code=‘600895.ss’
6 stock = pdr.get_data_yahoo(code,‘2019-01-02’,‘2019-02-01’)
7 print(stock) # 输出内容
8 # 保存为excel和csv文件
9 stock.to_excel(‘D:\stockData\ch5\’+code+’.xlsx’)
10 stock.to_csv(‘D:\stockData\ch5\’+code+’.csv’)
从这个范例程序的代码上来看,不算复杂,从中没有见到爬取网站之类的代码。关键的是第6行,通过调用pdr.get_data_yahoo方法从雅虎网站获取数据,这个方法的参数分别是股票代码,开始日期和结束日期。第4行使用yf.pdr_override方法是为了防止雅虎网站修改获取历史数据的API接口而导致get_data_yahoo方法不可用。

在这个范例程序中获取了600895(张江高科)2019-01-02到2019-01-31的数据,可以看出,获取的数据并不包括结束日期参数当天的数据。在第7行和第8行分别调用了to_excel和to_csv方法,把结果存入了指定目录下的文件中。这个范例程序运行后,我们首先能在控制台中看到输出,其次会在D:\stockData\ch5\目录中,看到600895.ss.xlsx和600895.ss.csv这两个保存股票数据的文件。打开600895.ss.xlsx文件,能看到如图5-4所示的数据内容,其实在控制台中和另一个csv文件中,可以看到一样的数据。在上述范例程序中,在调用get_data_yahoo方法时,传入的股票代码带有.ss的后缀,这表示该代码是沪股的。此外,还能通过.sz的后缀来表示深股,通过.hk的后缀表示港股。如果要获取美股的数据,则直接用美股的股票代码即可。在下面的printDataByPandasDatareader.py范例程序中演示了获取美股,港股和深股相关数据的方式。

1 # coding=utf-8
2 from pandas_datareader import data as pdr
3 import yfinance as yf
4 yf.pdr_override()
5 stockCodeList = []
6 stockCodeList.append(‘600007.ss’) # 沪股“中国国贸”
7 stockCodeList.append(‘000001.sz’) # 深股“平安银行”
8 stockCodeList.append(‘2318.hk’) # 港股“中国平安”
9 stockCodeList.append(‘IBM’) # 美股,IBM,直接输入股票代码不带后缀
10 for code in stockCodeList:
11 # 为了演示,只取一天(2019-01-02)的交易数据
12 stock = pandas_datareader.get_data_yahoo(code,‘2019-01-02’,‘2019-01-03’)
13 print(stock)
这个范例程序运行后,就能从控制台中看到输出的4个股票在指定日期内的交易情况,由于数据量比较多,本书就不罗列具体的数据了。

2 用matplotlib绘制k线和均线

K线是由开盘价、收盘价、最高价和最低价这四个要素构成。在得到上述四个值之后,首先用开盘价和收盘价绘制成一个长方形实体。随后根据最高价和最低价,把它们垂直地同长方形实体连成一条直线,这条直线就叫影线。如果再细分一下,长方形实体上方的就叫上影线,下方的就叫下影线。通过K线可以形象地记录价格变动的情况,常用的有日K线,周K线和月K线。均线也叫移动平均线(Moving Average,简称MA),是指某段时间内的平均股价(或指数)连成的曲线,均线一般分为三类:短期、中期和长期。通常把5日和10日移动平均线称为短期均线,一般把20日、30日和60日移动平均线作为中期均线,一般120日和250日(甚至更长)移动平均线称为长期均线。在如下的drawKAndMAMore.py范例程序中,将用到上文提到的爬取股票数据的代码,从网络接口里获取股票数据,并绘制k线和均线,请大家不仅注意k线和均线的含义,还要重视matplotlib库里绘制图形、图例和坐标轴的做法,在这本书里,对应的知识点都有详细的说明。

1 # !/usr/bin/env python
2 # coding=utf-8
3 from pandas_datareader import data as pdr
4 import pandas as pd
5 import matplotlib.pyplot as plt
6 from mpl_finance import candlestick2_ochl
7 from matplotlib.ticker import MultipleLocator
8 import yfinance as yf
9 yf.pdr_override()
10 # 根据指定代码和时间范围获取股票数据
11 code=‘600895.ss’
12 stock.drop(stock.index[len(stock)-1],inplace=True)
13 # 保存在本地
14 stock.to_csv(‘D:\stockData\ch7\600895.csv’)
15 df = pd.read_csv(‘D:/stockData/ch7/600895.csv’,encoding=‘gbk’,index_col=0)
16 # 设置窗口大小
17 fig, ax = plt.subplots(figsize=(10, 8))
18 xmajorLocator = MultipleLocator(5) # 将x轴主刻度设置为5的倍数
19 ax.xaxis.set_major_locator(xmajorLocator)
20 # 调用方法绘制K线图
21 candlestick2_ochl(ax = ax, opens=df[“Open”].values,closes=df[“Close”].values, highs=df[“High”].values, lows=df[“Low”].values,width=0.75, colorup=‘red’, colordown=‘green’)
22 # 如下是绘制3种均线
23 df[‘Close’].rolling(window=3).mean().plot(color=“red”,label=‘3日均线’)
24 df[‘Close’].rolling(window=5).mean().plot(color=“blue”,label=‘5日均线’)
25 df[‘Close’].rolling(window=10).mean().plot(color=“green”,label=‘10日均线’)
26 plt.legend(loc=‘best’) # 绘制图例
27 ax.grid(True) # 带网格线
28 plt.title(“600895张江高科的K线图”)
29 plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
30 plt.setp(plt.gca().get_xticklabels(), rotation=30)
31 plt.show()
第一,从第9行到第15行通过调用之前介绍过的get_data_yahoo方法,传入股票代码、开始时间和结束时间这三个参数,从雅虎网站中获得股票交易的数据。

第二,在第17行中调用figsize方法设置了窗口的大小。第三,第18行和第19行的程序代码设置了主刻度是5的倍数。之所以设置成5的倍数,是因为一般一周的交易日是5天。但这里不能简单地把主刻度设置成每周一,因为某些周一有可能是股市休市的法定假日。第四,由于无需在x轴上设置每天的日期,因此这里无需再调用plt.xticks方法,但是要调用如第30行所示的代码,设置x轴刻度的旋转角度,否则x轴显示的时间依然有可能会相互重叠。至于绘制K线的candlestick2_ochl方法和绘制均线的rolling方法与之前drawKAndMA.py范例程序中的代码是完全一致的。这个范例程序的运行结果如图7-5所示,从中可以看到改进后的效果。由于本次显示的股票时间段变长了(是3个月),因此与drawKAndMA.py范例程序相比,这个范例程序均线的效果更为明显,尤其是3日均线,几乎贯穿于整个时间段的各个交易日。另外,由于在第26行通过调用plt.legend(loc='best')方法指定了图例将“显示在合适的位置”,因此这里的图例显示在效果更加合适的左上方,而不是drawKAndMA.py范例程序中的右上方。

3 用sklearn库的机器学习方法预测股票后市价格

在下面的predictStockByLR.py范例程序中,根据股票历史的开盘价、收盘价和成交量等特征值,从数学角度来预测股票未来的收盘价。

1 # !/usr/bin/env python
2 # coding=utf-8
3 import pandas as pd
4 import numpy as np
5 import math
6 import matplotlib.pyplot as plt
7 from sklearn.linear_model import LinearRegression
8 from sklearn.model_selection import train_test_split
9 # 从文件中获取数据
10 origDf = pd.read_csv(‘D:/stockData/ch13/6035052018-09-012019-06-01.csv’,encoding=‘gbk’)
11 df = origDf[[‘Close’, ‘High’, ‘Low’,‘Open’ ,‘Volume’]]
12 featureData = df[[‘Open’, ‘High’, ‘Volume’,‘Low’]]
13 # 划分特征值和目标值
14 feature = featureData.values
15 target = np.array(df[‘Close’])
第10行的程序语句从包含股票信息的csv文件中读取数据,在第14行设置了特征值是开盘价、最高价、最低价和成交量,同时在第15行设置了要预测的目标列是收盘价。在后续的代码中,需要将计算出开盘价、最高价、最低价和成交量这四个特征值和收盘价的线性关系,并在此基础上预测收盘价。

16 # 划分训练集,测试集
17 feature_train, feature_test, target_train ,target_test = train_test_split(feature,target,test_size=0.05)
18 pridectedDays = int(math.ceil(0.05 * len(origDf))) # 预测天数
19 lrTool = LinearRegression()
20 lrTool.fit(feature_train,target_train) # 训练
21 # 用测试集预测结果
22 predictByTest = lrTool.predict(feature_test)
第17行的程序语句通过调用train_test_split方法把包含在csv文件中的股票数据分成训练集和测试集,这个方法前两个参数分别是特征列和目标列,而第三个参数0.05则表示测试集的大小是总量的0.05。该方法返回的四个参数分别是特征值的训练集、特征值的测试集、要预测目标列的训练集和目标列的测试集。

第18行的程序语句计算了要预测的交易日数,在第19行中构建了一个线性回归预测的对象,在第20行是调用fit方法训练特征值和目标值的线性关系,请注意这里的训练是针对训练集的,在第22行中,则是用特征值的测试集来预测目标值(即收盘价)。也就是说,是用多个交易日的股价来训练lrTool对象,并在此基础上预测后续交易日的收盘价。至此,上面的程序代码完成了相关的计算工作。

23 # 组装数据
24 index=0
25 # 在前95%的交易日中,设置预测结果和收盘价一致
26 while index < len(origDf) - pridectedDays:
27 df.ix[index,‘predictedVal’]=origDf.ix[index,‘Close’]
28 df.ix[index,‘Date’]=origDf.ix[index,‘Date’]
29 index = index+1
30 predictedCnt=0
31 # 在后5%的交易日中,用测试集推算预测股价
32 while predictedCnt<pridectedDays:
33 df.ix[index,‘predictedVal’]=predictByTest[predictedCnt]
34 df.ix[index,‘Date’]=origDf.ix[index,‘Date’]
35 predictedCnt=predictedCnt+1
36 index=index+1
在第26行到第29行的while循环中,在第27行把训练集部分的预测股价设置成收盘价,并在第28行设置了训练集部分的日期。

在第32行到第36行的while循环中,遍历了测试集,在第33行的程序语句把df中表示测试结果的predictedVal列设置成相应的预测结果,同时也在第34行的程序语句逐行设置了每条记录中的日期。

37 plt.figure()
38 df[‘predictedVal’].plot(color=“red”,label=‘predicted Data’)
39 df[‘Close’].plot(color=“blue”,label=‘Real Data’)
40 plt.legend(loc=‘best’) # 绘制图例
41 # 设置x坐标的标签
42 major_index=df.index[df.index%100]
43 major_xtics=df[‘Date’][df.index%100]
44 plt.xticks(major_index,major_xtics)
45 plt.setp(plt.gca().get_xticklabels(), rotation=30)
46 # 带网格线,且设置了网格样式
47 plt.grid(linestyle=’-.’)
48 plt.show()
在完成数据计算和数据组装的工作后,从第37行到第48行程序代码的最后,实现了可视化。

第38行和第39行的程序代码分别绘制了预测股价和真实收盘价,在绘制的时候设置了不同的颜色,也设置了不同的label标签值,在第40行通过调用legend方法,根据收盘价和预测股价的标签值,绘制了相应的图例。从第42行到第45行设置了x轴显示的标签文字是日期,为了不让标签文字显示过密,设置了“每10个日期里只显示1个”的显示方式,并且在第47行设置了网格线的效果,最后在第48行通过调用show方法绘制出整个图形。运行本范例程序,即可看到如图13-7所示的结果。可以看出,蓝线表示真实的收盘价(图中完整的线),红线表示预测股价(图中靠右边的线。因为本书黑白印刷的原因,在书中读者看不到蓝色和红色,请读者在自己的计算机上运行这个范例程序即可看到红蓝两色的线)。虽然预测股价和真实价之间有差距,但涨跌的趋势大致相同。而且在预测时没有考虑到涨跌停的因素,所以预测结果的涨跌幅度比真实数据要大。股票价格不仅由技术面决定,还受政策面、资金量以及消息面等诸多因素的影响,这也能解释预测结果和真实结果间有差异的原因。

4 对书的介绍和版权说明

本文给出的范例,仅是《基于股票大数据分析的Pyt

hon入门实战 视频教学版》一书里的部分案例,该书京东链接:https://item.jd.com/69241653952.html。

这本书包括如下的内容,是本入门python的工具书。1 Python基本语法,集合,面向对象语法,异常处理,读写文件技能。2 Python操作数据库的技能。3 通过爬虫从网络接口爬取股票数据的技能。4 基于Numpy+Pandas+Matplotlib进行数据分析的技能5 基于TKinter的GUI编程技能+ 发送邮件的技能6 Django框架的用法7 线性回归+SVM的机器学习技能这本书里,像本文那样花花绿绿能吸引人的图真不少,而且还是通过python绘制出来的,用这类比较能吸引人的案例来入门python,一定非常高效。

原文链接:https://blog.csdn.net/sxeric/article/details/107954299?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-34.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-34.nonecase&request_id=5f35ae99b51ffe58eedc11b4

用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)(转载)相关推荐

  1. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  2. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,在其中用股票范例讲述Python爬虫.数据分析和机器学习的技术,大家看了我的书,不仅能很快用比较热门的案例学好P ...

  3. python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件

    python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件 import requests import pandas as pd# market: 0:沪市 1:深市 # ...

  4. Python爬虫教程-Python爬取股票数据过程详解

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...

  5. 【python爬虫】用python爬取股票数据

    这几天把学习通的 python 爬虫相关课程给刷完了,想去动手也实践一下,重温一下很久之前学过的东西 然后发现实例2(爬淘宝那个).实例3(爬股票那个),好像都有点问题.实例2是淘宝现在的反爬机制好像 ...

  6. 用python爬取股票数据的一点小结

    一.背景 网上对于爬取股票数据有相对完善的教程.不过大部分教程都是只能够爬取一段时间的股票数据,针对某一只股票的历史数据爬取,目前还没有看到比较好的教程.下面对近期学的东西进行一点点小结. 二.股票数 ...

  7. python爬取股票数据并存到数据库

    Python 用Tushare接口获取股票数据并存储到Sqlite数据库 使用技术介绍: 关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口. 关于数据库 ...

  8. Python爬取股票数据存入mysql数据库,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅等)支持多线程+数据库连接池

    项目简介 (Python)爬虫 + MySQL + Redis项目. 爬取下来的数据可用于后续的数据分析(我计划将其用于我的毕业设计). 未来会将数据分析的可视化部署到服务器上, 并添加股票降价通知的 ...

  9. python爬取关注度高股票,Python爬取股票数据,让你感受一下什么是一秒钟两千条数据...

    本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于青灯编程,作者:清风 Python GUI编程:高清电影在线观看平台制作,全网电影免费 ...

最新文章

  1. ICCV 2021 Oral | NerfingMVS:引导优化神经辐射场实现室内多视角三维重建
  2. 【T10】记住,TCP__IP不是轮询的
  3. Ecshop购物流程结算步骤 显示商品缩略图
  4. 输出可爱的”杨辉三角”
  5. html表单赋值提交,jQuery自动给表单赋值
  6. www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程
  7. NLP(自然语言处理)基本入门之分词操作
  8. 精益求精, ePub 电子书制作手记
  9. 设计模式--工厂模式(一个关于工厂的故事)
  10. 机房收费系统之思想性总结
  11. html5设置锚点,Markdown也不服输
  12. 数据库实体间关联关系:一对一、一对多、多对多
  13. 萨提亚领衔主题演讲,带领高管和MVP合影,预告Julia女神的演讲中将有我的.NET Core实践
  14. 线程和进程(1)——多线程,进程与线程
  15. 普拉图和施泰纳问题的实验解法
  16. EI | 北大温东辉组发现确定性过程驱动工业废水处理系统细菌群落构建
  17. 业务流程图 vs 数据流程图
  18. 计算两点之间的距离(经度)
  19. 毕业3年,从中软外包跳槽到京东集团,年薪翻倍,我经历了什么?
  20. Alibaba开源Java诊断利器Arthas基础教程

热门文章

  1. android高端平板,联想新推四款Tab 4系列Android平板:有大有小,有强有弱
  2. Indy相关应用知识总结
  3. anaconda 安装 scipy
  4. python中astype 存在空值_python-DataFrame.astype()错误参数
  5. VLANIF实现VLAN之间的通信
  6. Redis服务器命令
  7. 微信端网页自动播放音乐解决方案
  8. 揭秘世界上那些被埋藏地下最古老的酒!
  9. 手牵手系列之记录JavaScript高级程序设计(第3版)
  10. 车牌识别--铆钉的去除