python 可视化_FME和Python下的疫情可视化

1 前言

  “经过艰苦卓绝的努力,武汉保卫战、湖北保卫战取得决定性成果”。作为一位普普通通的武汉市民和中年后浪,我百感交集。回想起写这篇文章的初衷,源于疫情期间居家隔离时的无所适从。当时偶然拿到一份xls数据,需要按时序进行数据清洗和阶段性统计。从面向对象的角度进行封装,循环,遍历,到绝望和放弃。后来跳出来一看,其实是一个分分钟能解决的问题。 

  • xls资深人士:透视表即可

  • FME高手:AttributePivoter一键完工

  • Python小哥:pandas包你满意

  人们的悲喜并不相通,诸多高手只觉得我吵闹。作为英雄城市的一名英雄人民,决定尝试用仅存的一点专业知识,结合FME和Python等工具,对COVID-19疫情数据进行分析整合和可视化展示。恰逢当时2020FME博客大赛正在征稿,既然选择一条最艰难的道路,只能沿着这个并不宏伟的蓝图干到底了。

        没有耐心看完本文可以直接访问博客地址https://blog.csdn.net/fmechina/article/details/105630776,并可点击我的外文版码云下载巡讲资料https://github.com/whgi2017/COVID-19。既然是图说新语的首篇小文,必须彰显图文并茂的主题,有声版在线巡讲奉上,现在不能刷火箭,但是在B站上一键三连是完全合情合理合乎逻辑的。 

        言归正传。世上无难事,只要肯放弃。咱们先从环境配置开始。

2 环境配置
2.1 基础软件

  Anaconda是一个用于科学计算的开源Python发行版本,提供跨平台的包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda作为一只“咬着自己尾巴的蟒蛇”,为python初学者提供了众多python科学包的集成闭合环式管理。下载地址:https://www.anaconda.com/products/individual#windows

  Anaconda随机安装了众多Python开发IDE,包括在ArcPy开发中使用甚广的所见即所得工具Jupyter Notebook。世人甚爱牡丹,有些人偏爱PyCharm。工具本身无优劣之分,既是目的也是手段。下载地址:https://www.jetbrains.com/pycharm/download/

2e6c3f1eec972301882690254f78e260.png

  Python科学计算门外汉依然需要求助于FME等工具,默默地留下了苦涩的泪水。fmepython下的转换器PythonCreator和PythonCaller虽不具备代码提示和代码完成等入门级IDE特性,但是能整合Python语言和FME平台各自优势,所以诸位先放下手中20米大刀完成FME Workbench安装。下载地址:http://www.fme-china.com/html/more-downloads.html

2.2 Python包安装
  • Anaconda装包:启动Anaconda Prompt,输入命令如conda install pkg

  • pip装包:启动cmd,输入命令如pip install pkg

  • 离线装包:访问https://pypi.org/,whl文件使用pip install pkg.whl安装。tar.gz解压后使用python setup.py install

2.3 跨平台交互

  此处跨平台指FME平台对ArcPy和Anaconda交互和集成。由于Safe公司官方建议用户使用第三方的Python Interpreter,所以我们当然要听官方的。需要使用Python 3版本的环境时直接指向Anaconda,如果需要调用ArcPy中方法指向Esri ArcGIS Python 2.7(也许以后要改名叫GeoScene ArcGIS Python 2.7)。

7b2c930239a486f8f04cf0069d91051d.png

0e48f545a049e5d53c595c196f6b3000.png

  跨平台交互必然涉及包迁移问题,最直(偷)接(懒)的方法就是复制和粘贴。简单粗暴的迁移方式也可以实现包离线安装。

6bcfec377927904d39815cbd1ff361a0.png

3 数据清洗

