pyecharts:对爬取的新冠疫情数据进行可视化(二)


这里是对爬取的数据进行数据可视化分析,主要也是对pyecharts库的一个练习。

1.加载数据和引用库

import time
import json
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Bar,Map,Line

//加载数据,
data = pd.read_csv("./today_province_2021_04_09.csv")
//查看该数据的头五行部分,初步了解
data.head()

在这里插入图片描述
观察数据可知,数据存在大量的空值,不便于后继可视化分析
故用 0 来填充数据中的空值

# 填充空值
data = data.fillna(0)
#查看填充后数据的最后五行
data.tail()

在这里插入图片描述

2.中国数据可视化

此时经过观察数据已不存在空值。可开始挑选数据进行数据可视化画图。
因为我要画的是我过各个省份确诊病例的地图可视化,所以需要的是
省份名(name)累计确诊(total_confirm) 数据

****这里也是地图可视化需要的数据*****


#将提取的数据进行排序
total_data = data[["name","total_confirm"]].sort_values(by="total_confirm",ascending=False)
total_data[:5]


*****以下是输出结果******
	name	total_confirm
0	湖北	    68153
1	香港	    11549
2	广东	    2295
3	上海  	1916
4	黑龙江	1610

2.1 地图可视化

地图可视化的代码

map = (
    Map()
    .add("商家A", [list(z) for z in zip(total_data["name"],total_data["total_confirm"])], "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中国各省新冠确诊人数数据可视化"),
        legend_opts=opts.LegendOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(
            type_="color",
            min_=np.min(total_data["total_confirm"].tolist()),
            max_=np.max(total_data["total_confirm"].tolist()),
            range_text=["High","Low"],is_piecewise=True,
#             split_number = 5,
            pieces=[{"min": 0, "max": 100, "label": "< 100"},{"min": 100, "max": 500, "label": "100 - 500"},
                    {"min": 500, "max": 1000, "label": "500 - 1000"},{"min": 1000, "max": 10000, "label": "1000 - 10000"},
                    {"min": 10000, "max": 20000, "label": "10000 - 20000"},{"min": 20000, "label": "> 20000"}]),
    )

)
map.render_notebook()

结果展示
在这里插入图片描述

2.2 柱状图可视化

柱状图可视化

//将今日的时间赋值与ntime
ntime = time.strftime("%Y_%m_%d",time.localtime(time.time()))


bar = (
    Bar()
    .add_xaxis(total_data["name"].tolist())
    .add_yaxis("累计确诊", total_data["total_confirm"].tolist())
    .set_global_opts(
        #图形标题的设置
        title_opts=opts.TitleOpts(
            title=ntime+"中国各省份累计新冠肺炎确诊病例",
            pos_left="center",
            pos_top="7%"),
         # 'shadow':阴影指示器
        tooltip_opts=opts.TooltipOpts(
            is_show=True, 
            trigger="axis", 
            axis_pointer_type="shadow"),
        # 图例的设置
        legend_opts=opts.LegendOpts(pos_top="12%",pos_left="45%"),
        # 视觉映射配置项
        visualmap_opts=opts.VisualMapOpts(
            type_="color",
            min_=np.min(total_data["total_confirm"]),
            max_=np.max(total_data["total_confirm"]),
            range_text=["High","Low"],),
        # x轴坐标配置项
        xaxis_opts=opts.AxisOpts(name="省份",axislabel_opts={"interval":"0"}),
        # y轴配置项
        yaxis_opts=opts.AxisOpts(
            name="总计",min_=0,
            type_="value",axislabel_opts=opts.LabelOpts(formatter="{value} 人"),),
        # 区域缩放配置项
        datazoom_opts=opts.DataZoomOpts(range_start=5,range_end=50),
    )
)
bar.render_notebook()

结果展示
在这里插入图片描述

#增加一列为治愈率的特征
# np.around(data,3)只保留小数后三位数字
data["cure_rate"] = np.around(data["total_heal"]/data["total_confirm"],3)
data["death_rate"] = np.around(data["total_dead"]/data["total_confirm"],3)

data[["name","total_confirm","total_heal","cure_rate","death_rate"]][:10]

******输出结果********

在这里插入图片描述

2.3 折线图可视化

折线图可视化

line = (
    Line(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS))
    .add_xaxis(data["name"].tolist())
    .add_yaxis("死亡率", data["death_rate"].tolist(), is_smooth=True,symbol_size=10,symbol="triangle",
               # 线条样式配置参数
               linestyle_opts=opts.LineStyleOpts(width=3,type_="dotted",color="#6e9ef1"),
               itemstyle_opts=opts.ItemStyleOpts(
                   border_width=3, border_color="yellow", color="blue"
        ),
              )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中国各省新冠确诊死亡率",pos_left="center",pos_top="2%"),
        legend_opts=opts.LegendOpts(pos_top="8%"),
        # x轴坐标配置项
        xaxis_opts=opts.AxisOpts(name="省份",axislabel_opts={"interval":"0"}),
        # y轴配置项
        yaxis_opts=opts.AxisOpts(
            name="百分比",min_=0,
            type_="value",axislabel_opts=opts.LabelOpts(formatter="{value} %"),),
        datazoom_opts=opts.DataZoomOpts(range_start=5,range_end=50),
         tooltip_opts=opts.TooltipOpts(
            is_show=True, 
            trigger="axis", 
            axis_pointer_type="shadow"),
    )

)
line.render_notebook()

