声明:本文已授权公众号「AI极客研修站」独家发布

前言

各位朋友大家好,小之今天又来给大家带来一些干货了。上篇文章机器学习股票价格预测初级实战是我在刚接触量化交易那会,因为苦于找不到数据源,所以找的一个第三方平台来获取股票数据。

后来对平台上使用的ipython notebook感兴趣了,我毕竟Python学习的时间不长,所以接触到这样特殊美好的编译环境,真的很欣喜。ipython中代码、文字、图表混合在一起,非常方便做文档演示,而且它可以即时编译,总之用起来很爽。

所以我就查阅了一些资料,了解到实际上我们自己也是可以使用ipython来作为本地编辑器的,这让我特别开心,加上这周五,也就是明天,我要在全公司面前做一个人工智能和量化交易方面的分享会,所以我就趁机把演示代码写在ipython notebook上,等明天的时候,先把代码跑好,然后边演示代码边演示图表,舒服,等会大家也会在文章中感受到ipython notebook的魅力。

这个PPT我会分享出来,并且还会用一篇文章,专门的说说我在这次分享会演讲中说了什么,想到了什么,希望可以和大家一起交流。

当然,PPT 的样式可能真的不太符合你的期望,我只是一个程序员,实在是不太擅长这些,所以白底黑字,感觉也是极好的。

URL分析

像上篇文章,我是用的股票中的指数数据来分析,不过呢,周五的分享会中,我需要用一个我们公司平时比较熟悉的一个品种(我们公司涉及的是贵金属现货),所以我就询问了我们的CTO,让他给我些路子拿到黄金的数据,后来CTO给了我个地址,华尔街见闻网站。然后点开我需要的品种的图表,用chrome的检查工具,轻易的就抓到了URL数据。网页上大概是这样的

这个数据的请求url是这样的

https://forexdata.wallstreetcn.com/kline?prod_code=XAUUSD&candle_period=8&data_count=1000&end_time=1413158399&fields=time_stamp%2Copen_px%2Cclose_px%2Chigh_px%2Clow_px

数据的格式很清晰,我们大概可以猜测到请求参数data_count代表的是请求的数据量,end_time是时间戳,这两个数据结合在一起就是从end_time开始往前data_count个交易日的数据。

后面带&号的就是我们需要获取的数据了,time_stamp是每笔数据的时间戳,close是收盘价,open是开盘价,high是最高价,low是最低价,这五个数据是我们需要绘制K线图的基本数据,就是所谓的蜡烛图了,K线有不太了解的伙伴可以自己查阅下,我在这里就不多细说了。

爬取数据

分析好url,我们就要正式的爬取数据了,我希望获取黄金(这里实际上是黄金/美金,代号是XAUUSD,是一种外汇)10年的数据,这里注意下,经过我的尝试,这个url中,data_count最多只能获取1000的数据,如果大于1000,也会默认返回1000条数据。那么自然,我们的请求参数end_time就得动态变化。

为了方便,我决定每次只爬取一年的数据,所以data_count固定死为365,而end_time通过format函数从参数中获取,代码如下

def get_data(end_time,count):

url = "https://forexdata.wallstreetcn.com/kline?prod_code=XAUUSD&candle_period=8&data_count=365&end_time="\

"{end_time}"\

"&fields=time_stamp%2Copen_px%2Cclose_px%2Chigh_px%2Clow_px".format(end_time=end_time)

response = requests.get(url) # 请求数据

data_list = json.loads(response.text) # json 解析

data = data_list.get("data").get("candle").get("XAUUSD")

# 转化为 DataFrame

df = pd.DataFrame(data,columns=['date','open','close','high','low'],index=list(range(count,count+365)))

return df

这里,我们使用requests第三方包来请求数据,拿到数据后先用json来解析数据,最后把数据转化为pandas的DataFrame结构。这个是常规操作了,大家应该都没什么问题。

