python爬取基金股票最新数据,并用excel绘制树状图

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

python爬取基金股票最新数据,并用excel绘制树状图

跌妈不认html

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

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

python爬取基金股票最新数据,并用excel绘制树状图

2月26日大盘云图app

那么,今天咱们试着用python爬取最近交易日的股票数据,并试着用excel简单绘制上面这个树状图。网站

  • 爬取网易财经各板块股票数据
  • excel树状图
  • 简单的树状图
  • 带有增加率的树状图

1、爬取网易财经各板块股票数据

目标网址:url

http://quotes.money.163.com/old/#query=hy010000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0
python爬取基金股票最新数据,并用excel绘制树状图

网易财经-行情中心spa

因为这个爬虫部分比较简单,这里不作过多赘述,仅介绍一下思路并附上完整代码供你们参考。excel

爬虫思路:code

请求目标网站数据,解析出主要行业(新)的数据:行业板块名称及对应id(如金融,hy010000)

根据行业板块对应id构造新的行业股票数据网页

因为翻页网址不变,代入参数,获取所有页数,而后翻页爬取所有数据

爬虫代码:

# -*- 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级以后版本中新加的图表类型,想要绘制须要基于此版本及以后的版本哦。

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

python爬取基金股票最新数据,并用excel绘制树状图

树状图绘制流程

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

python爬取基金股票最新数据,并用excel绘制树状图

2020年全国各地GDP

3、带有增加率的树状图

咱们发现,在基础的树状图中,色块颜色除了区别色块以外并无其余特殊含义。拿GDP来讲,除了值以外咱们通常也会去看其增加率,那么是否可让色块颜色和增加率有关联呢?

下面咱们试着探究一下,若是成功的话,那么金融界的大盘云图彷佛也能够用excel树状图来进行绘制了不是!

一、思路:

咱们但愿色块颜色能表明增加率,好比红色是上涨,绿色是降低且颜色越深表明绝对值越大

再对每一个色块进行对应的颜色填充便可

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

二、增加率配色

基于上述思路,咱们须要对增加率进行配色,最简单的就是用条件格式里的色阶。

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

python爬取基金股票最新数据,并用excel绘制树状图

 

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

咱们将中间值设为数字0,这样负增加率就是绿色,正增加率就是红色;

咱们将最大值设置为百分点值80,也就是增加率前80%的值都是最红的。

python爬取基金股票最新数据,并用excel绘制树状图

 

最终配色效果:

python爬取基金股票最新数据,并用excel绘制树状图

配色效果

4、VBA填充色块颜色

先看效果:

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

python爬取基金股票最新数据,并用excel绘制树状图

各省GDP及增加率

因为条件格式下单元格颜色是不固定的没法经过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

执行脚本过程以下:

python爬取基金股票最新数据,并用excel绘制树状图

 

好了,以上就是本次所有内容,你们能够试着爬取股票数据,而后试着绘制一下。

相关文章
相关标签/搜索