数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图

大体思路:
通过pyecharts等库+一个for循环批量绘制近几个月每天的图,最后通过pr将图片合成
先看一下某一天的样图,用pr组合起来之后就是个动态的了

数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第1张图片

文章目录

  • 安装pyecharts库
  • 数据来源
  • 代码部分
    • 1.导入库
    • 2.将路径中所有文件找出保存至列表
    • 3.处理导入的数据
    • 4.地图图表绘制
    • 5.导出生成图片
    • 5.代码汇总
  • 小结

安装pyecharts库

首先先安装pyecharts库,cmd中输入

pip install pyecharts

自从pyecharts版本升级后,pyecharts 将不再自带地图 js 文件,所以需要自行下载地图图标,按照自己的需求下载不同的地图


pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
pip install echarts-united-kingdom-pypkg

安装好之后就可以来进行制图了
这里提供一个对照的中文功能手册,很详细
http://pyecharts.org/#/zh-cn/intro

数据来源

这里我就不直接给出数据了,要通过自己劳动所得。
提供一个up主的视频,很好的资源:
https://www.bilibili.com/video/BV1WE411K7jB?t=26
数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第2张图片
得到一个这样子的excel的表格后,会拥有到当天为止所有城市的所有数据,但是,在一个excel表格当中,他不好提去数据啊来导入啊,所以我们按照日期来将其拆分为n哥.xlsx文件
这里用一个叫方方格子的辅助工具

  1. 先打开网址,将其下载安装
    http://www.ffcell.com/
  2. 打开excel后,点击拆分工作表。
    数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第3张图片数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第4张图片数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第5张图片
    按照图片进行操作,选择保存路径,然后你就会发现被拆分成很多不同的文件了,这样子我们就可以通过os库批量导入这些文件。

代码部分

1.导入库

下面是我们所用到的所有库
包括pandas、pyecharts、os、snapshot库
主要作用
pandas库用来处理导入的文件
pyecharts用来作图
os库来找出当前路径下所有的.xlsx文件
snapshot库用来将导出的文件转化为.png格式

import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts.charts import Map
from pyecharts import options as opts
from snapshot_pyppeteer import snapshot
from pyecharts.render import make_snapshot
import os

2.将路径中所有文件找出保存至列表

这里之前没有接触过pandas库,感觉pandas库应该有操作可以代替os库的操作,这里可以自行查一下

start = time.perf_counter()
items = os.listdir(".")
newlist = []
for names in items:
  if names.endswith(".xlsx"):
    newlist.append(names)

3.处理导入的数据

首先通过pandas库将导入数据转换成列表类型
通过for循环对列表进行操作,求得 live 治愈人数 dies 死亡人数 alls 全国总共确诊人数等数据,对后面过程有用

    df = pd.read_excel(url)
    df_1 = df['省份'].tolist()
    df_2 = df['累计确诊'].tolist()
    df_3 = df['死亡'].tolist()
    df_4 = df['治愈'].tolist()

    remain=[]
    ans,live,die,alls=0,0,0,0
    len1=len(df_2)
    flag=0
    for i in range(len1):
        x=df_2[i]-df_3[i]-df_4[i];
        if(df_1[i]=='海南'):
            df_1.append('南海诸岛')
            flag=x
        remain.append(x)
        ans+=x
        live+=df_4[i]
        die+=df_3[i]
        alls+=df_2[i]
    if(flag!=0):
        remain.append(flag)

这两句是把每个省现存确诊人数由大到小进行排序,生成一个排名的二维列表,从而对后面操作有用

    zipped = dict(zip(df_1,remain))
    sorted_zip=sorted(zipped.items(),key=lambda x:x[1],reverse=True)

4.地图图表绘制

设置函数
nations 国家列表
values 各省现存确诊人数列表
sum 全国现存确诊人数
date 当天日期
rating排名二维列表
live 治愈人数
dies 死亡人数
alls 全国总共确诊人数

def map_visualmap(nations, values,sum,date,rating,live,dies,alls):

这里给的是图片格式,拒绝抄袭(实在不想写那你可以私聊我),再说一遍所有的操作函数都在这个使用手册中,如果看不懂使用手册,那就现去学类和继承,或者对应着图片的操作能做出来图片中的所有操作,在手册中都是可以找得到的
在将某些数据放在图上的时候,因为你具体不知道那个点的坐标,所以你可能需要多次来进行微调才能把你想要放的东西放置到目标位置。

主要思路:
1.左上角使用标题与副标题+传过来的(利用字符串可以直接拼接的特性) sum 全国现存确诊人数 date 当天日期 live 治愈人数 dies 死亡人数 alls 全国总共确诊人数这几个参数组合而成

