查看原文
其他

4月A股的收官战之概念板块哪家强?

爬虫俱乐部 Stata and Python数据分析 2023-01-01

本文作者:陈   鼎,中南财经政法大学统计与数学学院

本文编辑:张   猛

技术总编:王子一


Stata&Python云端课程来啦!

     为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~



前言


股市最近跌跌不休,指数直降到3000点以下。俗话说,股灾十年一遇,战争百年一遇,疫情两三百年一遇,这次都被我们遇到了!可谓见证历史!但是4月A股的收官之战,大盘迎来集体暴涨。沪指上涨2.41%,深成指大涨3.69%,创业板暴涨4.11%。两市4410家上涨,仅253家下跌,涨停板高达247家,涨跌中位数+4.27%!这是因为政治局会议出利好,定调“保持”资本市场平稳运行,“掷地有声”的给市场吃了定心丸。政治局议决定从“全面实行股票发行注册制”改变为“稳步推进股票发行注册制改革”,并决定保持5.5%的增长目标不变,这都刺激了股市大涨。

今天,小编就带大家爬取新浪财经网页4月大A股收官这天的概念板块涨跌数据,并做可视化分析,让我们看看概念板块哪家强。


1、获取数据

首先,我们通过新浪财经网页看一下大A股4月收官日的概念板块涨跌数据,原始网页的大致内容如下图。

按照一般的步骤,我们首先看一下源代码中有没有想要提取的内容,简单以“互联金融“为例进行搜索,如图所示,发现信息无法获取。

这样我们只能进入开发者模式,去“Network”中寻找,最终锁定了包含所需信息的链接”http://money.finance.sina.com.cn/q/view/newFLJK.php?param=class”,而其具体的内容是json形式,如图所示。

基于此,我们可以复制此处的网页链接,然后开始处理,使用 requests.get命令读取html文件。当然在此之前,我们要引入所需要的外部包。具体程序如下:

import requestsimport jsonpathimport pandas as pdurl = "http://money.finance.sina.com.cn/q/view/newFLJK.php?param=class"headers = { "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding":"gzip, deflate", "Accept-Language":"zh-CN,zh;q=0.9,en-GB;q=0.8,en-US;q=0.7,en;q=0.6,zh-TW;q=0.5", "Cache-Control":"max-age=0", "Connection":"keep-alive", "Host":"money.finance.sina.com.cn", "Upgrade-Insecure-Requests":"1", "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",}html = requests.get(url, headers = headers)print(html.text)
读取html文件之后,生成的html.text部分信息如下图所示:

从图中可以发现,在我们需要的信息前面,出现了“var S_Finance_bankuai_class = ”的无用部分,因此我们可以使用正则表达式把需要的json部分提取出来。
程序如下:
import rea = html.text a = re.search('{.*}', a, re.DOTALL).group()
其中,{.*}表示用贪婪模式进行匹配, re.DOTALL表示匹配内容中可以包含换行符。这样处理之后,就是我们需要的内容。
接下来,为了表示为表格的样式,我们要使用numpy数据库读入数据。而读入前,要先把json部分改为字典形式,此时需要的是eval命令。当读入数据时,如果按照默认选项,生成的将为12行170列的数据,因此我们需要orient = 'index'选项来进行设置,保证生成的是170行12列的数据。拿到数据之后,还有多余的一列板块信息,我们用drop命令将其删除。
程序如下:
aa = eval(a)aaa = {key:value.split(',') for key, value in aa.items()}import numpy as npq = ['bankuai','板块','公司家数','平均价格','涨跌额','涨跌幅','总成交量(手)','总成交额(万元)','领涨股','涨跌幅()','当前价','涨跌额()','公司名称']df1=pd.DataFrame.from_dict(aaa, orient = 'index',columns= q)df2 = df1.drop('bankuai',axis=1)df2
最后得到结果如下所示:


