《新冠肺炎地级市疫情图》中的产品细节

前几天肺炎在全国迅速传播,我会时不时看一下周边城市是不是已经被病毒入侵了。这时我想,如果能做一个地级市的疫情地图,看起来会比读表格方便很多。于是我使用权威媒体的数据绘制了疫情图。最终的网页效果在 这里 。下面记录了一些在此过程中我觉得有意思的细节。

内嵌权威媒体

我希望产品能“全面/准确/方便”地给用户信息。我自己画的地级市地图能够在“方便”这个维度给用户更多价值。考虑到前两个维度,我不该重新造一遍轮子,来把现有的数据重新可视化,而应当在网页内嵌一个权威媒体,如腾讯的疫情新闻页。这样用户来了之后,他得到的信息是腾讯新闻的超集。相反,如果我的网页只提供一个地级市疫情地图,那这个东西可以说是没那么有用的,应该只有非常少的用户愿意为了这个可有可无的功能,来收藏和访问这个网页。

显示“最后更新时间”

有人问 为什么要五分钟更新一次,似乎没有必有,完全可以数据变动再更新。正如那里我回答的,不断变化的“最后更新时间”,是一种“反触发系统“,它用来表示系统状态是正常的。这个“最后更新时间”既是给我自己看的,也是给网页的用户看的。对我自己而言,我自己的开发资源有限,没办法做一个完善可靠的监控系统,让它在系统异常时候通知我,相比之下,让程序每五分钟告诉我系统是正常的,简单得多,也可靠得多。对用户而言,“最后更新时间”也会给他们信号:系统正常运行,数据可靠可信。

展示

病例数展示

在点击地图的时候,会显示位置所在省份的每个城市的病例数据,另外点击位置所在的城市的结果一定会显示出来,不会被挤掉。例如点击无锡,“无锡市:3”一定会显示出来,一定不会被旁边很接近的“苏州市:5”覆盖掉。另外,我开始想过是不是要直接显示全国每个城市的结果,但后来觉得过于密密麻麻,最终放弃了这个选项。现在只有用户第一次点击之后,才开始显示相关省份的结果。

桌面浏览器

在桌面浏览器版本中,地图的大小是特意调过的。保证了桌面浏览器的用户,能看到网页下方有个“腾讯新闻”的上边沿,这暗示他们可以往下看,看看下面的权威媒体数据,这样不容易被用户忽视掉。

特例处理

真实世界的数据不总是干净而统一的,常常需要特判“脏数据”。这里特殊处理有两处,一处是直辖市的行政级别和普通省份不一致,二是地名如何统一对应到国家标准地名。

直辖市数据处理

直辖市处理需要额外的工作量。现在代码中,京津沪没有细分区县,只有重庆细分了区县,原因是重庆面积比较大,疫情比较严重,而且恰好 JackyRen 帮写了重庆分区县绘图的代码。在后来新增的地图显示病例数功能中,我近一步对重庆城区和重庆郊县区别对待,前者作为一个整体统计显示,后者分开处理。因为重庆城区比较集中,统计上和显示上,分开似乎都没有必要。好比单独统计崇文区宣武区闸北区,有什么意义?

地名标准化

地名处理中,输入是新闻媒体中编辑手动写的地名,输出是国家标准地名。共有三种优先级从高到低的方法来顺次处理,前面的优先级高的方法没法处理时,才会使用后面的优先级低的方法尝试。

  • 第一步是我自己手工维护的特判规则,如“满洲里”直接对应“呼伦贝尔市”。
  • 第二步是判断输入的地名,它本身或者加个“市”字,是不是恰好准确匹配到一个有效的地名?如果还是没有找到匹配,则进入第三步。
  • 第三步通过输入城市地名的前两个字和所有标准城市地名的前两个字做模糊匹配,这种方法可以处理“恩施州”到“恩施土家族苗族自治州”这样的转换。虽然我统计发现所有标准地名的前两个字是唯一的,因此这种模糊匹配方法理论上是没有问题的(除了张家口市/张家界市,阿拉尔市/阿拉善盟两对,不过它们会在前面两步中处理掉),但保险起见,最终还是把每次模糊匹配的输入和输出记录下来,我定期会人肉检查确保模糊匹配的正确性。
  • 最后,对于某些输入,如果经过前三步还没有找到匹配的标准地名,程序会记录下该输入无法被处理,这条病例数据就会被暂时丢弃。我会定期检查这些不能处理的地名,手动加到第一步的规则中,如新疆“第七师”到“塔城地区”这种。

Published: January 29 2020

  • category:
  • tags: