
基于python爬虫的疫情数据大屏可视化
借助网络爬虫技术和 echarts技术,在通过爬虫从网上获取到每日疫情的各项权威数据后,清洗、转化和挖掘后通过echarts整理成各种可视化统计图,这些可视化统计图包括至今国内的疫情图,国内各项疫情数据情况统计图,以及每日热点城市图等以多种多样的可视化形式呈现在人们面前,通过疫情可视化页面,使人们能快速直观的了解现在的疫情发展情况以及每日疫情感染人数的增长和治愈及死亡情况。通过可视化系统及时准确评
目录
- 项目(系统)概述 1
1.1需求分析 1
1.2功能描述 1 - 项目(系统)总体设计 2
- 项目(系统)详细设计和实现 3
3.1关键数据库物理设计 3
3.2系统实现 4
3.2.1系统主界面 4
3.2.2疫情地图 4
3.2.3折线统计图 5
3.2.4柱状图 6
3.2.5疫情饼图 8
3.2.6疫情词云 8
3.3系统连接 9
毕业设计总结 11
参考文献 12
项目(系统)设计说明
1.项目(系统)概述
1.1需求分析
目前国内疫情得到基本控制,现如今国内社会情况相对稳定,人们对疫情情况还是非常关注。大数据背景下,网络时刻产生海量疫情方面数据,这些数据只有被合理解读与展示,民众才能更好了解其中奥秘。
随着发展我们进入了后疫情时代。后疫情时代,疫情数据仍是民众关注的重点,而随之涌现出的大量可视化图表、数据分析平台,及时地向公众传达着疫情的数量信息和时空分布及变化,能够帮助大众快速了解疫情当前状况、推断发展趋势。
借助网络爬虫技术和 echarts技术,在通过爬虫从网上获取到每日疫情的各项权威数据后,清洗、转化和挖掘后通过echarts整理成各种可视化统计图,这些可视化统计图包括至今国内的疫情图,国内各项疫情数据情况统计图,以及每日热点城市图等以多种多样的可视化形式呈现在人们面前,通过疫情可视化页面,使人们能快速直观的了解现在的疫情发展情况以及每日疫情感染人数的增长和治愈及死亡情况。通过可视化系统及时准确评估疫情传播、根据每日疫情情况了解疫情过去的情况,分析疫情发展趋势对于政府制定防控措施有着重要意义。
尤其是政府疾控应急指挥中心、医院应急指挥中心等更少不了疫情分析大屏。可快速将各类信息、图像数据、战略部署及现场疫情情况更可观呈现,为科学决策提供海量信息与精准数据,成为提升战疫行动效率的加速器。
1.2功能描述
疫情可视化大屏主要功能有:可以有效支持科学判断、加速信息的有效传递、加快相关部门指令执行等,以下是功能的详细描述。
1.有效支持科学判断
大数据可视化将大量的数据信息以生动形象的展示方式呈现在我们面前,在经过整体的数据汇总分析之后,大众能快速从大数据展示中得出初步判断,为决策者加快处理速度提供了数据支撑。各级政府通过及时发布防疫措施,将疫情的传播速度、传播范围控制到最小,精准有力地织牢疫情防控网。
from pyecharts.charts import Map, Line, Page, WordCloud, Tab ,Bar, Pie
from pyecharts import options as opts
from pyecharts.options import LabelOpts
import BSHE.covid_china as db
import pandas
nultraman = (['承德市', 0],['唐山市',0],['邯郸市', 0],['石家庄市', 0],['张家口市', 0],['秦皇岛市', 0],['保定市', 0],['邢台市',1],['廊坊市',3],['衡水市',0],['沧州市',1])
# 中国地图
map_china = (
Map(init_opts=opts.InitOpts(
width="600px",
height="450px",
))
.add(
series_name='今日新增',
data_pair=list(db.get_data_china()),
maptype='china',
is_map_symbol_show=False,
)
# 全局配置项
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="全国疫情可视化",pos_right="40%",
title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=30)),
legend_opts=opts.LegendOpts(
pos_top="7%",is_show=False,
),
# 设置标准显示
visualmap_opts=opts.VisualMapOpts(max_=150, min_=0, is_piecewise=True, split_number=5
,pos_left="15%",pos_top="70%")
)
# 系列配置项
.set_series_opts(
# 标签名称显示
label_opts=opts.LabelOpts(is_show=True, color='black')
)
)
# 河北省地图
map_hebei=( # 大小设置
Map()
.add(
series_name="今日疫情新增",
data_pair=nultraman,
maptype="河北",
)
# 全局配置项
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="河北省"),
# 设置标准显示
visualmap_opts=opts.VisualMapOpts(max_=50, is_piecewise=True,split_number=5),
)
# 系列配置项
.set_series_opts(
# 标签名称显示,默认为True
label_opts=opts.LabelOpts(is_show=True, color="black")
)
# 生成本地html文件
)
data_details = pandas.read_csv('中国疫情发展趋势.csv')
data_x = data_details['0'].tolist()
data_y2 = data_details['2'].tolist()
data_y1 = data_details['1'].tolist()
# 全国今日折线图
line_details=(
# 实例化一个Line对象
Line()
# 添加x轴数据
.add_xaxis(data_x)
# 添加y轴数据,series_name表示列名
.add_yaxis("每日新增",data_y2,color='#ef5b9c',
markline_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"),opts.MarkPointItem(type_="min")],
label_opts = LabelOpts(position="inside",color="black")))
# set_global_opts用来设置全局配置项
.set_global_opts(
# TitleOpts:标题配置项
# title_opts=opts.TitleOpts(
# title="全国疫情发展趋势",
# title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=18)
# )
)
# set_series_opts用来设置系列配置项
.set_series_opts(
##label_opts可以在系列配置项中设置,也可以在add_yaxis中设置
label_opts=opts.LabelOpts(is_show=False)
)
)
# 全国历史折线图
line_history=(
# 实例化一个Line对象
Line(init_opts=opts.InitOpts(
width="600px",
height="450px"
))
# 添加x轴数据
.add_xaxis(data_x)
# 添加y轴数据,series_name表示列名
.add_yaxis("累计确诊(人)",data_y1,is_smooth=True,color='#ef5b9c',
# markpoint_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="max"),opts.MarkLineItem(type_="min")]),
linestyle_opts=opts.LineStyleOpts(color='#000',opacity=1)
)
# set_global_opts用来设置全局配置项
.set_global_opts(
# TitleOpts:标题配置项
# title_opts=opts.TitleOpts(
# title="全国疫情发展趋势",
# title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=18)
# )
)
# set_series_opts用来设置系列配置项
.set_series_opts(
##label_opts可以在系列配置项中设置,也可以在add_yaxis中设置
label_opts=opts.LabelOpts(is_show=False,font_size=0.5)
)
)
bar_history =(
Bar()
.add_xaxis(data_x)
.add_yaxis("累计新增",data_y1,color='#ef5b9c')
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='max',name='最大值'),
opts.MarkLineItem(type_='min',name='最小值')
]
)
)
)
bar_details =(
Bar(init_opts=opts.InitOpts(
width="600px",
height="450px"
))
.add_xaxis(data_x)
.add_yaxis("今日新增(人)",data_y2,color='#ef5b9c')
# .set_global_opts(
# title_opts=opts.TitleOpts(
# title="全国疫情发展趋势",
# title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=18)
# ))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='max',name='最大值'),
opts.MarkLineItem(type_='min',name='最小值')
]
)
)
)
data_details = pandas.read_csv('中国地图数据.csv')
datax = data_details['0'].tolist()
datay = data_details['1'].tolist()
bar_china =(
Bar(init_opts=opts.InitOpts(
width="600px",
height="450px"
))
.add_xaxis(datax)
.add_yaxis("今日新增",datay,color='#ef5b9c')
)
data_city= pandas.read_csv('北京饼图数据.csv')
city1 = data_city['0'].tolist()
city2 = data_city['1'].tolist()
pie_beijing = (
Pie(init_opts=opts.InitOpts(
width="600px",
height="450px"
))
.add("",[list(z) for z in zip(city1,city2)]
,label_opts=opts.LabelOpts(
is_show=True,
formatter="{b}:{c}人",)
)
.set_global_opts(
#title_opts=opts.TitleOpts(title="北京市今日新增"),
legend_opts=opts.LegendOpts(is_show=False)
)
)
words = (WordCloud(init_opts=opts.InitOpts(width='600px',height='450px')).add("",list(db.get_data_words()),word_size_range=[20,100]))
tab = (Tab(page_title="Tables")
.add(map_china,"中国地图")
.add(map_hebei,"河北省地图")
.add(line_history,"历史折线图")
.add(line_details,"今日折线图")
.add(bar_details,"今日条形图")
.add(words,"词云")
.add(pie_beijing,"北京市饼图")
)
tab.render("YYL的Tables.html")
page = (Page(layout=Page.DraggablePageLayout, page_title="基于Pyecharts的全国疫情数据大屏")
.add(map_china)
.add(pie_beijing)
.add(line_history)
.add(bar_details)
.add(words)
)
page.render("全国疫情数据大屏.html")
page.save_resize_html("全国疫情数据大屏.html",cfg_file='chart_config.json',dest="YYL的全国疫情数据大屏.html")
更多推荐
所有评论(0)