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之Python安装
Sep 12 Python
Python中使用dom模块生成XML文件示例
Apr 05 Python
Python正则表达式常用函数总结
Jun 24 Python
破解安装Pycharm的方法
Oct 19 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
简单了解Python3里的一些新特性
Jul 13 Python
python 类之间的参数传递方式
Dec 20 Python
Python函数式编程实例详解
Jan 17 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
python 图像增强算法实现详解
Jan 24 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python中的字典遍历备忘
2015/01/17 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
指导老师鉴定意见
2015/06/05 职场文书
中学教代会开幕词
2016/03/04 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
Java8中接口的新特性使用指南
2021/11/01 Java/Android