实验四:地理数据可视化

实验四:地理数据可视化

实验目的

掌握地理数据可视化的原理和方法。

实验内容

分析2020 新冠疫情。要求利用已有数据(CityData.xlsx)与已有工具,设计可视化方案,展示2020年全国新冠患者人数随时间的变化过程,并完成以下任务。

任务一:统计截止4月1日各省的累计确诊数量,并通过图表展示。

任务二:对每日各省的累计确诊患者数量进行统计,为图像添加时间轴,通过时间轴自动播放演示疫情发展的整个过程。
在这里插入图片描述

实验过程

任务一:

import openpyxl
import datetime
from pyecharts import options as opts
from pyecharts.charts import Map

def dataHandle(sheet, useless_row, useless_col):
    # 对表中数据进行预处理
    sheet.delete_cols(useless_col)
    sheet.delete_rows(useless_row)
    return sheet

def get_province(sheet,col):
    # 获得表中所有的省份,并返回省份:确诊人数的字典
    mySet = set()
    data_require = sheet[col]
    for cell in data_require:
        value = cell.value
        mySet.add(value)
    my_dict = {item: 0 for item in mySet}
    return my_dict 
    
def get_confirmed_cases(sheet,data_dict,date_tuple):
    # 获取确诊人数
    rawdata = []
    flag = 0  # 获取到数据的数量
    targetDate = datetime.datetime(date_tuple[0], date_tuple[1], date_tuple[2])
    # 获得截止到4月1日各省的累计确诊,如果4月1日数据丢失,则寻找最接近一天的数据
    while 1:
        for row in sheet.iter_rows(values_only=True):
            if row[6] == targetDate:
                rawdata.append(row)

        for i in rawdata:
            if data_dict[i[0]] == 0:
                data_dict[i[0]] += i[2]
                flag = flag+1
        if flag == len(data_dict):
            break
        else:
            targetDate = targetDate - datetime.timedelta(days=1)

    return data_dict
    
if __name__ == "__main__":
    # 导入工作簿
    workbook = openpyxl.load_workbook('exp3/mission-1/CityData.xlsx')
    # 导入工作表
    sheet = workbook.worksheets[0]
    # print(workbook.active)
# 数据处理
    # 去掉无关项
    row = 1
    col = 1
    sheet = dataHandle(sheet,row,col)
    data_dict = get_province(sheet,'A')
    data_dict = get_confirmed_cases(sheet,data_dict, (2020,4,1))


# 绘图
    c = (
        Map()
        # 全局配置项
        .set_global_opts(
            title_opts=opts.TitleOpts(title="确诊人数统计图"),
            visualmap_opts=opts.VisualMapOpts(
                max_=51000,
                is_piecewise=True,
                pieces=[
                    {"min": 0, "max": 10, "color": "#9ACD32"},
                    {"min": 10, "max": 100, "color": "#87CEEB"},
                    {"min": 100, "max": 200, "color": "#FFD700"},
                    {"min": 200, "max": 400, "color": "#FFA07A"},
                    {"min": 400, "max": 500, "color": "#FFA500"},
                    {"min": 500, "max": 51000, "color": "#FF0000"},
                ]
            ),
        )
        # 将data_dict作为数据映射到表中
        .add("截止到2020年4月1日的确诊人数", [list(z) for z in data_dict.items()], "china")

        # 渲染
        .render("exp3/mission-1/map_visualmap.html")
    )

任务二:

import json
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline


if __name__ == "__main__":
    
    # 导入处理好的数据
    with open('exp3/mission-2/data_dict.json', 'r', encoding='utf-8') as file:
        data_dict_everyDay = json.load(file)
    # print(data_dict_everyDay["2020-04-18"])
    # 绘图
    try:
        tl = Timeline()

        for date, value in data_dict_everyDay.items():
            my_map = (
                Map()
                # 全局配置项
                .set_global_opts(
                    title_opts=opts.TitleOpts(title="确诊人数统计图"),
                    visualmap_opts=opts.VisualMapOpts(
                        max_=51000,
                        is_piecewise=True,
                        pieces=[
                            {"min": 0, "max": 10, "color": "#9ACD32"},
                            {"min": 10, "max": 100, "color": "#87CEEB"},
                            {"min": 100, "max": 200, "color": "#FFD700"},
                            {"min": 200, "max": 400, "color": "#FFA07A"},
                            {"min": 400, "max": 500, "color": "#FFA500"},
                            {"min": 500, "max": 51000, "color": "#FF0000"},
                        ]
                    ),
                )
                # 将data_dict作为数据映射到表中
                .add("2020年1月24日~2020年4月18日确诊人数变化图", [list(z) for z in value.items()], "china")
            )
            tl.add(my_map, date)
    # 渲染
        tl.render("exp3/mission-2/timeline_map.html")
    except:
        print("渲染失败")

实验结果

任务一:
在这里插入图片描述

任务二:
在这里插入图片描述
在这里插入图片描述

参考资料

https://pyecharts.org/#/

https://openpyxl.readthedocs.io/en/stable/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gledfish

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

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

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

打赏作者

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

抵扣说明:

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

余额充值