结果展示
图形比较丑,请忽略,主要是为了练习画图函数
在这里插入图片描述

3.世界数据可视化

3.1 世界地图可视化

这里是对世界各国及其患病的人数进行了一个地图的可视化,

df = pd.read_csv("./today_worlds_2021_04_09.csv")
df = df.fillna(0)

#提取出我们需要的特征列
world_data = df[["name","lastUpdateTime","today_confirm","total_confirm","total_heal","total_dead"]]
world_data.head()

这里是因为pyecharts不能默认使用中文标注的国名,所以在网上找了一个中英文对应的数据,存储为json格式后在进行引用,防止在代码中出现太长的字典数据的代码。国名中英文数据在文章末尾的链接文章中。

#将其取出后储存为 name_map
with open("./test.json",'r') as f:
    name_map = json.load(f)
type(data)

*********输出为***********

pandas.core.frame.DataFrame

世界地图完整代码

world_map = (
    Map()
    .add("累计新冠确诊", 
         [list(z) for z in zip(world_data["name"].tolist(), world_data["total_confirm"].tolist())], 
         "world",is_map_symbol_show=False,name_map=name_map)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="世界各国新冠确诊累计分布图"),
#         visualmap_opts=opts.VisualMapOpts(max_=200),
        visualmap_opts=opts.VisualMapOpts(
            type_="color",
            min_=np.min(world_data["total_confirm"]),
            max_=np.max(world_data["total_confirm"]),
            range_text=["High","Low"],is_piecewise=True,
             pieces=[{"min": 0, "max": 100, "label": "< 100"},
                     {"min": 100, "max": 1000, "label": "100 - 1000"},
                     {"min": 1000, "max": 10000, "label": "1000 - 10000"},
                     {"min": 10000, "max": 30000, "label": "1万 - 3万"},
                     {"min": 30000, "max": 100000, "label": "3万 - 10万"},
                     {"min": 100000, "max": 200000, "label": "10万 - 20万"}, 
                     {"min": 200000, "max": 500000, "label": "20万 - 50万"},
                     {"min": 500000, "max": 1000000, "label": "50万 - 100万"},
                     {"min": 1000000, "max": 5000000, "label": "100万 - 500万"},
                     {"min": 5000000, "max": 20000000, "label": "500万 - 2000万"},
                     {"min": 20000000, "label": "> 2000万"}]),
    )
)
world_map.render_notebook()

结果展示:
在这里插入图片描述

3.2 柱状图

#对数据进行排序
total_worlds = world_data[["name","total_confirm"]].sort_values(by="total_confirm",ascending=False)

bar = (
    Bar()
    .add_xaxis(total_worlds["name"].tolist())
    .add_yaxis("累计确诊", total_worlds["total_confirm"].tolist())
    .set_global_opts(
        #图形标题的设置
        title_opts=opts.TitleOpts(
            title="世界各国累计新冠肺炎确诊病例",
            pos_left="center",
            pos_top="7%"),
         # 'shadow':阴影指示器
        tooltip_opts=opts.TooltipOpts(
            is_show=True, 
            trigger="axis", 
            axis_pointer_type="shadow"),
        # 图例的设置
        legend_opts=opts.LegendOpts(pos_top="12%",pos_left="45%"),
        # 视觉映射配置项
        visualmap_opts=opts.VisualMapOpts(
            type_="color",
            min_=np.min(total_data["total_confirm"]),
            max_=np.max(total_data["total_confirm"]),
            range_text=["High","Low"],),
        # x轴坐标配置项
        xaxis_opts=opts.AxisOpts(name="国家",axislabel_opts={"interval":"0"}),
        # y轴配置项
        yaxis_opts=opts.AxisOpts(
            name="总计",min_=0,
            type_="value",axislabel_opts=opts.LabelOpts(formatter="{value} 人"),),
        # 区域缩放配置项
        datazoom_opts=opts.DataZoomOpts(range_start=0,range_end=5),
    )
)
bar.render_notebook()

在这里插入图片描述

4.总结

1.在这里我只是对爬取到的数据进行了一个大致的可视化分析,并没有深入的对数据进行分析了解,这也是因为我主要是为了熟悉 pyecharts 的画图功能函数。

2.本文画图的代码具体含义请参考官方文档,如果要学习pyecharts画图,官方文档其实就是最好的学习资料。其中的关键就在于如何将组成图形的元素组合起来,然后再加以配色,仅适用pyecharts就可以画出精美的图形了。

3.Pyecharts 学习提示:

  • 1、 set_global_opts() — 对全局配置项的代码编写
  • 2、 set_series_opts() — 对系列配置项的代码编写
  • 3、其次就是对图像框架的代码编写,这也是最简单的

4.国名中英文数据的参考文章

python爬虫:网易新冠疫情数据爬取(一)

  • 15
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明 总 有

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值