python爬取股票最新数据并用excel绘制树状图的示例


Posted in Python onMarch 01, 2021

大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊。

不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们。

以下截图来自金融界网站-大盘云图:

python爬取股票最新数据并用excel绘制树状图的示例

那么,今天我们试着用python爬取最近交易日的股票数据,并试着用excel简单绘制以下上面这个树状图。本文旨在抛砖引玉,吼吼。

1. python爬取网易财经不同板块股票数据

目标网址:

http://quotes.money.163.com/old/#query=hy010000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0

python爬取股票最新数据并用excel绘制树状图的示例

由于这个爬虫部分比较简单,这里不做过多赘述,仅介绍一下思路并附上完整代码供大家参考。

爬虫思路:

  1. 请求目标网站数据,解析出主要行业(新)的数据:行业板块名称及对应id(如金融,hy010000)
  2. 根据行业板块对应id构造新的行业股票数据网页
  3. 由于翻页网址不变,按照《》的里的套路找到股票列表数据的真实地址
  4. 代入参数,获取全部页数,然后翻页爬取全部数据

爬虫代码:

# -*- coding: utf-8 -*-
"""
Created Feb 28 10:30:56 2021

@author: 可以叫我才哥
"""

import requests
import re
import pandas as pd

# 获取全部板块及板块id
url = 'http://quotes.money.163.com/old/#query=hy001000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0'

r = requests.get(url)

html = r.text
# 替换非字符为空,便于下面的正则
html = re.sub('\s','',html)
# 正则获取 板块及id所在区域
labelHtml = re.findall(r'</span>主要行业\(新\)</a>(.*?)</span>证监会行业\(新\)',html)[0]
# 正则板块和id,结果为由元组组成的列表
label = re.findall(r'"qid="(hy.*?)"qquery=.*?"title="(.*?)">',labelHtml)
# 转化为dataframe类型
dfLabel = pd.DataFrame(label,columns=['id','板块'])

# 根据板块id和翻页获取页面数据(json格式)
def get_json(hy_id, page):
 query = 'PLATE_IDS:' + str(hy_id)
 params={
  'host': 'http://quotes.money.163.com/hs/service/diyrank.php',
  'page': page,
  'query': query,
  'fields': 'NO,SYMBOL,NAME,PRICE,PERCENT,UPDOWN,FIVE_MINUTE,OPEN,YESTCLOSE,HIGH,LOW,VOLUME,TURNOVER,HS,LB,WB,ZF,PE,MCAP,TCAP,MFSUM,MFRATIO.MFRATIO2,MFRATIO.MFRATIO10,SNAME,CODE,ANNOUNMT,UVSNEWS', #你可以不用这么多字段
  'sort': 'PERCENT',
  'order': 'desc',
  'count': '24',
  'type': 'query',
  }
 url = 'http://quotes.money.163.com/hs/service/diyrank.php?'
 r = requests.get(url,params=params)
 j = r.json()
 
 return j

# 空列表用于存取每页数据
dfs = []
# 遍历全部板块
for hy_id,板块 in dfLabel.values:
 # 获取页数
 j = get_json(hy_id, 0)
 pages = j['pagecount']
 
 for page in range(pages):
  j = get_json(hy_id, page)
  data = j['list']
  df = pd.DataFrame(data)
  df['板块'] = 板块
  dfs.append(df)
 print(f'已爬取{len(dfs)}个板块数据')

result = pd.concat(dfs)

2. excel树状图

excel树状图是在office2016级之后版本中新加的图表类型,想要绘制需要基于此版本及之后的版本哦。

2.1. 简单的树状图

简单的树状图绘制流程:框选数据—>插入—>图表—>选中树状图 即可。

python爬取股票最新数据并用excel绘制树状图的示例

以下图为例,在树状图中,每个色块代表一个省份,色块面积大小则由其GDO值大小决定。

python爬取股票最新数据并用excel绘制树状图的示例

2.2. 带有增长率的树状图

