目录
一、前言
二、代码实现过程
1、导包
2、创建类对象
3、查看数据概况
4、画中国地图
5、画城市柱状图
6、画省份柱状图
7、画城市饼图
8、画省份饼图
9、画可视化大屏
10、定义主方法
11、运行主方法
三、以下是完整代码
1、近几年来,我国一直受着新冠疫情的侵扰,随着每天新冠信息的日夜更迭,我们该如何从新闻中挖掘到有效信息呢?所以大体有2部分,第一是进行数据采集 ,第二是进行数据分析和数据可视化。新冠疫情的数据采集部分已经发了,大家如果不知道,可以点击这个链接,本篇讲述的是如何对新冠疫情数据进行数据分析和数据可视化。可视化大屏效果图如下
2、通过新冠疫情数据采集部分,我们得到了一个名叫COVID_19的csv文件,如下图,这是我们进行数据分析和数据可视化的基础,接下来就是进行数据分析和数据可视化了
# coding=utf-8
import pandas as pd # 用pandas进行数据处理
from pyecharts.charts import Bar,Page,Pie,Map # 画柱状图,可视化大屏,饼图,地图
import pyecharts.options as opts # 设置配置项
from pyecharts.globals import ThemeType # 设置主题
创建对象并构建读取csv文件的全局变量
class Analysis(object):
def __init__(self):
self.data=pd.read_csv('./COVID_19.csv',encoding='gbk') # 读取文件
def data_info(self):
print(self.data) # 查看数据
print(self.data.info()) # 查看数据概况
print(self.data.describe()) # 查看数据描述
运行结果如图
def china_map(self):
total_number=self.data['本土确诊']+self.data['本土无症状'] # 总感染者数量
print(total_number)
data=self.data['日期'].tolist() # 转换为python的列表
map_=(
Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=1)) # 设置主题和id
.add("感染人数", [list(z) for z in zip(self.data['城市'].tolist(),total_number.tolist())], "china-cities")
.set_global_opts(
title_opts=opts.TitleOpts(title="中国地区疫情严重程度",subtitle='更新时间:{0}'.format(data[0])), # 设置标题
visualmap_opts=opts.VisualMapOpts(max_=9000,is_piecewise=True), # 配置视觉映射,最大值为7000000
toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 取消标签配置项
# .render('地图.html')
)
return map_
def city_bar(self):
number_of_confirmed_each_city=self.data[['城市','本土确诊']].nlargest(10,'本土确诊') # 本土确诊数量前10的城市
number_of_asymptomatic_each_city=self.data[['城市','本土无症状']].nlargest(10,'本土无症状') # 本土无症状数量前10的城市
data=self.data['日期'].tolist() # 转换为python的列表
bar=(
Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=2)) # 设置主题和id
.add_xaxis(number_of_asymptomatic_each_city['城市'].tolist())
.add_yaxis('本土无症状数量',number_of_asymptomatic_each_city['本土无症状'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='yellow')) # 设置柱状颜色
.add_yaxis('本土确诊数量',number_of_confirmed_each_city['本土确诊'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='#00BFFF')) # 设置柱状颜色
.set_global_opts(title_opts=opts.TitleOpts(title='各城市的无症状和确诊人数',
title_link='https://blog.csdn.net/hhq2002322/article/details/128064525?spm=1001.2014.3001.5502'
,subtitle='更新时间:{0}'.format(data[0])), # 设置标题,标题链接,和副标题
toolbox_opts=opts.ToolboxOpts(is_show=True), # 设置工具箱
datazoom_opts=[opts.DataZoomOpts(is_show=True),opts.DataZoomOpts(type_='inside')]) # 设置区域缩放条
# .render('柱状图1.html')
)
return bar
def provinces_bar(self):
data2 = self.data[['所属省份', '本土确诊']].groupby(['所属省份'])[['本土确诊']].sum() # 各省份本土确诊数量总和
data3 = self.data[['所属省份', '本土无症状']].groupby(['所属省份'])[['本土无症状']].sum() # 各省份本土无症状数量总和
data=self.data['日期'].tolist() # 转换为python的列表
bar=(
Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=3)) # 设置主题和id
.add_xaxis(data2.index.tolist())
.add_yaxis('本土无症状数量',data3['本土无症状'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='yellow')) # 设置柱状颜色
.add_yaxis('本土确诊数量',data2['本土确诊'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='#00BFFF')) # 设置柱状颜色
.set_global_opts(title_opts=opts.TitleOpts(title='各省份无症状和确诊人数',
title_link='https://blog.csdn.net/hhq2002322/article/details/128064525?spm=1001.2014.3001.5502'
,subtitle='更新时间:{0}'.format(data[0])), # 设置标题,标题链接,和副标题
toolbox_opts=opts.ToolboxOpts(is_show=True), # 设置工具箱
datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')]) # 设置区域缩放条
# .render('柱状图2.html')
)
return bar
def city_pie(self):
High_risk_city_areas = self.data[['城市', '高风险地区']].nlargest(5, '高风险地区') # 高风险地区数量前10的城市
pie=(
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=4)) # 设置主题和id
.add('高风险地区数量', [list(z) for z in zip(High_risk_city_areas['城市'],High_risk_city_areas['高风险地区'])],
center=["35%", "50%"])
.set_global_opts(title_opts=opts.TitleOpts(title='高风险地区数量前10的城市',
title_link='https://blog.csdn.net/hhq2002322/article/details/127867991',
pos_left='40%'), # 设置标题,标题链接,和标题的位置
legend_opts=opts.LegendOpts(pos_left="80%",type_="scroll",orient="vertical")) # 设置图例的位置
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置返回的提示框内容
# .render('饼图1.html')
)
return pie
def provinces_pie(self):
data1=self.data[['所属省份','高风险地区']].groupby(['所属省份'])[['高风险地区']].sum() # 各省份高风险地区数量总和
High_risk_provinces_areas=data1.nlargest(5,'高风险地区') # 高风险地区数量前10的省份
pie=(
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=5)) # 设置主题和id
.add('高风险地区数量', [list(z) for z in zip(High_risk_provinces_areas.index,High_risk_provinces_areas['高风险地区'])],
center=["35%", "50%"])
.set_global_opts(title_opts=opts.TitleOpts(title='高风险地区数量前10的省份',
title_link='https://blog.csdn.net/hhq2002322/article/details/127867991',
pos_left='40%'), # 设置标题,标题链接,和标题的位置
legend_opts=opts.LegendOpts(pos_left="80%",type_="scroll",orient="vertical")) # 设置图例的位置
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置返回的提示框内容
# .render('饼图2.html')
)
def page(self):
c=(
Page(layout=Page.DraggablePageLayout) # 可以自定义布局
.add(
self.china_map(),
self.city_bar(),
self.provinces_bar(),
self.city_pie(),
self.provinces_pie(),
)
.render()
) # 调用以上的功能图函数
Page.save_resize_html('render.html',
cfg_file='./chart_config.json', # 调整布局后生成的json文件
dest='组合图.html') # 根据调整后的布局生成的组合图
def run(self):
self.data_info() # 运行数据概况函数
self.page() # 运行可视化大屏函数
if __name__ == '__main__':
analysis=Analysis() # 创建实例对象
analysis.run() # 运行主函数
目录中生成了名叫组合图的html文件,打开浏览器运行
# coding=utf-8
import pandas as pd # 用pandas进行数据处理
from pyecharts.charts import Bar,Page,Pie,Map # 画柱状图,可视化大屏,饼图,地图
import pyecharts.options as opts # 设置配置项
from pyecharts.globals import ThemeType # 设置主题
class Analysis(object):
def __init__(self):
self.data=pd.read_csv('./COVID_19.csv',encoding='gbk') # 读取文件
def data_info(self):
print(self.data) # 查看数据
print(self.data.info()) # 查看数据概况
print(self.data.describe()) # 查看数据描述
def china_map(self):
total_number=self.data['本土确诊']+self.data['本土无症状'] # 总感染者数量
print(total_number)
data=self.data['日期'].tolist() # 转换为python的列表
map_=(
Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=1)) # 设置主题和id
.add("感染人数", [list(z) for z in zip(self.data['城市'].tolist(),total_number.tolist())], "china-cities")
.set_global_opts(
title_opts=opts.TitleOpts(title="中国地区疫情严重程度",subtitle='更新时间:{0}'.format(data[0])), # 设置标题
visualmap_opts=opts.VisualMapOpts(max_=9000,is_piecewise=True), # 配置视觉映射,最大值为7000000
toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 取消标签配置项
# .render('地图.html')
)
return map_
def city_bar(self):
number_of_confirmed_each_city=self.data[['城市','本土确诊']].nlargest(10,'本土确诊') # 本土确诊数量前10的城市
number_of_asymptomatic_each_city=self.data[['城市','本土无症状']].nlargest(10,'本土无症状') # 本土无症状数量前10的城市
data=self.data['日期'].tolist() # 转换为python的列表
bar=(
Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=2)) # 设置主题和id
.add_xaxis(number_of_asymptomatic_each_city['城市'].tolist())
.add_yaxis('本土无症状数量',number_of_asymptomatic_each_city['本土无症状'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='yellow')) # 设置柱状颜色
.add_yaxis('本土确诊数量',number_of_confirmed_each_city['本土确诊'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='#00BFFF')) # 设置柱状颜色
.set_global_opts(title_opts=opts.TitleOpts(title='各城市的无症状和确诊人数',
title_link='https://blog.csdn.net/hhq2002322/article/details/128064525?spm=1001.2014.3001.5502'
,subtitle='更新时间:{0}'.format(data[0])), # 设置标题,标题链接,和副标题
toolbox_opts=opts.ToolboxOpts(is_show=True), # 设置工具箱
datazoom_opts=[opts.DataZoomOpts(is_show=True),opts.DataZoomOpts(type_='inside')]) # 设置区域缩放条
# .render('柱状图1.html')
)
return bar
def provinces_bar(self):
data2 = self.data[['所属省份', '本土确诊']].groupby(['所属省份'])[['本土确诊']].sum() # 各省份本土确诊数量总和
data3 = self.data[['所属省份', '本土无症状']].groupby(['所属省份'])[['本土无症状']].sum() # 各省份本土无症状数量总和
data=self.data['日期'].tolist() # 转换为python的列表
bar=(
Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=3)) # 设置主题和id
.add_xaxis(data2.index.tolist())
.add_yaxis('本土无症状数量',data3['本土无症状'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='yellow')) # 设置柱状颜色
.add_yaxis('本土确诊数量',data2['本土确诊'].tolist(),
itemstyle_opts=opts.ItemStyleOpts(color='#00BFFF')) # 设置柱状颜色
.set_global_opts(title_opts=opts.TitleOpts(title='各省份无症状和确诊人数',
title_link='https://blog.csdn.net/hhq2002322/article/details/128064525?spm=1001.2014.3001.5502'
,subtitle='更新时间:{0}'.format(data[0])), # 设置标题,标题链接,和副标题
toolbox_opts=opts.ToolboxOpts(is_show=True), # 设置工具箱
datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')]) # 设置区域缩放条
# .render('柱状图2.html')
)
return bar
def city_pie(self):
High_risk_city_areas = self.data[['城市', '高风险地区']].nlargest(5, '高风险地区') # 高风险地区数量前10的城市
pie=(
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=4)) # 设置主题和id
.add('高风险地区数量', [list(z) for z in zip(High_risk_city_areas['城市'],High_risk_city_areas['高风险地区'])],
center=["35%", "50%"])
.set_global_opts(title_opts=opts.TitleOpts(title='高风险地区数量前10的城市',
title_link='https://blog.csdn.net/hhq2002322/article/details/127867991',
pos_left='40%'), # 设置标题,标题链接,和标题的位置
legend_opts=opts.LegendOpts(pos_left="80%",type_="scroll",orient="vertical")) # 设置图例的位置
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置返回的提示框内容
# .render('饼图1.html')
)
return pie
def provinces_pie(self):
data1=self.data[['所属省份','高风险地区']].groupby(['所属省份'])[['高风险地区']].sum() # 各省份高风险地区数量总和
High_risk_provinces_areas=data1.nlargest(5,'高风险地区') # 高风险地区数量前10的省份
pie=(
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK,chart_id=5)) # 设置主题和id
.add('高风险地区数量', [list(z) for z in zip(High_risk_provinces_areas.index,High_risk_provinces_areas['高风险地区'])],
center=["35%", "50%"])
.set_global_opts(title_opts=opts.TitleOpts(title='高风险地区数量前10的省份',
title_link='https://blog.csdn.net/hhq2002322/article/details/127867991',
pos_left='40%'), # 设置标题,标题链接,和标题的位置
legend_opts=opts.LegendOpts(pos_left="80%",type_="scroll",orient="vertical")) # 设置图例的位置
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置返回的提示框内容
# .render('饼图2.html')
)
return pie
def page(self):
c=(
Page(layout=Page.DraggablePageLayout) # 可以自定义布局
.add(
self.china_map(),
self.city_bar(),
self.provinces_bar(),
self.city_pie(),
self.provinces_pie(),
)
.render()
) # 调用以上的功能图函数
Page.save_resize_html('render.html',
cfg_file='./chart_config.json', # 调整布局后生成的json文件
dest='组合图.html') # 根据调整后的布局生成的组合图
def run(self):
self.data_info() # 运行数据概况函数
self.page() # 运行可视化大屏函数
if __name__ == '__main__':
analysis=Analysis() # 创建实例对象
analysis.run() # 运行主函数