0


Pyecharts可视化全国新冠疫情

pyecharts官网:https://pyecharts.org/#/zh-cn/intro

一、前言

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),  # 配置视觉映射,最大值为7000000
                toolbox_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='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

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='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

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='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

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='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')
        )

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),  # 配置视觉映射,最大值为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()  # 运行主函数

本文转载自: https://blog.csdn.net/hhq2002322/article/details/128110227
版权归原作者 黄小耶@ 所有, 如有侵权,请联系我们删除。

“Pyecharts可视化全国新冠疫情”的评论:

还没有评论