2.中间的地图是通过.add操作将nations 国家列表和 values 各省现存确诊人数列表插入到地图当中去的

3.右下角是通过GraphicGroup:原生图形元素组件+排好序的二维列表来实现的(利用字符串可以直接拼接的特性)

4.中间的地图是通过.add操作将nations 国家列表和 values 各省现存确诊人数列表插入到地图当中去的

1.前三点是通过set_global_opts进行设置从而使用的:
里面对应手册都会有等等不同的操作,这里列举一个操作内容

title_opts  	 //左上角的内容
graphic_opts		//右下角的内容
visualmap_opts		//左下角的分色
看下面的操作,
标题内容  title=""
标题距离左边距和右边距的距离pos_left=20,pos_top=10
标题的格式 title_textstyle_opts
副标题内容subtitle=""
副标题距离标题的距离item_gap=
副标题样式 subtitle_textstyle_opts=
title_opts=opts.TitleOpts(title="COVID-19现存确诊人数变化专题地图",pos_left=20,pos_top=10,title_textstyle_opts=opts.TextStyleOpts(color='#FF4500',font_size=25),
                                      subtitle=date[0]+"月"+date[1:3]+"日全国:\n\n累计确诊人数:"+str(alls)+"\n\n"+"现存确诊人数: "+str(sum)+"\n\n"+"治愈人数: "+str(live)+"\n\n"+"死亡人数: "+str(dies),
                                      item_gap=20,subtitle_textstyle_opts=opts.TextStyleOpts(color='#FF8C00',font_size=18)),

2.如何将数据添加到地图上呢?
主要是通过他的.add操作

.add("", [list(z) for z in zip(nations, values)], "china",is_map_symbol_show=False)

3.其他设置
这里这个map()类是要导入进来的,如果你不需要设置背景颜色,只需要这样写Map(),把里面的内容去掉即可

Map(init_opts=opts.InitOpts(bg_color='#F0F0F0'))

最后返回c即可
数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图_第6张图片
各种小细节在你看说明书的时候可以使用

http://pyecharts.org/#/zh-cn/intro
http://pyecharts.org/#/zh-cn/intro
http://pyecharts.org/#/zh-cn/intro

5.导出生成图片

这一主要运用了

from snapshot_pyppeteer import snapshot
from pyecharts.render import make_snapshot

make_snapshot(snapshot,c.render(),url[-8:-5]+'.png')

5.代码汇总

这里不上传函数里面得代码了就。

items = os.listdir(".")
newlist = []
for names in items:
  if names.endswith(".xlsx"):
    newlist.append(names)

for url in newlist:
    df = pd.read_excel(url)
    df_1 = df['省份'].tolist()
    df_2 = df['累计确诊'].tolist()
    df_3 = df['死亡'].tolist()
    df_4 = df['治愈'].tolist()

    remain=[]
    ans,live,die,alls=0,0,0,0
    len1=len(df_2)
    flag=0
    for i in range(len1):
        x=df_2[i]-df_3[i]-df_4[i];
        if(df_1[i]=='海南'):
            df_1.append('南海诸岛')
            flag=x
        remain.append(x)
        ans+=x
        live+=df_4[i]
        die+=df_3[i]
        alls+=df_2[i]
    if(flag!=0):
        remain.append(flag)
    #从大到小进行排序
    zipped = dict(zip(df_1,remain))
    sorted_zip=sorted(zipped.items(),key=lambda x:x[1],reverse=True)
    print(cnt)
    cnt+=1
    # 实例化地图函数
    c = map_visualmap(nations=df_1, values=remain,sum=ans,rating=sorted_zip,date=url[-8:-5],live=live,dies=die,alls=alls)
    make_snapshot(snapshot,c.render(),url[-8:-5]+'.png')
    #c.render(path=r'C:\Users\Xiaoxiaoxiao\Desktop\地图\网页结果'+url[-8:-5]+".html")

小结

经过上述得步骤之后,你就可以点即运行按钮,坐等收生成(大约需要十几分钟)这一百多实时数据更新得地图了,然后通过pr简单得图片合成即可得道一个很好的实时更新视频了。
重点是学习如何应用pyecharts库,也就是说,你需要看懂那个中文使用手册,只要看懂他,并且知道如何调用里面的函数,这个库可能就没有什么地方可以难得倒你了吧。

菜鸡一枚,dalao勿喷,有问题一起交流

你可能感兴趣的:(python,python,数据可视化)