2、可视化分析
拿到了基础数据之后,我们对其进行排序。首先,我们按照涨跌幅来进行排序,用ascending=False定义为降序排列,并提取出前十名的板块信息。需要注意的是,要想对涨跌幅进行排序,必须保证它的数据是数值形式,用到的命令是pd.to_numeric,如果想要将pd.to_numeric命令应用到多个列,可以使用DataFrame.apply处理。命令如下:
df2.apply(pd.to_numeric, errors='ignore') df3=df2.sort_values(['涨跌幅'],ascending=False)df4=df3.iloc[:10] #取前十行信息df4

最后得到的部分图如下所示。

得到我们需要的表之后,我们就可以画柱状图进行可视化分析。首先引入matplotlib.pyplot,用这个包做基础的分析。

程序如下:

import matplotlib.pyplot as pltdf4=df4.apply(pd.to_numeric, errors='ignore') fig = plt.figure(figsize=(10, 5))plt.rcParams['font.sans-serif'] = ['SimHei'] #帮助识别中文p1=plt.bar(df4['板块'],df4['涨跌幅'], width=0.8, bottom=None, align='center', data=df4,color='gray')plt.plot(df4['板块'],df4['平均价格'],color='gray')plt.title('涨幅最大的概念板块')

得到下图:

从上图可以看到,锂矿概念的平均价格最高,达到40元左右,涨幅前十名的概念板块为互联金融,婴童概念,博彩概念,电商概念,三板精选,信息安全,小米概念,锂矿,百度概念,消费电子。

同样的,按照这种方法,我们可以把总成交额进行排序,保留前十行,然后进行画图。程序如下:

df2=df2.apply(pd.to_numeric, errors='ignore') df5=df2.sort_values(['总成交额(万元)'],ascending=False)#将数据按降序进行排列df6=df5.iloc[:10] #取前十行信息df6fig = plt.figure(figsize=(10, 5))plt.plot(df6['板块'],df6['总成交额(万元)'],color='black')p1=plt.bar(df6['板块'],df6['总成交额(万元)'], width=0.8, bottom=None, align='center', data=df4,color='gray')plt.title('成交额最大的板块')plt.show()

结果如图所示:

如图,成交额最大的概念是基金重仓,保险重仓,含H股,社保重仓,融资融券,锂电池,QFII重仓,券商重仓,光伏,信托重仓。把这两个图结合起来分析可得,锂电池目前是大势所趋,这是因为新能源汽车发展是大势所趋,我国作为全球最大的锂离子电池制造国,随着新能源汽车受到热捧,相关产业规模也不断扩容,行业发展还有较大的空间,未来可期。而光伏行业成交额也巨大,这主要是因为年内光伏板块聚焦技术变革,短期板块估值回归到偏低位置,投资者积极关注光伏概念板块。

End

最后,我们为大家揭秘雪球网(https://xueqiu.com/) 最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码






 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!


往期推文推荐

解放双手!你必须要会的两个命令—inlist & inlist2

【基础篇】字符串之判断方法

Stata绘图系列——让你的直方图随心所欲

【爬虫篇】湖人无缘季后赛,球迷如何回应

客官,要来份四象限图吗?

Python实现简繁体转换

Stata与Python交互方法及数据传递

 “青铜”爬“王者”

 留下想要的变量,你会几种方法?

 Python:朋友圈配图,我承包了

 绘制全国祠堂密度地图

 如何使用Stata绘制一幅好看的柱状图?

【爬虫篇】基于selenium爬取美团评论

 双标的莱万——足球无关政治?!

 Stata处理重复值:duplicates

It's time to send a flower to your lover!        2021各省GDP新鲜出炉

 爬虫实战-采集全国各省疫情数据

 log——为你的操作保驾护航

 一行代码教你玩转emoji

 票房遇冷的春节档口碑冠军丨《狙击手》影评分析

 学习丰县,营造良好营商环境!

 大国丢娃图:从川渝到徐州!

 丰县“失火”,殃及徐州:股市超跌近30亿!

 Unicode转义字符——编码与解码

        徐州!徐州!

        B站弹幕爬虫——冬奥顶流冰墩墩&雪容融

        不会用Stata做描述性统计表?so easy!

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

       登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅

       【基础篇】查找并输出子字符串的定位

        Stata中的小清新命令——添加观测值

        PCA(主成分分析法)降维——Python实现

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存