简单几行代码实现全国疫情数据可视化(Python课程设计)
Posted su Konoha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单几行代码实现全国疫情数据可视化(Python课程设计)相关的知识,希望对你有一定的参考价值。
不知不觉疫情已经快要才出现三年了,对于疫情管控,我国有一系列良好的措施。下面我们通过python对疫情数据进行一个简单的爬取整理以及可视化。
#导入模块
import pandas as pd
import requests
#首先这是爬取数据和整理数据我们需要用到的第三方库,疫情数据来自腾讯新闻#实时更新:新冠肺炎疫情最新动态https://news.qq.com/zt2020/page/feiyan.htm#/
https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/listmodules=localCityNCOVDataList,diseaseh5Shelf
#这里已经通过抓包工具获取了所需数据(国内疫情数据)链接,可以直接复制使用的
url='https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/listmodules=localCityNCOVDataList,diseaseh5Shelf'
#模拟浏览器发送请求并接收响应
resp = requests.get(url)
#json类型转换,并获取data数据
json_data = resp.json()['data']
#json_data #查看此时数据
#数据已经爬出来了,我们需要把有用的数据提取出出来,首先要做的就是新建一个列表啦,把提取的数据都存入列表最后转化为dataframe格式,保存为csv文件就可以轻松查看每天疫情实时数据了
china_data = json_data['diseaseh5Shelf']['areaTree'][0]['children']
data_set = []
#提取每个省份的数据
for i in china_data:
#空字典
data_dict =
#省份名称
data_dict['province'] = i['name']
#新增确诊
data_dict['nowConfirm'] = i['total']['nowConfirm']
#累计确诊
data_dict['confirm'] = i['total']['confirm']
#死亡人数
data_dict['dead'] = i['total']['dead']
#治愈人数
data_dict['heal'] = i['total']['heal']
#添加字典进空列表
data_set.append(data_dict)
#转化为dataframe格式
df = pd.DataFrame(data_set)
df #查看此时表格数据
#保存数据为csv格式,编码用gbk
df.to_csv('疫情数据.csv', encoding='gbk')
数据可视乎所需要的数据就已经整出来咯,有一点特别要注意的是编码一定要用GBK,不然默认是utf8打开csv就是乱码了!!!!
下面进行数据可视化,相比于matplotlib个人还是比较喜欢pyecharts,虽然比较复杂一嘞嘞,但是确实图标颜值高很多嗷。
#首先也是导入画图需要的第三方库(Python太太太太太强大了,他拥有的远不止你看到的!!)
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Page
第一个图,各地区累计确诊人数与死亡人数情况柱状图
bar = (
Bar(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink')) #画板大小以及颜色,这里简单的用一个粉色吧
.add_xaxis(list(df['province'].values)) #添加x轴数据各省份名
.add_yaxis("死亡",df['dead'].values.tolist()) #添加y轴数据死亡人数
.add_yaxis("累计确诊",df['confirm'].values.tolist()) #添加y轴数据累计确诊人数
.set_global_opts( #设置标题
title_opts=opts.TitleOpts(title='各地区累计确诊人数与死亡人数情况',subtitle='制作人:konoha'),
datazoom_opts=[opts.DataZoomOpts(type_="slider")],
yaxis_opts=opts.AxisOpts(name="人数"),
xaxis_opts=opts.AxisOpts(name="省份")
)
)
bar.render_notebook()
第二个图,全国各地区现有确诊人数地图
china_map = (
Map(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add("现有确诊", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())],"china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地区现有确诊人数",subtitle='制作人:konoha'),
visualmap_opts=opts.VisualMapOpts(max_=300,is_piecewise=False,is_show=True),
legend_opts=opts.LegendOpts(pos_left="90%",pos_top="60%"),
)
)
china_map.render_notebook()
第三个图,各地区现有确诊人数饼图
datas = list(zip(
df["province"].values.tolist(),
df["nowConfirm"].values.tolist()
))
pie = (
Pie(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add("",datas,radius = ["15%","35%"])
.set_global_opts(
title_opts=opts.TitleOpts(title="各地区现有确诊人数",subtitle='制作人:konoha',pos_top="90%",pos_left="5%"),
legend_opts = opts.LegendOpts(pos_left = '90%',pos_bottom = 'bottom',item_height = 5,item_width = 5)
)
.set_series_opts(label_opts=opts.LabelOpts(font_size =9))
)
datas
pie.render_notebook()
从图还是可以看出湾湾和大陆的区别哈
第四个图,各地区现有确诊人数折线图
line = (
Line(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add_xaxis(list(df['province'].values))
.add_yaxis("现有确诊",df['nowConfirm'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区现有确诊人数',subtitle='制作人:konoha'),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
datazoom_opts=[opts.DataZoomOpts()]
)
)
line.render_notebook()
pyecharts的基本图表绘制大概就是这样啦,其中有一些配置项很实用,需要更多了解就去官网看看吧:pyecharts - A Python Echarts Plotting Library built with love.Descriptionhttps://pyecharts.org/#/zh-cn/intro
最后要是不嫌麻烦也可以把四张图都放在同一个画布下面:
page = Page(layout = Page.SimplePageLayout)
page = Page(page_title = 'konoha', layout = Page.DraggablePageLayout)
page.add(bar,china_map,pie,line)
page.render('page.html')
#保存html文件并打开,调整图片位置,查看更加方便直观,并且保存下载chart_config.json文件
Page.save_resize_html("page.html", cfg_file = "chart_config.json", dest = "new_page.html")
#保存已经调整好图片位置的html文件,可直接浏览器打开查看。
最后的最后突然觉得自己画的好丑,555555
下面是完整代码:
#导入模块
import pandas as pd
import requests
#用抓包工具提取所需数据链接 https://news.qq.com/zt2020/page/feiyan.htm#/
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=localCityNCOVDataList,diseaseh5Shelf'
#模拟浏览器发送请求并接收响应
resp = requests.get(url)
#json类型转换,并获取data数据
json_data = resp.json()['data']
#json_data #查看此时数据
#列表,查找关键词中国
china_data = json_data['diseaseh5Shelf']['areaTree'][0]['children']
data_set = []
#提取每个省份的数据
for i in china_data:
#空字典
data_dict =
#省份名称
data_dict['province'] = i['name']
#新增确诊
data_dict['nowConfirm'] = i['total']['nowConfirm']
#累计确诊
data_dict['confirm'] = i['total']['confirm']
#死亡人数
data_dict['dead'] = i['total']['dead']
#治愈人数
data_dict['heal'] = i['total']['heal']
#添加字典进空列表
data_set.append(data_dict)
#转化为dataframe格式
df = pd.DataFrame(data_set)
#df #查看此时表格数据
# #保存数据为csv格式,编码用gbk
df.to_csv('疫情数据.csv', encoding='gbk')
#导入数据可视化工具
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Grid,Map,Page
bar = (
Bar(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add_xaxis(list(df['province'].values)) #添加x轴数据各省份名
.add_yaxis("死亡",df['dead'].values.tolist()) #添加y轴数据死亡人数
.add_yaxis("累计确诊",df['confirm'].values.tolist()) #添加y轴数据累计确诊人数
.set_global_opts( #设置标题
title_opts=opts.TitleOpts(title='各地区累计确诊人数与死亡人数情况',subtitle='制作人:konoha'),
datazoom_opts=[opts.DataZoomOpts(type_="slider")],
yaxis_opts=opts.AxisOpts(name="人数"),
xaxis_opts=opts.AxisOpts(name="省份")
)
)
bar.render_notebook()
china_map = (
Map(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add("现有确诊", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())],"china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地区现有确诊人数",subtitle='制作人:konoha'),
visualmap_opts=opts.VisualMapOpts(max_=300,is_piecewise=False,is_show=True),
legend_opts=opts.LegendOpts(pos_left="90%",pos_top="60%"),
)
)
china_map.render_notebook()
datas = list(zip(
df["province"].values.tolist(),
df["nowConfirm"].values.tolist()
))
pie = (
Pie(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add("",datas,radius = ["15%","35%"])
.set_global_opts(
title_opts=opts.TitleOpts(title="各地区现有确诊人数",subtitle='制作人:konoha',pos_top="90%",pos_left="5%"),
legend_opts = opts.LegendOpts(pos_left = '90%',pos_bottom = 'bottom',item_height = 5,item_width = 5)
)
.set_series_opts(label_opts=opts.LabelOpts(font_size =9))
)
datas
pie.render_notebook()
line = (
Line(init_opts=opts.InitOpts(width="980px",height="500px",bg_color='pink'))
.add_xaxis(list(df['province'].values))
.add_yaxis("现有确诊",df['nowConfirm'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区现有确诊人数',subtitle='制作人:konoha'),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
datazoom_opts=[opts.DataZoomOpts()]
)
)
line.render_notebook()
page = Page(layout = Page.SimplePageLayout)
page = Page(page_title = '曾安鑫', layout = Page.DraggablePageLayout)
page.add(bar,china_map,pie,line)
page.render('page.html')
Page.save_resize_html("page.html", cfg_file = "chart_config.json", dest = "new_page.html")
以上是关于简单几行代码实现全国疫情数据可视化(Python课程设计)的主要内容,如果未能解决你的问题,请参考以下文章
用python爬取全国和全球疫情数据,并进行可视化分析(过程详细代码可运行)