获取数据的方法写好后,我们循环调用10次get_data函数,并且把DataFrame对象进行拼接,就完整的拿到我们黄金的10年数据了,注意每次循环间隔要有一定延时,免得被反爬虫机制封了iP啦。

init_time = 1237507200 # 2009年3月20日

window = 60*60*24*365 # 每次获取365天的数据

df = pd.DataFrame()

for i in range(10):

df = pd.concat([df,get_data(init_time + i * window,i*365)])

print("get data success ",i)

time.sleep(0.5)

好了,代码执行完之后,我们来看看df的数据,截一个ipython notebook的样式。

ipython这种体验我可以归纳为:及时行乐。

玩弄数据

好了,现在我们有了3650条DataFrame数据了,作为拥有数据分析三大神器的Python来说,下面就可以随意的玩弄数据了。(import matplotlib.pyplot as plt)

比如我们绘制下黄金的收盘价走势图,三行代码就可以咯

df['close'].plot(figsize=(15,10))

plt.grid(True)

plt.show()

那我们有了绘制K线数据的5个基本数据,不绘制个K线显然说不过去。绘制K线的代码稍微复杂一些,主要就是处理横坐标的时间,需要有一个数据的转化,把时间戳转化为%Y-%m-%d,再把这种格式转化为pyplot支持的时间样式。

import matplotlib.finance as mpf

from matplotlib.pylab import date2num

import datetime

r = map(lambda x : time.strftime('%Y-%m-%d',time.localtime(x)),df['date'])

df['date'] = list(r)

def date_to_num(dates):

num_time = []

for date in dates:

date_time = datetime.datetime.strptime(date,'%Y-%m-%d')

num_date = date2num(date_time)

num_time.append(num_date)

return num_time

fig,ax = plt.subplots(figsize=(15,10))

mat_data = df.as_matrix()

num_time = date_to_num(mat_data[:,0])

mat_data[:,0] = num_time

fig.subplots_adjust(bottom=0.2)

ax.xaxis_date()

mpf.candlestick_ochl(ax,mat_data,width=0.6,colorup='r',colordown='g')

plt.grid(True)

plt.xlabel('Data')

plt.ylabel('Price')

plt.show()

我们还可以绘制这10年来每天的涨跌幅状态,从中能看出黄金走势的牛熊和震荡

rate_of_return = (df['close']-df['open'])/df['open']

rate_of_return.plot(kind='line',style='k--',figsize=(15,10))

plt.show()

可以看出,黄金大部分时间都是在震荡,刚开始和中间有一些比较反常的情况,刚开始那个我推测是经济危机之后那段时间的调整,美元大跌那会吧。

哦对了,这里我要纠正下我上篇文章的一个错误,记得那个弯曲的柱状图吗,没错,就是它了

我当时以为是ipython的bug,后来发现并不是,而是代码中我加了这一行

with plt.xkcd():

xkcd是一部漫画的名称,然后这个函数代表就是用类似于这部漫画的style来画图,所以,这漫画是啥样的呢?

emm...看起来确实很手工。

结尾

好了,数据爬取篇就这样了,实际上和大部分爬取工作都差不多,只是行情有一定的特殊性。

下一篇我将针对这些数据玩弄一些机器学习代码,来和大家一起调调参。

推荐阅读

