声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载,原文链接

文章目录

  • 概要
  • 实验过程
    • Pyecharts
    • 实验结果

概要

  • 学院:计算机科学与技术学院
  • 实验日期:2020-10-13
  • 实验目的: 掌握地理数据可视化工具方法
  • 实验内容:
    • 利用已有数据(CityData.xlsx)与已有工具,设计可视化方案,展示2020年全国新冠患者人数随时间的变化过程,并完成以下任务。

      • 统计截止4月1日各省的累计确诊数量,并通过图表展示。
      • 对每日各省的累计确诊患者数量进行统计,为图像添加时间轴,通过时间轴自动播放演示疫情发展的整个过程。
  • 注:表格文件在我的资源中免费下载。名为“数据可视化实验–表格附件”。链接 链接2

实验过程

本次实验选择编程类工具Pyecharts

Pyecharts

​ 在Pycharm中新建python项目,并引入pyecharts,openpyxl,datetime等必要包。

创建main.py,写入以下内容。

#!/usr/bin/env python
# coding:utf-8
"""
Name    : main.py
Author  : F
Time    : 2020/10/14 08:42
Desc    : 数据可视化实验四
"""
import time
import datetime
import openpyxl
from pyecharts.charts import Map, Timeline, Bar
from pyecharts import globals, optionsglobals._WarningControl.ShowWarning = False  # 关闭pyecharts给出的警告filename = "CityData.xlsx"
ws = openpyxl.load_workbook(filename)['CityData']# 两天相减,拿到相差的天数
def subdays(date1: time, date2: time):return (datetime.datetime(date1[0], date1[1], date1[2]) - datetime.datetime(date2[0], date2[1], date2[2])).days# 通过某运算法则选出a,b其中一个,选a返回True,选b返回False
#  a     b   return
#  正    正    min
#  正   非正   False
# 非正   正    True
# 非正  非正    max
def getMostLeftNear(a, b):if (a > 0 and b > 0) or (a <= 0 and b <= 0):return abs(a) < abs(b)elif (a > 0 and b <= 0) or (a <= 0 and b > 0):return b > 0# 认为截止至某天的24时,获取到截止到此刻的省市直辖市自治区的累计确诊人数。我已经不想看这段代码了,建议不看。
def confirmedAt(dateTime: time):data, date = {}, {}for i in range(2, ws.max_row):# 如果已经有这个省的日期了row = str(i + 1)if date.__contains__(ws['B' + row].value):dirdate_april1 = subdays(time.strptime("2020-" + str(date[ws['B' + row].value]['month']) + "-" + str(date[ws['B' + row].value]['day']),"%Y-%m-%d"), dateTime)wsdate_april1 = subdays(time.strptime("2020-" + str(ws['H' + row].value.month) + "-" + str(ws['H' + row].value.day),"%Y-%m-%d"), dateTime)if date.__contains__(ws['B' + row].value) and getMostLeftNear(wsdate_april1, dirdate_april1):date[ws['B' + row].value]['month'] = ws['H' + row].value.monthdate[ws['B' + row].value]['day'] = ws['H' + row].value.dayelif not date.__contains__(ws['B' + row].value):date[ws['B' + row].value] = {'month': ws['H' + row].value.month, 'day': ws['H' + row].value.day}for i in range(2, ws.max_row):row = str(i + 1)wsdate = ws['H' + row].valueif wsdate.month == date[ws['B' + row].value]['month'] and wsdate.day == date[ws['B' + row].value]['day']:if data.__contains__(ws['B' + row].value):data[ws['B' + row].value] += ws['D' + row].valueelse:data[ws['B' + row].value] = ws['D' + row].valuedatalist = []for k, v in data.items():datalist.append([k.strip("省").strip("市").strip("自治区").strip("壮族").strip("回族").strip("维吾尔"), v])return datalistdef drawConfirmedMapAt(dateTime: time):map = Map()map.set_global_opts(title_opts=options.TitleOpts(title=str(dateTime[1]) + '月' + str(dateTime[2]) + "日24时全国疫情确诊地图"),visualmap_opts=options.VisualMapOpts(max_=3600, is_piecewise=True,pieces=[{"max": 1999999, "min": 10000, "label": "10000人及以上","color": "#8A0808"},{"max": 9999, "min": 1000, "label": "1000-9999人", "color": "#B40404"},{"max": 999, "min": 500, "label": "500-999人", "color": "#DF0101"},{"max": 499, "min": 100, "label": "100-499人", "color": "#F78181"},{"max": 99, "min": 10, "label": "10-99人", "color": "#F5A9A9"},{"max": 9, "min": 0, "label": "1-9人", "color": "#FFFFCC"},], )  # 最大数据范围,分段)map.add("截止" + str(dateTime[1]) + '月' + str(dateTime[2]) + "日24时确诊数量", data_pair=confirmedAt(dateTime),maptype="china", is_roam=True)map.render(str(dateTime[1]) + '月' + str(dateTime[2]) + "日24时全国疫情确诊地图.html")def getAllDate():date = set()for i in range(2, ws.max_row):curdate = ws['H' + str(i + 1)].valuedate.add(time.strptime(str(curdate.year) + '-' + str(curdate.month) + '-' + str(curdate.day), "%Y-%m-%d"))date = list(date)date.sort()return date# 画出所有时间的疫情累计确诊地图
# 因为函数confirmedAt(dateTime: time)的时间复杂度高达O(n),所以本函数时间复杂度高达O(n^2),肉眼可见他很慢
def drawAllConfirmedMap():tl = Timeline()date = getAllDate()for curdate in date:map = (Map().add("截止" + str(curdate[1]) + '月' + str(curdate[2]) + "日24时确诊数量", data_pair=confirmedAt(curdate),maptype="china", is_roam=True).set_global_opts(title_opts=options.TitleOpts(title=str(curdate[1]) + '月' + str(curdate[2]) + "日24时全国疫情确诊地图"),visualmap_opts=options.VisualMapOpts(max_=3600, is_piecewise=True,pieces=[{"max": 1999999, "min": 10000, "label": "10000人及以上","color": "#8A0808"},{"max": 9999, "min": 1000, "label": "1000-9999人","color": "#B40404"},{"max": 999, "min": 500, "label": "500-999人","color": "#DF0101"},{"max": 499, "min": 100, "label": "100-499人","color": "#F78181"},{"max": 99, "min": 10, "label": "10-99人", "color": "#F5A9A9"},{"max": 9, "min": 0, "label": "1-9人", "color": "#FFFFCC"},], )  # 最大数据范围,分段))tl.add(map, str(curdate[1]) + '月' + str(curdate[2]) + "日")print(str(curdate[1]) + '月' + str(curdate[2]) + "日完成")tl.render("全国疫情确诊地图.html")def drawConfirmedBarAt(dateTime: time):data = confirmedAt(dateTime)title = str(dateTime[1]) + '月' + str(dateTime[2]) + "日24时全国累计确诊"province, confirmed = [], []for curdata in data:province.append(curdata[0])confirmed.append(curdata[1])bar = Bar()bar.add_xaxis(province).add_yaxis(title, confirmed).set_global_opts(title_opts=options.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"),xaxis_opts=options.AxisOpts(axislabel_opts=options.LabelOpts(rotate=-45)),).render(title + ".html")print(title)drawConfirmedBarAt(time.strptime("2020-04-01", "%Y-%m-%d"))
# drawConfirmedMapAt(time.strptime("2020-04-01", "%Y-%m-%d"))  # 画出4月1号的疫情地图
drawAllConfirmedMap()  # 画出所有时间的疫情地图

代码流程:

+ 读取Excel文件
+ 拿到数据中每个省份截止到4月1号前的最新日期,因为数据中有些省份缺失4月1日的数据
+ 拿到每个省份截止到4月1号前的最新日期的确诊数量
+ 画出确诊数量的柱状图,也可以画出疫情地图,这样也就完成了任务一“截止4月1日各省的累计确诊数量”。
+ 拿到每个省份每天的确诊数量
+ 使用时间轴和Map画出整个时间的疫情地图,并且可以自动播放,这样也就完成了任务二“对每日各省的累计确诊患者数量进行统计,为图像添加时间轴,通过时间轴自动播放演示疫情发展的整个过程”。

实验结果

运行上述代码,画出4月1日全国的累积确诊柱状图和疫情地图,如下图

上图为4月1日全国的累积确诊柱状图,同样也可以画出4月1日全国的累积确诊疫情地图,如下图

全国疫情地图时间轴如下图

数据可视化–实验四:地理数据可视化实验完成,两项实验结果均符合要求,实验成功。

数据可视化--实验四:地理数据可视化相关推荐

  1. 数据可视化实验:python数据可视化-柱状图,条形图,直方图,饼图,棒图,散点图,气泡图,雷达图,箱线图,折线图

    数据可视化实验:python数据可视化 实验8-12:大数据可视化工具-python 目录 1柱状图 2条形图 3直方图 4饼图 5棒图 6散点图 7气泡图 8雷达图 9箱线图 10折线图 1柱状图 ...

  2. 数据库原理与应用实验指导书 实验四:数据查询

    数据库原理与应用 实验指导书 实验四:数据查询 一.实验目的 掌握SELECT语句的基本语法: 熟练掌握模糊查询的用法: 熟练掌握连接查询的用法: 熟练掌握子查询的用法. 二.实验内容 表数据的查询 ...

  3. MongoDB 数据操作(四)数据删除

    来源:我的博客站 OceanicKang |<MongoDB 数据操作(四)数据删除> 上一篇:<MongoDB 数据操作(三)数据更新(2)修改器> 在 MongoDB 中删 ...

  4. 数据治理系列(四):数据质量管理

    一.什么是数据质量管理? 数据质量管理是指对数据从产生.获取.存储.共享.维护.应用等各个阶段可能引发的各类数据质量问题,进行识别.度量.监控.预警等一系列管理活动,并通过改善和提高组织的管理水平使数 ...

  5. 数据可视化|实验四 分析1996-2015年人口数据特征间的关系

    使用 NumPy 库读取人口数据 使用 numpy 库读取人口数据,分析 1996~2015 年人口数据特征间的关系: %matplotlib inlineimport numpy as npimpo ...

  6. 【matlab】实验四:数据可视化+matlab绘图

    题目一 1.设y=cos(x)(0.5+3sin(x)/(1+x^2)),把x=0~2*pi间分为101点,绘制图像 clear;clc; x=0:2*pi/100:3*pi; y=cos(x)*(0 ...

  7. Python数据可视化:Cartopy 地理空间数据可视化

    前言 Cartopy 是为了向 Python 添加地图制图功能而开发的扩展库.该项目致力于以 matplotlib 包为基础,用简单直观的方式操作各类地理要素的成图.Cartopy 官网的画廊页面已经 ...

  8. 数据库实验四:数据高级查询

    真给我整无语了,数据库实验怎么这么多,要考试还要写实验.写写写,写他娘的什么东西. 实验内容 实现查询 ps:实验要求用两种方法写的我除了union都是用的两种方法写,union查了好久都查不到,或许 ...

  9. 转:实验3 地理空间数据可视化

    链接:https://blog.csdn.net/wpxu08/article/details/78130185

  10. Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(四)数据屏幕

    今天介绍给大家的是:如果使用 Python 制作数据屏幕,将从最基础的开始,如果熟悉 django 和 Python 的朋友可直接跳过 项目功能设计: 定时爬取疫情数据存入Mysql(爬虫篇) 进行数 ...

最新文章

  1. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
  2. openresty开发系列34--openresty执行流程之4访问阶段
  3. 动态规划之数字三角形模型
  4. ActiveMQ(一)简介与架构
  5. SQL自动流水号函数
  6. 网站是如何跟踪监视你的
  7. 【MFC】多线程同步—事件
  8. Ajax技术(WEB无刷新提交数据)
  9. Java入门基础 安装并配置Java软件和JDK
  10. 使用Python实现excel项目清单自动生成word文档
  11. xjoi 1524 枚举集合
  12. 微信指纹支付原理浅析
  13. 收藏!这37个自学网站,一年让你省下十几万
  14. @Transactional注解解析
  15. SQL SERVER中PERCENTILE_CONT和PERCENTILE_DISC
  16. 大数据【企业级360°全方位用户画像】业务数据调研及ETL
  17. 【散文】 岁月留痕遇好友
  18. FDC2214调试笔记(1)——为什么FDC2214输出的会是0x00000000或者0xffffffff?
  19. dbcp连接池不合理的锁导致连接耗尽
  20. Android 使用ADB命令启动浏览器并访问指定的URL

热门文章

  1. html动态生成tr标签,JS动态添加tr元素
  2. Gossip协议笔记--谣言、流行病协议
  3. 用连续自然数之和来表达整数
  4. Java ques: Unknown initial character set index ‘255‘ received from server. Initial client character
  5. android 连续播放动画,Android ObjectAnimator 无限循环播放,实现上下左右浮动效果...
  6. 如何使用PM2 部署 nodejs 项目
  7. java编译找不到符号_java编译时找不到符号,怎么处理
  8. Idea编译:Java找不到符号
  9. 左手云通讯,右手AI,容联为何能成为云联络中心“风向标”?
  10. 【每日学习3.31】 筹备腾讯三面 - 阿V