西电-数据可视化-实验四-地理数据可视化(pyecharts)

西电-数据可视化-实验四-地理数据可视化

一、实验内容:

利用已有数据CityData.xlsx(请于课程资料库中下载)与已有工具,设计可视化方案,展示2020年全国新冠患者人数随时间的变化过程(下图仅供参考),并完成以下任务:

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

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

二、解决思路

(1) 进入pyecharts官网修改demo即可:

实验涉及到的三个图表类型如下:
TimeLine
在这里插入图片描述在这里插入图片描述Map在这里插入图片描述在这里插入图片描述Bar
在这里插入图片描述在这里插入图片描述(2) 代码实现:

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map, Bar, Timeline

# 存放数据的列表
provinces = []  # 省份->去重->排序->bar
confirmed = []  # 某省某地区某天确诊人数
date = []  # 日期->去重->排序->timeline
info = []  # 省份-确诊人数-日期 用于遍历


# 读取文件中的数据
def read_excel(file_name):
    df = pd.read_excel(file_name)
    # 遍历excel文件的每一行
    for _, data in df.iterrows():
        global date, provinces, confirmed, info
        provinces.append(data[1])
        confirmed.append(data[3])
        # 格式化日期 如:2021/4/1=>2021/04/01
        data[7] = str(data[7].year) + "-" + str("{:0>2d}".format(data[7].month)) + "-" + str(
            "{:0>2d}".format(data[7].day))
        # my_date = datetime.datetime.strptime(data[7], '%Y-%m-%d')
        date.append(data[7])
    # info 用于存储excel每一行的完整信息,包括省、确诊人数、日期
    info = list(zip(provinces, confirmed, date))
    # 对省份去重 便于后续建立字典用于统计同一省份的累计确诊人数
    provinces = list(set(provinces))
    provinces.sort()
    # 对日期去重排序 便于后续建立时间线轮播多图
    date = list(set(date))
    date.sort()


# # -----------------------task_1----------------------------------
data_for_bar = []


def draw_Bar_for_04_01():
    (
        Bar()
        .add_xaxis(
            xaxis_data=provinces
        )
        .add_yaxis(
            series_name="截止4.1日各省累计确诊人数",
            y_axis=data_for_bar
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="截止4.1日全国疫情条形图"
            ),
            xaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(rotate=-45)
            ),
            visualmap_opts=opts.VisualMapOpts(
                min_=-1,
                max_=1
            )
        )
        .render("bar_04_01.html")
    )


# ------------------------task_2------------------------------------
# 下边这些代码是实现整个功能的核心
# 初始化一个字典 动态更新 每当有新的数据读进来时,这个字典里的数据也随即更新
# 这样做的目的就是避免某一天某省数据缺失而导致人数为0
my_dict_map = {province: 0 for province in provinces}


def creat_data_for_map(day):
    # 初始化字典:每个省的累计确诊人数预置为0
    my_dict_map_thisday = {province: 0 for province in provinces}
    for elem in info:
        if elem[2] == day:
            my_dict_map_thisday[elem[0]] += elem[1]
    # 用新读入的数据来更新my_dict_map
    for key, value in my_dict_map_thisday.items():
        # 有新的数据
        if value != 0:
            my_dict_map[key] = value
    # excel中的省必须删除后缀省//自治区/壮族/回族/维吾尔才能使用
    # 因为Map()里的data_pair接收的参数就是这种格式,否则识别不了
    my_data = [[key.strip("省").strip("市").strip("自治区").strip("壮族").strip("回族").strip("维吾尔"), value]
               for key, value in my_dict_map.items()]
    # 当day="2020-04-01"时调用函数完成任务一bar的绘制
    if day == "2020-04-01":
        global data_for_bar
        data_for_bar = [my_dict_map[province] for province in provinces]
        draw_Bar_for_04_01()
    return my_data


def draw_Timeline():
    # 创建一个时间线轮播图对象
    t1 = Timeline()
    # 循环创建与时间点相应的map
    for day in date:
        my_map = (
            Map()
            .add(
                series_name="截止{}全国疫情确诊数量".format(day),
                data_pair=creat_data_for_map(day)
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title=day + "全国疫情确诊地图",
                ),
                visualmap_opts=opts.VisualMapOpts(
                    # 是否为分段型
                    is_piecewise=True,
                    pieces=[
                        {"min": 1, "max": 99, "label": "1-99人", "color": "#FFEFD5"},
                        {"min": 100, "max": 999, "label": "100-999人", "color": "#FFD700"},
                        {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#FF6347"},
                        {"min": 10000, "max": 999999, "label": ">10000人", "color": "#B22222"},
                    ]
                )
            )
        )
        t1.add(my_map, day)
        t1.add_schema(
            # 是否自动播放
            is_auto_play=True,
            # 是否循环播放
            is_loop_play=True,
            # 间隔
            play_interval=1000
        )
    t1.render("timeline_map.html")


if __name__ == '__main__':
    filename = "CityData.xlsx"
    read_excel(filename)
    draw_Timeline()
    draw_Bar_for_04_01()