python财务报表预测股票价格_机器学习股票价格预测从爬虫到预测-数据爬取部分...相关推荐

  1. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  2. python爬虫的一次尝试——华北电力大学图书馆读者荐购系统:基于python爬虫的web数据爬取

    华北电力大学图书馆读者荐购系统数据爬取 前言 本章工具 网页分析 1.荐购数据 2.书目具体信息 代码部分 1. 荐购数据爬取 2. 完整书目信息爬取 前言 本学期数据仓库与数据挖掘课程大作业是编程实 ...

  3. python爬虫从入门到实战笔记——第一章爬虫原理和数据爬取

    爬虫原理和数据抓取 1.1 通用爬虫和聚焦爬虫 通用爬虫 聚焦爬虫 1.2 HTTP和HTTPS HTTP的请求与响应 浏览器发送HTTP请求的过程: 客户端HTTP请求 请求方法 常用的请求报头 服 ...

  4. Python爬虫之微信数据爬取(十三)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  5. python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论

    文章目录 基础爬虫部分Ⅱ Ajax技术 json 1. Network 2. XHR怎么请求? 3. 什么是json? 4. json数据如何解析? 带参数请求 1. 复习 2. params 3. ...

  6. 【Python爬虫】东方财富数据爬取

    0.背景 由于工作需要,最近在研究如何从东方财富网页爬取股东增持数据. 网页:http://data.eastmoney.com/executive/gdzjc-jzc.html 1.分析网页请求 打 ...

  7. Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息

    目录 一.XPath 二.XPath 常用规则 三.在谷歌浏览器安装XPath插件 四.Python爬虫常用插件 五.使用Xpath解析 六.Xpath匹配示例 1.查看所有的标签(如p.a.li标签 ...

  8. python手机端下载-Python3,x:如何进行手机APP的数据爬取

    Python3,x:如何进行手机APP的数据爬取 一.简介 平时我们的爬虫多是针对网页的,但是随着手机端APP应用数量的增多,相应的爬取需求也就越来越多,因此手机端APP的数据爬取对于一名爬虫工程师来 ...

  9. 疫情数据爬取,可视化及其预测

    疫情数据爬取及可视化 数据爬取及保存(provinceDataGet.py) import requests import json import pandas as pd# 地区 areas = [ ...

最新文章

  1. php扩展包是什么意思,php – 扩展或包括 – 什么是更好的Twig?
  2. Fun Chat 饭聊手机软件
  3. 计算机科学与技术分享会,“相伴成长,绘梦未来”——计算机科学学院计算机科学与技术专业举办交流分享会...
  4. 技术动态 | 事理图谱,下一代知识图谱
  5. 分类学计算机面试什么,史上最全的机器学习面试题-机器学习爱好者必看
  6. selenium-入门与安装-0223
  7. 服务器维修工单,运维工单--服务器申请工单
  8. 数据结构知识点大汇总(五)
  9. 【回环检测】如何理解loopClosing中的连续性检测
  10. fastble找不到手机_Android蓝牙库FastBle的基础入门使用
  11. 应用随机过程-复习笔记-Chapter4-关于期望的各态历经性习题答案
  12. MySQL数据库基本操作指令
  13. 常见的股票量化交易软件主要有哪几种类型?
  14. Unicode与GB18030、GBK、GB2312
  15. 《东周列国志》第一百回 鲁仲连不肯帝秦 信陵君窃符救赵
  16. 从fastq生成vcf文件
  17. 企业发放的奖金根据利润提成。
  18. Thymeleaf【快速入门】
  19. Java 实现ES批量索引
  20. 公众号文章同步到其它平台方法

热门文章

  1. html css web笔记,Web/HTML/CSS/的笔记
  2. 上网本 ubuntu debian android,关于Debian:在Android上的chroot ubuntu 16.04上,apt-get更新失败...
  3. source insight(SI)怎么显示全路径?(不显示省略路径)(关闭Trim long path names with ellipses)
  4. python 如何将虚拟环境的项目的所有.py文件的import导包汇总到requirements.txt文件 (pipreqs)
  5. pytorch的梯度计算以及backward方法
  6. lua脚本简单编辑及常用指令
  7. Maven下载+Maven环境变量配置+IntelliJ IDEA配置Maven(详细教程) ,收藏起来吧
  8. php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)
  9. java excel导入去重_如何把日志导入到excel文档图文教程(含url去重)
  10. java 操作 ldap_JAVA操作LDAP总结