我们发现,在基础的树状图中,色块颜色除了区别色块之外并没有其他特殊含义。拿GDP来说,除了值之外我们一般也会去看其增长率,那么是否可以让色块颜色和增长率有关联呢?

下面我们试着探究一下,如果成功的话,那么金融界的大盘云图似乎也可以用excel树状图来进行绘制了不是!

思路:

  1. 我们希望色块颜色能代表增长率,比如红色是上涨,绿色是下降且颜色越深代表绝对值越大
  2. 再对每个色块进行对应的颜色填充即可

由于 树状图顶多支持多级,色块颜色也只能手动单一填充,怎么办呢?既然手动可以,那么其实就可以用VBA自动化这个过程咯。

2.3.1. 增长率配色

基于思路1,我们需要对增长率进行配色,最简单的就是用条件格式里的色阶。

框选增长率数据—>开始—>条件格式—>色阶(选中那个让值越大颜色越红的,由于这里有负增长率,所以选了带红绿的):

python爬取股票最新数据并用excel绘制树状图的示例

为了更好的展示区分正负增长率,我们在设置完色阶后再进行管理规则:

  • 我们将中间值设为数字0,这样负增长率就是绿色,正增长率就是红色;
  • 我们将最大值设置为百分点值80,也就是增长率前80%的值都是最红的。

python爬取股票最新数据并用excel绘制树状图的示例

最终配色效果:

python爬取股票最新数据并用excel绘制树状图的示例

2.3.2. VBA填充色块颜色

先看效果:

湖北因为收到疫情影响最大,有接近小半年属于封省状态,全年增长率为负数。

python爬取股票最新数据并用excel绘制树状图的示例

由于条件格式下单元格颜色是不固定的无法通过vba获取,我们需要将颜色赋值到新的一列中去,需要用到如下操作:

**选中增长率数据复制,然后点击剪切板最右下角会出现剪贴板,再鼠标左键选择需要粘贴的地方如E2,点击剪贴板中需要粘贴的数据即可。**这个时候,被粘贴的单元格区域的颜色就是固定的了,你可以选择删除数据只留颜色部分。

python爬取股票最新数据并用excel绘制树状图的示例

VBA思路:

激活需要操作的图表(Activate)

遍历全部的系列和数据点(ActiveChart.FullSeriesCollection(1).Points.Count)

从第一个数据点开始,获取对应增长率单元格颜色(ActiveSheet.Range("E" & i + 1).Interior.Color)

将单元格赋值给该数据点(Selection.Format.Fill.ForeColor.RGB)

VBA代码:

Sub My_Color()
   
 ActiveSheet.ChartObjects("图表 1").Activate
 '遍历全部的数据点
 For i = 1 To ActiveChart.FullSeriesCollection(1).Points.Count
  '选中数据点
  ActiveChart.FullSeriesCollection(1).Points(i).Select
  '获取单元格颜色
  MyColor = ActiveSheet.Range("E" & i + 1).Interior.Color
  '将单元格颜色赋值给对应数据点填充色
  Selection.Format.Fill.ForeColor.RGB = MyColor
 Next

End Sub

执行脚本过程如下:

好了,以上就是本次全部内容,大家可以试着爬取股票数据,然后试着绘制一下。

温馨提示:接近小5000股票数据,vba填充色块颜色会卡死,不建议全选操作。

以上就是python爬取股票最新数据并用excel绘制树状图的示例的详细内容,更多关于python 爬取股票数据并绘图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python递归函数绘制分形树的方法
Jun 22 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 #Python
python中random模块详解
Mar 01 #Python
利用python实现汉诺塔游戏
Mar 01 #Python
python绘制汉诺塔
Mar 01 #Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 #Python
Python 里最强的地图绘制神器
Mar 01 #Python
Python的collections模块真的很好用
Mar 01 #Python
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
php下将XML转换为数组
2010/01/01 PHP
php 数组使用详解 推荐
2011/06/02 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
使用Python编写vim插件的简单示例
2015/04/17 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
深入浅析Python的类
2018/06/22 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
十佳青年个人事迹材料
2014/01/28 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
高一数学教学反思
2014/02/07 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python