(3)实验细节:
@在本实验中,核心是使用动态更新字典的方法,当某省有最新的数据时,替换掉原先的数据。这样做的一个好处是:如果某省某天没有更新数据,不会出现这一天数据为0的情况。
@本实验的的一个易错点:
在这里插入图片描述

三、实验结果

在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2018年 6 月 7 日 目录 一、 题目 4 二、 数据 4 三、 可视化工具(哪一种,选择原因) 4 、 可视化方案或可视化实现过程 4 1、 导入数据并进行规范化 4 2、 数据连接与整理 4 3、 将地理信息与地图进行结合 5 4、 设置相关参数 5 5、 可视化方案 5 五、 可视化结果 5 1、 交战阵营可视化 6 2、 人口统计可视化 8 3、 死亡人数可视化 9 4、 时间顺序可视化 11 5、 人口损失情况可视化 13 六、 体会 15 题目 在的可视化课程结束的同时中,本人也开始了数据可视化的大作业的工作.大作业是 对前面学过的数据可视化技术的一个总结、回顾和实践。在开始设计前,本人回顾以前 所学的内容,明确了本次作业设计所要用到的技术点,成功完成了可视化期末大作业。 大作业要求从网络上下载一组数据(自行获取),选择一种可视化工具(Excel、Tab leau、Matlab、Echarts等),设计一种可视化方案实现该数据的可视化,并做适当的数 据分析(或挖掘)。 数据 本次实验中,我设计的是关于第二次世界大战的数据可视化。原数据为两张表,分别 存储了各个国家的人口牺牲情况与各个国家相互之间的战争具体时间、阵营、以及事件 。 其中国家数据来源于维基百科中World War II casualties词条下的表格,具体网址为:https://en。wikipedia。org/wiki/World_Wa r_II_casualties#cite_note—187。 而关于时间、阵营与事件的数据来源于维基百科的World War II词条下方的信息,具体网址为:https://en.wikipedia。org/wiki/World_War_II。 两张表之间都以excel形式存在,在导入Tableau数据库的时候,建立两表的关系并对 表进行说明。本人在建立过程前引入了一些编号变量,可以进行无视.下面是部分数据截 图,具体数据见随文档上交的excel文件. 可视化工具(哪一种,选择原因) 在这次的作业中本人选择的可视化工具为Tableau,选择该工具主要有以下原因: 1、快速创建交互式绘图。使用Tableau的拖拽式界面,可以在几分钟内创建许多漂亮 的可视化。这个界面可以操作无穷尽的变化,可以轻松解决项目。 2、交互式仪表盘。得到结果后可以简单的与结果进行交互,得到更加直观的结果。 3、实时的连接,在对原数据进行修改后,简单的刷新数据库就可以对全部的可视化结 果进行修改。 4、提供多种的可视化方法,不仅限于Excel的简单图,Tableau可以容易的与地图进行 连接,构建更加直观的图像。也可以直接选择不同的可视化方法,观察其中的优劣。 5、Tableau简单易学,可以快速掌握,简单的得出还算漂亮的图像。 可视化方案或可视化实现过程 1 导入数据并进行规范化 选择导入excel文件,然后整理文件的格式,让系统可以正常识别。 2 数据连接与整理 把excel表中的表和详细描述进行连接,然后清除掉多余或者无用的项,整理后的数 据见下图: 图4-1:交战情况表 图4—2:国家状况表 3 将地理信息与地图进行结合 把地理信息同具体的地图进行结合,在地图上解释原来数据中的地理信息. 4 设置相关参数 设置相关的参数,通过参数来确认相关的阈值,以及形成数据桶,更好的进行分类操 作。 5 可视化方案 1)对交战国战前、战时、战后的情况进行可视化,使用颜色区别阵营。 2)对交战国的人口与人口死亡率进行可视化,同时用不同的颜色标识死亡率大小。 3)对交战国具体的死亡人数进行可视化,用颜色深浅标识人数多寡. 4)对交战国总人口死亡情况进行可视化,设置阈值识别牺牲多寡,同时使用不同颜色 标示不同阵营与状态的牺牲人数。 5)对交战国具体事件与开战事件进行可视化,要求可以清楚的分辨开战时间的长短与 具体事件的先后. 6)对以上可视化内容,要求可以突出显示每一个交战国的具体情况。也可以根据阵 营或其他分类方法进行突出显示。 可视化结果 1 交战阵营可视化 使用了地图的模式,把每一个国家与对应的版图进行连接,其中比较麻烦的是有部分 国家政治环境发生了一些变化,导致国家的消失(如苏联、英联邦和南斯拉夫)因此要使 用其他的方法重现。下面是本人的阵营图界面: 下面是具体的操作演示与分析: 战前,1939年前的世界秩序,可以看到,一战中利益受损国从一战中走出,开始积极向周 围小国开战,各大利益集团利益开始冲突. 在欧洲,爆发了意识形态冲突,一战中失去了领土的战败国积极的对外扩张,法西斯 注意在战败国中间传播。十月革命后成立的苏联也积极对外进行意思形态的输出,同时 希望夺取原来属于沙皇俄国的遗产。西班牙意识形态斗争异常剧烈,从而爆发了内战. 非洲,意大
2018年 6 月 7 日 目录 一、 题目 4 二、 数据 4 三、 可视化工具(哪一种,选择原因) 4 、 可视化方案或可视化实现过程 4 1、 导入数据并进行规范化 4 2、 数据连接与整理 4 3、 将地理信息与地图进行结合 5 4、 设置相关参数 5 5、 可视化方案 5 五、 可视化结果 5 1、 交战阵营可视化 6 2、 人口统计可视化 8 3、 死亡人数可视化 9 4、 时间顺序可视化 11 5、 人口损失情况可视化 13 六、 体会 15 题目 在的可视化课程结束的同时中,本人也开始了数据可视化的大作业的工作。大作业是 对前面学过的数据可视化技术的一个总结、回顾和实践。在开始设计前,本人回顾以前 所学的内容,明确了本次作业设计所要用到的技术点,成功完成了可视化期末大作业。 大作业要求从网络上下载一组数据(自行获取),选择一种可视化工具(Excel、Ta bleau、Matlab、Echarts等),设计一种可视化方案实现该数据的可视化,并做适当的 数据分析(或挖掘)。 数据 本次实验中,我设计的是关于第二次世界大战的数据可视化。原数据为两张表,分别 存储了各个国家的人口牺牲情况与各个国家相互之间的战争具体时间、阵营、以及事件 。 其中国家数据来源于维基百科中World War II casualties词条下的表格,具体网址为:https://en.wikipedia.org/wiki/World_War_ II_casualties#cite_note-187。 而关于时间、阵营与事件的数据来源于维基百科的World War II词条下方的信息,具体网址为:https://en.wikipedia.org/wiki/World_War_II。 两张表之间都以excel形式存在,在导入Tableau数据库的时候,建立两表的关系并对 表进行说明。本人在建立过程前引入了一些编号变量,可以进行无视。下面是部分数据 截图,具体数据见随文档上交的excel文件。 可视化工具(哪一种,选择原因) 在这次的作业中本人选择的可视化工具为Tableau,选择该工具主要有以下原因: 1、快速创建交互式绘图。使用Tableau的拖拽式界面,可以在几分钟内创建许多漂亮 的可视化。这个界面可以操作无穷尽的变化,可以轻松解决项目。 2、交互式仪表盘。得到结果后可以简单的与结果进行交互,得到更加直观的结果。 3、实时的连接,在对原数据进行修改后,简单的刷新数据库就可以对全部的可视化 结果进行修改。 4、提供多种的可视化方法,不仅限于Excel的简单图,Tableau可以容易的与地图进 行连接,构建更加直观的图像。也可以直接选择不同的可视化方法,观察其中的优劣。 5、Tableau简单易学,可以快速掌握,简单的得出还算漂亮的图像。 可视化方案或可视化实现过程 1 导入数据并进行规范化 选择导入excel文件,然后整理文件的格式,让系统可以正常识别。 2 数据连接与整理 把excel表中的表和详细描述进行连接,然后清除掉多余或者无用的项,整理后的数 据见下图: 图4-1:交战情况表 图4-2:国家状况表 3 将地理信息与地图进行结合 把地理信息同具体的地图进行结合,在地图上解释原来数据中的地理信息。 4 设置相关参数 设置相关的参数,通过参数来确认相关的阈值,以及形成数据桶,更好的进行分类操 作。 5 可视化方案 1)对交战国战前、战时、战后的情况进行可视化,使用颜色区别阵营。 2)对交战国的人口与人口死亡率进行可视化,同时用不同的颜色标识死亡率大小。 3)对交战国具体的死亡人数进行可视化,用颜色深浅标识人数多寡。 4)对交战国总人口死亡情况进行可视化,设置阈值识别牺牲多寡,同时使用不同颜 色标示不同阵营与状态的牺牲人数。 5)对交战国具体事件与开战事件进行可视化,要求可以清楚的分辨开战时间的长短 与具体事件的先后。 6)对以上可视化内容,要求可以突出显示每一个交战国的具体情况。也可以根据阵 营或其他分类方法进行突出显示。 可视化结果 1 交战阵营可视化 使用了地图的模式,把每一个国家与对应的版图进行连接,其中比较麻烦的是有部分 国家政治环境发生了一些变化,导致国家的消失(如苏联、英联邦和南斯拉夫)因此要 使用其他的方法重现。下面是本人的阵营图界面: 下面是具体的操作演示与分析: 战前,1939年前的世界秩序,可以看到,一战中利益受损国从一战中走出,开始积极 向周围小国开战,各大利益集团利益开始冲突。 在欧洲,爆发了意识形态冲突,一战中失去了领土的战败国积极的对外扩张,法西斯 注意在战败国中间传播。十月革命后成立的苏联也积极对外进行意思形态的输出,同时 希望夺取原来属于沙皇俄国的遗产。西班牙意识形态斗争异常剧烈,从而爆发了内战。 非洲,意大

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值