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

news/2024/7/5 2:06:27

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

在这里插入图片描述

文章目录

  • 安装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
在这里插入图片描述
得到一个这样子的excel的表格后,会拥有到当天为止所有城市的所有数据,但是,在一个excel表格当中,他不好提去数据啊来导入啊,所以我们按照日期来将其拆分为n哥.xlsx文件
这里用一个叫方方格子的辅助工具

  1. 先打开网址,将其下载安装
    http://www.ffcell.com/
  2. 打开excel后,点击拆分工作表。
    在这里插入图片描述在这里插入图片描述
    按照图片进行操作,选择保存路径,然后你就会发现被拆分成很多不同的文件了,这样子我们就可以通过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,0len1=len(df_2)flag=0for i in range(len1):x=df_2[i]-df_3[i]-df_4[i];if(df_1[i]=='海南'):df_1.append('南海诸岛')flag=xremain.append(x)ans+=xlive+=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即可
在这里插入图片描述
各种小细节在你看说明书的时候可以使用

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_snapshotmake_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,0len1=len(df_2)flag=0for i in range(len1):x=df_2[i]-df_3[i]-df_4[i];if(df_1[i]=='海南'):df_1.append('南海诸岛')flag=xremain.append(x)ans+=xlive+=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勿喷,有问题一起交流


http://lihuaxi.xjx100.cn/news/285918.html

相关文章

树上启发式合并问题 ---- 2019icpc南昌 K. Tree (树上启发式合并 + 动态开点线段树)

题目链接 题目大意: 就是给你一颗树,每个点有个权值viv_ivi​,问你有多少对(x,y)(x,y)(x,y)满足: xxx不是yyy的祖先yyy也不是xxx的祖先xxx和yyy的距离不超过kkkxxx和yyy最近公共祖先:zzz,满足vxvy2vzv_xv_y2v_zvx​vy…

程序员最常说的9句话,精准!

1、别更新了学不动了。2、我不会修电脑,谢谢。3、听说今晚不用加班。4、是你的网络有问题。5、清一下缓存再试试6、扫码提需求,谢谢。7、换一台设备试试看。8、保证今晚十点上线。9、键盘给你,你来写。IT程序猿 微博网友评论:猫儿…

为何Google将几十亿行源代码放在一个仓库?

作者 | Rachel Potvin,Josh Levenberg 译者 | 张建军 编辑 | apddd 【AI科技大本营导读】与大多数开发者的想象不同,Google只有一个代码仓库——全公司使用不同语言编写的超过10亿文件,近百TB源代码都存放在自行开发的版本管理系统Piper中&…

7个Debug linux程序的Strace 列子

Strace是一个能帮助你解决问题的debugging工具 Strace监控指定程序系统调用和信号,在你没有源代码又想dubug程序的执行时是会用到的。Strace会以程序的开始到结束来顺序执行的 你可以从这个7个Strace 例子开始起步了解Strace 1.跟踪可执行程序的执行 你可以使用stra…

第2关:利用栈判断字符串括号是否匹配

#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; // 数据元素的数据类型struct Stack{T* data; // 数据元素存储空间的开始地址int top; // 栈表的当前位置int max; // 栈表的最大长度 };Stack* Stack_Create(int …

Codeforces Round #645 (Div. 2)(D.The Best Vacation)

题目链接&#xff1a;https://codeforces.com/contest/1358/problem/D 思路&#xff1a;双指针前缀和 前缀和主要处理了两组数据&#xff1a;sum[]是某月到某月的天数,ans[] 代表某月到某月能得到得hug数 然后我们通过双指针的方法来遍历整个范围&#xff0c;当sum[r]-sum[l-1]…

如何用最强模型BERT做NLP迁移学习?

作者 | 台湾大学网红教授李宏毅的三名爱徒来源 | 井森堡&#xff0c;不定期更新机器学习技术文并附上质量佳且可读性高的代码。编辑 | Jane谷歌此前发布的NLP模型BERT&#xff0c;在知乎、Reddit上都引起了轰动。其模型效果极好&#xff0c;BERT论文的作者在论文里做的几个实验…

第3关:利用栈判断字符串是否为回文串

#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; // 数据元素的数据类型struct Stack{T* data; // 数据元素存储空间的开始地址int top; // 栈表的当前位置int max; // 栈表的最大长度 };Stack* Stack_Create(int …