大家好,最近大A的白马股都快认不出来了。以泪洗脸。但从金融界最后一个交易日的行情云图来看,其实很多中小股还是红的,绿的是白马股。以下截图来自财经网站-大盘云图:2月26日大盘云图那么,今天我们尝试用python爬取最新交易日的股票数据,并尝试用excel简单画出上面的树图表。爬取网易财经各板块个股数据excel树状图简单树图带增长率树状图1.爬取网易财经各板块个股数据目标网址:http://quotes.money.163.com/old/#query=hy010000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0网易财经-市场中心由于爬虫部分比较简单,这里就不赘述了,简单介绍思路,附上完整代码供大家参考。爬虫思路:请求目标网站数据,并解析出主业数据(新增):行业板块名称及对应的id(如finance,hy010000)并根据其构建新的行业股票数据页面对应行业部门的id。参数,获取所有页面,然后翻页爬取所有数据爬虫代码:#-*-coding:utf-8-*-"""CreatedFeb2810:30:562021@author:可以调用meCaige"""importrequestsimportreimportpandasaspd#获取所有板块和板块idurl='http://quotes.money.163.com/old/#query=hy001000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0'r=请求。get(url)html=r.text#将非字符替换为空,方便后面的正则html=re.sub('s','',html)#正则获取plate和id所在的区域位于labelHtml=re.findall(r'主业(新)(.*?)SEC业(新)',html)[0]#常规盘和id,结果是一个元组列表dfLabel=pd.DataFrame(label,columns=['id','plate'])#根据plateid和翻页获取页面数据(json格式)defget_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':'否,符号,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()returnj#空列表用于访问每页数据dfs=[]#遍历所有sectionforhy_id,sectionindfLabel.values:#获取页数j=get_json(hy_id,0)pages=j['pagecount']forpageinrange(pages):j=get_json(hy_id,page)data=j['list']df=pd.DataFrame(data)df['plate']=platedfs.append(df)print(f'{len(dfs)}platedatahasbeencrawl')result=pd.concat(dfs)2.Excel树状图excel树状图为office2016以后版本新增的图表类型,如果要绘制,需要以该版本及以后版本为基础。简单的树状图绘制过程:选择数据->插入->图表->选择树状图。下图是树状图绘制过程的一个例子。在树状图中,每个色块代表一个省份,色块的大小由其GDP值决定。2020年全国各地GDP3.带增长率的树状图我们发现,在基本树状图中,色块的颜色除了区分色块外,没有其他特殊意义。以GDP为例,除了数值,我们一般还会看它的增长率,那么色块的颜色能不能和增长率相关呢?让我们尝试在下面探索它。要是成功了,金融世界的云图好像也可以用excel树状图画出来不是吗!1.想法:我们希望色块的颜色能够代表成长的速度。比如红色在上升,绿色在下降,颜色越深绝对值越大。然后用相应的颜色填充每个色块。因为树状图最多支持Multi-level,色块的颜色只能手动填充。我应该怎么办?由于您可以手动执行此操作,因此您实际上可以使用VBA自动执行此过程。2.增长率配色基于以上思路,我们需要对增长率进行配色。最简单的方法是在条件格式中使用色标。将增长率数据框起来—>开始—>条件格式—>色标(选择值越大颜色越红的,因为这里是负增长率,所以选择红色和绿色的):为了更好的显示,区分正负负增长率,我们在设置色标后进行规则管理:我们将中间值设置为数字0,这样负增长率为绿色,正增长率为红色;我们将最大值设置为80个百分点的数值,也就是增长率值前80%的都是最红的。最终配色效果:配色效果四、VBA填充色块颜色先看效果:湖北受疫情影响最大,封城近半年,年增长率为负。由于条件格式中单元格颜色不固定,无法通过vba获取各省的GDP和增长率。我们需要将颜色分配给新列。需要进行以下操作:选择要复制的增长率数据,然后点击剪贴板右下角会出现剪贴板,然后鼠标左键选择要粘贴的地方,比如E2,点击要粘贴到剪贴板的数据。此时粘贴的单元格区域颜色固定,可以选择删除数据,只保留颜色部分。单元格颜色复制操作流程VBA思路:激活需要操作的图表(Activate)遍历所有系列和数据点(ActiveChart.FullSeriesCollection(1).Points.Count)从第一个数据点开始获取对应的增长率单元格Color(ActiveSheet.Range("E"&i+1).Interior.Color)将单元格分配给数据点(Selection.Format.Fill.ForeColor.RGB)VBA代码:SubMy_Color()ActiveSheet.ChartObjects("Chart1").Activate'遍历所有数据点Fori=1ToActiveChart.FullSeriesCollection(1).Points.Count'选择数据点ActiveChart.FullSeriesCollection(1).Points(i).Select'获取单元格颜色MyColor=ActiveSheet.Range("E"&i+1).Interior.Color'将单元格颜色赋给对应数据点的填充颜色Selection.Format.Fill.ForeColor.RGB=MyColorNext执行脚本的过程如下:好了,以上就是本期的全部内容,大家可以尝试爬取股票数据,然后再尝试绘制。
