-
本篇文章将分享腾讯疫情实时数据抓取,获取全国各地和贵州省各地区的实时数据,并将数据存储至本地,最后调用Maplotlib和Seaborn绘制中国各地区、贵州省各城市、新增人数的图形。希望这篇数据可视化分析文章对您有所帮助!
01
Python实时数据爬取
我们的目标网站是腾讯新闻网实时数据,其原理主要是通过Requests获取Json请求,从而得到各省、各市的疫情数据。
爬虫目标网站:
https://news.qq.com/zt2020/page/feiyan.htm
1. 分析网站
通过浏览器“审查元素”查看源代码及“网络”反馈的消息,如下图所示:
对应的响应信息如下所示:
2. 发送请求并获取Json数据
通过分析url地址、请求方法、参数及响应格式,可以获取Json数据,注意url需要增加一个时间戳。下面代码展示了获取数据的键值及34个省份。
输出结果如下图所示,其顺序按照确诊人数排序。
3. 获取湖北省疫情数据
接着通过 num[0][‘children’] 获取湖北省的疫情数据,代码如下:
同样的方法可以获取各省份的数据,比如 num[1][‘children’] 表示广东省疫情数据,我们设置循环就能获取所有数据。其数据包括当日数据(today)和累计数据(total),confirm表示确诊、suspect表示疑似、dead表示死亡、heal表示治愈。
我们将所抓取的数据和真实的数据进行对比,武汉截止2月13日下午4点,新增确诊人数13436、累计确诊32994,发现是完全一致的。
4. 获取各省确诊人数
注意,初始化每个省份人数为0,然后循环累加该省所有城市的确诊人数,调用 city_data[‘total’][‘confirm’] 获取各城市的确诊数据。
输出结果如下图所示:
接下来我们分享可视化画图。
02
Matplotlib绘制柱状图
首先,我们调用Matplotlib绘制全国各地区的确诊人数柱状图,帮助大家回忆其基本用法。total_data为字典变量键值对,比如{‘湖北’: 48206, ‘广东’: 1241,…}
代码过长仅展示部分,完整代码请添加客服领取
输出结果如下图所示:
那么,如果我想获取累计确诊人数、新增确诊人数、死亡人数和治愈人数,并进行可视化展示,怎么办呢?只需要简单替换参数即可。
city_data[‘total’][‘confirm’] 确诊人数
city_data[‘total’][‘suspect’] 疑似人数
city_data[‘total’][‘dead’] 死亡人数
city_data[‘total’][‘heal’] 治愈人数
city_data[‘today’][‘confirm’] 新增确诊人数
代码过长仅展示部分,完整代码请添加客服领取
输出如下图所示,但是Matplotlib画图不太美观,接下来分享Seaborn可视化。
03
数据存储及Seaborn绘制柱状图
Seaborn是在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。
安装:pip install seaborn
1. 文件写入
代码过长仅展示部分,完整代码请添加客服领取
存储成功之后,如下图所示。
对应腾讯的数据,如下图所示:
2. Seaborn绘制柱状图
代码过长仅展示部分,完整代码请添加客服领取
显示结果如下图所示:
04
Seaborn绘制对比柱状图
如果需要显示多个数据对比,则需要使用下面的代码。由于Seaborn能够进行按类别分组绘图,我们需要将抓取的数据存储为如下图所示的文件,才能将数据绘制在同一张图中。
代码过长仅展示部分,完整代码请添加客服领取
此时绘制如下图所示:
但是当数据很小时,其柱状图无法很好地显示,建议采用以下方法处理:
归一化处理
湖北省外和湖北省内对比
替换成新增确诊病例的对比图如下所示。
05
Seaborn绘制趋势图及对比图
1. 湖北省内外对比图
在做数据分析过程中,我们通常需要对数据进行预处理或加工,下面将数据划分为湖北省内和湖北省外,再绘制对应的对比图。
输出结果如下图所示:
2. 疫情趋势图
代码过长仅展示部分,完整代码请添加客服领取
输出结果如下图所示,疑似人数开始下降。武汉加油,中国必胜!
06
Seaborn绘制其他图形及分析
作者这里仅补充绘图语法,更多分析结果(死亡数-治愈数)请读者进行。同时,读者可以增加数据量,全国所有城市的数据,可能绘制的图形更为丰满。
1. KDE图
sns.jointplot(x=“dead”, y=“heal”, data=data, kind=“kde”, space=0, color="#6AB27B")
代码过长仅展示部分,完整代码请添加客服领取
显示如下图所示:
2. 六角形
sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, kind=‘hex’)
3. 散点图
sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, s=50, kind=‘scatter’, space = 0.1, size = 8, ratio = 5)
4. 回归图
sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, kind=‘reg’)
5. 散点图+KDE 图
g = (sns.jointplot(x=“dead”, y=“heal”, data=data, color=“k”).plot_joint(sns.kdeplot, zorder=0, n_levels=6))
07
贵州省可视化分析
接着我们抓取某一个省的数据,比如贵州省。
输出结果如下图所示:
添加解析数据和存储文件,完整代码如下:
代码过长仅展示部分,完整代码请添加客服领取
完整输出内容如下所示:
最后采用Seaborn绘制图形如下所示:
代码过长仅展示部分,完整代码请添加客服领取
贵州省2月13日疫情显示结果如下所示:
参考文章:
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
用Python抓新型冠状病毒肺炎疫情数据,绘制全国疫情分布图
2020Python开发者日:爬虫框架的技术实现与模块应用的经验分享
End.
作者:Eastmount
来源:CSDN
https://blog.csdn.net/Eastmount/article/details/104298388
本文为转载分享,如侵权请联系后台删除
零基础学 Python,请往看下嘛
只需7天时间,跨进Python编程大门,已有3800+加入
【基础】0基础入门python,24小时有人快速解答问题;
【提高】40多个项目实战,老手可以从真实场景中学习python;
【直播】不定期直播项目案例讲解,手把手教你如何分析项目;
【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。
【人脉】收获一群志同道合的朋友,并且都是python从业者
【价格】本着布道思想,只需 69元 加入一个能保证学习效果的良心圈子。
【赠予】价值109元 0基础入门在线课程,免费送给圈友们,供巩固