利用FME将腾讯的历史疫情数据生成可视化前端页面

这篇博客其实是一份大杂烩,一开始我是想做一个可视化分析报表的,但是由于这是一个动态更新的数据,我花了很大一部分时间在整合数据上面。

首先,在对疫情历史数据可视化之前我们需要明白一个问题。

以下是关于疫情数据的一个说明,简单的来说,因为疫情数据在实时更新的原因,每个省市的实时统计数据,与卫健委公布的数据会有一定的偏差。这就是困扰我好几天的一个问题,为什么我做的可视化图表有一些细节的地方对不上……

利用FME将腾讯的历史疫情数据生成可视化前端页面


一、数据获取

数据获取方面,我用的是之前FME基础培训直播群里面的一切安好大佬讲解的在腾讯网获取历史疫情数据的方法,具体方法就不再多说。只简单的讲一下。

利用FME将腾讯的历史疫情数据生成可视化前端页面

将获取的腾讯标准的各省名称用TextEncoder进行编码,利用HTTPCaller的get方法访问https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=

在province=后添加对应的每个省名称编码,然后用JSONFragmenter转换器解析获取的疫情历史数据即可。

 

利用FME将腾讯的历史疫情数据生成可视化前端页面

以下是我从腾讯得到的疫情历史数据,仔细分析会发现,某些地区的数据并不是完整的,会缺失某一两天的数据,有可能是在中间,也有可能是最新的一两天数据,在这个情况下,怎么去补充缺失的这几天的数据,是一个难点。

利用FME将腾讯的历史疫情数据生成可视化前端页面

 

二、补充缺失数据

通过连续几天的历史数据的和腾讯网站的图表分析,我发现,缺失的数据有一部分原因是因为该地区当天没有变化,所以在统计的时候,是默认用的前一天的数据来进行统计。(这就是导致我最终可视化报表对不上的一个原因,目前只能做参考,无法使用)

首先,我们捋一下思路,基本上这个补充数据的原则就是,如果该地区某一天缺少数据,那就沿用上一天的数据,如果上一天还是没有,则补充上上一天的数据并依次类推。

这个补充数据的逻辑和之前网络课程作业检查跳号非常相似,可以看作是一个那个练习作业的加强版。

1.补充当天缺失数据

补缺失数据,先要补充当天缺失的数据,以便遍判断前一天数据是否有缺失(这也是一个坑),据我统计发现,某些地区当天没有数据没有变化腾讯的历史数据就不会更新,可能会存在缺失最新的一两天或者更多时间的数据。

利用FME将腾讯的历史疫情数据生成可视化前端页面

先给获取到的各省数据去重,腾讯的疫情历史数据同一天内会有重复数据,然后用Sorter转换器按每个省,日期从晚到早进行排序。

利用FME将腾讯的历史疫情数据生成可视化前端页面

 

用DateTimeStamper获取当前日期,AttributeCreator启动相邻要素,创建一个是否是最新日期属性“IsFirst”,判断如果存在上一个要素,且省province与上一个要素的province相同,则不为该省的最新数据,反之则是,赋值为Y。

利用FME将腾讯的历史疫情数据生成可视化前端页面

查看运行结果我们给每一个省的最新一天数据,都做了相应的标识。

利用FME将腾讯的历史疫情数据生成可视化前端页面

然后用tester转换器,找到最新一天数据且与当前日期_timestamp不相等的,利用 AttributeCreator转换器将日期改为当前日期。

 

2.补充其他日期缺失数据

利用FME将腾讯的历史疫情数据生成可视化前端页面

 

将补充的当天数据和原始数据整合,sort排序之后,用AttributeCreator启动相邻要素,给每一条要素赋值为上一条要素的时间。

利用FME将腾讯的历史疫情数据生成可视化前端页面

利用FME将腾讯的历史疫情数据生成可视化前端页面

当上一条要素的时间和该要素不相符,那就代表着中间则缺失了数据。

用tester转换器判断,找到上一条数的日期减去一天即“NextDay-1”和date不同的要素。时间的加减需要用到@DateTimeAdd()函数,其中第一个参数为时间,后一个参数为需要加的时间,具体写法为@DateTimeAdd(@Value(NextDay),-P1D)。

利用FME将腾讯的历史疫情数据生成可视化前端页面

下一步,就是如何去补充缺失的数据了,

创建AddMissDate的自定义转换器,利用循环的方法增加补充缺失数据,这个循环非常简单就两个转换器。

利用FME将腾讯的历史疫情数据生成可视化前端页面

首先判断当前date属性加一天,是否等于NextDay,如果不,则用AttributeCreator转换器将这些数据的date日期加一天(时间增加函数为@DateTimeAdd(@Value(date),P1D)),修改confirmadd属性为空,并且输出这些数据。然后继续循环,直到满足条件为止。

整体这个方法其实和之前网络课程作业查跳号并输出的方法基本上是一样的,只不过相对复杂一点,将数字的加减改为日期的加减。

 

三、数据可视化

利用FME将腾讯的历史疫情数据生成可视化前端页面

用StatisticsCalculator统计每日疫情数据的总和,排除当前日期记录,因为当前日期的疫情数据一直在更新,如果放到报表里,会有很大的误导性,这也是为什么包括各大网站的数据统计表格都只统计到了前一天,甚至更早的原因。

 

最终的数据可视化,我选择的是利用HTMLReportGenerator转换器生成html前端页面的方法。如果是用这个转换器,推荐19FME,这里经我测试,18的环境下,中文字符存在编码问题。

具体参数设置,在帮助文档讲解的很清楚,我这里就简单的说一下生成一个累计确诊的例子。

在左侧栏选择报表类型Chart (Line),右侧X Axis Label输入x轴标签,X Axis Label输入y轴标签,X Tick Label Attribute输入X轴需要使用的数据,Data Series设置需要使用的y轴,数据以及线条颜色(如果是在同一个表内生成多个折线图,)即可生成对应的曲线表。

利用FME将腾讯的历史疫情数据生成可视化前端页面

然后用html写模块写出数据,这一步需要注意的一点是,最好用html写模块,而不是txt写模块,因为默认编码为ANSI,即便html页面里声明了编码,一样会有问题。(本文的每一个推荐都是我趟的雷)

最终效果如下:

利用FME将腾讯的历史疫情数据生成可视化前端页面

利用FME将腾讯的历史疫情数据生成可视化前端页面

利用FME将腾讯的历史疫情数据生成可视化前端页面

利用FME将腾讯的历史疫情数据生成可视化前端页面

在利用fme生成可视化报表的方法有很多,同样可以在ppt,或者excel里生成统计表,(需要事先做好模版),还能ChartGenerator转换器直接生成一个统计图的栅格数据,最后写到jpg格式或者PDF里面去,这里我就选择另一个简单的方法。