3.1 时空一体化清洗

  原始数据源自两个地址:https://github.com/BlankerL/DXY-COVID-19-Data、https://github.com/CSSEGISandData/COVID-19。由于最初疫情公布机制尚未健全,以及程序猿为保证数据完整性所做的精细设计,所以疫情数据尤其是1月底2月初的疫情数据每日会爬取多次,造成数据大量冗余,因此时空数据清洗势在必行。精通面向数组的编程和思维方式是成为Python科学计算牛人的一大关键步骤,可惜我现在不精通。此处借助FME实现数据清洗,数据清洗流程如下。

  1. 以省份和城市为组,按爬取时间排序;

  2. DateTimeParse函数输出FME格式的时间字符串:@DateTimeParse(@Value(updateTime),%Y-%m-%d,repair);

  3. DateTimeDiff函数计算相邻记录的时间差:@DateTimeDiff(@Value(feature[+1].updateDate),@Value(updateDate),days);

  4. 过滤提取时间差值为1或为空的记录。

3.2 时空数据扇出

  按照省份扇出符合过滤条件的数据,数据以FME格式的日期字符串命名,便于后续进行时空可视化展示。

4 COVID-19可视化

  作为一名测绘地理信息从业者,此处复习了《地图审核管理规定》2019修正版。原文第七条如下:


国务院自然资源主管部门负责下列地图的审核:

(一)全国地图;

(二)主要表现为两个以上省、自治区、直辖市行政区划的地图

(三)香港特别行政区地图、澳门特别行政区地图以及台湾地区地图;

(四)世界地图以及主要表现地为国外的地图;

(五)历史地图。


  在中华人民共和国境内公开出版地图、引进地图、展示、登载地图以及在生产加工的产品上附加的地图图形的单位和个人,必须拿到自然资源部核发的地图审核批准文件和审图号。我相信echarts设计者是有审图号的,但是本文中将不再出现涉及国界线地图。

4.1 pyecharts简介

  Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。将数据分析与数据可视化结合,pyecharts的用武之地完全凸显出来了。pyecharts中“一切皆可配置”,用户通过设置全局配置项和系统配置项等,可以轻松便捷地实现pyecharts的初始化和集成展示。

4.2 pyecharts可视化
  • Overlap叠加不同类型图表

    自定义湖北省疫情时序化柱状图bar和饼状图pie,使用如下代码将bar和pie叠置显示。

96b349c9393c4e75ff923a3f860a4af8.png

  • Timeline整合Map和Bar

    自定义湖北省COVID-19疫情时序化地图map和柱状图bar,使用grid将map和bar整合,最后设置timeline属性。

    grid_chart = (    Grid()        .add(        bar,        # bar所在位置(pos_bottom="1"隐藏底部横轴)        grid_opts=opts.GridOpts(            pos_left="5", pos_right="75%", pos_top="30%", pos_bottom="1"        ),    )        .add(map_chart, grid_opts=opts.GridOpts()))
    timeline = Timeline(        init_opts=opts.InitOpts(width="1350px", height="600px", theme=ThemeType.DARK)    )    csv_dir = r'{}\湖北省疫情3月'.format(os.path.dirname(os.getcwd()))    csv_files = os.listdir(csv_dir)    for i in csv_files:        csv_ap = f'{csv_dir}\{i}'        g = get_day_chart(csv_ap, i)        timeline.add(g, time_point="{}".format(i[5:10]))    # 配置tl属性:位置,宽度,字体大小    timeline.add_schema(        orient="horizontal",        is_auto_play=True,        play_interval=5000,        pos_left="150",        width="1000",        # "#fff"白色字体        label_opts=opts.LabelOpts(is_show=True, color="#fff",font_size = 20),    )

8bc9f8de139c4787b65aa877864678a2.png

  • Tab集成展示

    将COVID-19可视化效果集成展示到Tab控件中。

7d8f1a2a7a3a8c96b8e916efbff22dca.gif

5 结束语

        引用《抗击新冠肺炎疫情的中国行动》白皮书结束语作为本文结尾中华民族历经磨难,但从未被压垮过,而是愈挫愈勇,不断在磨难中成长、从磨难中奋起。面对疫情,中国人民万众一心、众志成城,取得了抗击疫情重大战略成果。中国始终同各国紧紧站在一起,休戚与共,并肩战斗。

        得到的都是侥幸,失去的才是人生。下篇见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值