疫情"/>
Pyecharts可视化全国新冠疫情
目录
一、前言
二、代码实现过程
1、导包
2、创建类对象
3、查看数据概况
4、画中国地图
5、画城市柱状图
6、画省份柱状图
7、画城市饼图
8、画省份饼图
9、画可视化大屏
10、定义主方法
11、运行主方法
三、以下是完整代码
pyecharts官网:
一、前言
1、近几年来,我国一直受着新冠疫情的侵扰,随着每天新冠信息的日夜更迭,我们该如何从新闻中挖掘到有效信息呢?所以大体有2部分,第一是进行数据采集 ,第二是进行数据分析和数据可视化。新冠疫情的数据采集部分已经发了,大家如果不知道,可以点击这个链接,本篇讲述的是如何对新冠疫情数据进行数据分析和数据可视化。可视化大屏效果图如下
2、通过新冠疫情数据采集部分,我们得到了一个名叫COVID_19的csv文件,如下图,这是我们进行数据分析和数据可视化的基础,接下来就是进行数据分析和数据可视化了
二、代码实现过程
1、导包
# 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 # 设置主题
2、创建类对象
创建对象并构建读取csv文件的全局变量
class Analysis(object):def __init__(self):self.data=pd.read_csv('./COVID_19.csv',encoding='gbk') # 读取文件
3、查看数据概况
def data_info(self):print(self.data) # 查看数据print(self.data.info()) # 查看数据概况print(self.data.describe()) # 查看数据描述
运行结果如图
4、画中国地图
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), # 配置视觉映射,最大值为7000000toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱).set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 取消标签配置项# .render('地图.html'))return map_
5、画城市柱状图
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='=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
6、画省份柱状图
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='=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
7、画城市饼图
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='',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
8、画省份饼图
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='',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'))
9、画可视化大屏
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') # 根据调整后的布局生成的组合图
10、定义主方法
def run(self):self.data_info() # 运行数据概况函数self.page() # 运行可视化大屏函数
11、运行主方法
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), # 配置视觉映射,最大值为7000000toolbox_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='=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 bardef 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='=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 bardef 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='',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 piedef 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='',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 piedef 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() # 运行主函数
更多推荐
Pyecharts可视化全国新冠疫情
发布评论