侧边栏壁纸
博主头像
程彬彬博主等级

业精于勤 荒于嬉 行成于思 毁于随

  • 累计撰写 101 篇文章
  • 累计创建 26 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录
ELK

使用 Elastic Stack 监测COVID-19疫情

程彬彬
2020-04-12 / 0 评论 / 0 点赞 / 1,471 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-04-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

说明

根据elastic 公开课 来学习的 记录下加深映像
使用 Elastic Stack 监测COVID-19疫情爆发

体验地址
帐号:covid19
密码:chinav5

使用的 Elastic Stack 版本和环境如下

image

分析和展示丁香园数据

目标分析数据源是:

https://ncov.dxy.cn/ncovh5/view/pneumonia

这个也是我们最近一直在关注的关于中国的疫情公布平台

丁香园网页的数据被香港大学的 Isaac Lin 同学,通过他所开发的网络爬虫抓取加工后,用 API 的形式和 csv 数据文件的形式提供了出来,他的爬虫程序和结果数据给很多目前分析疫情的人带来了很大的帮助,有不少人去他的 blog 和 github 上点赞和评论的。

https://github.com/BlankerL/DXY-COVID-19-Data/tree/master/csv

https://lab.isaaclin.cn/nCoV/

导入数据并初始化索引

image
image.png
image.png

可以在 index name 中可以输入dxy-area-0412 作为本次新建的索引名称

然后删除默认的 Mapping 定义,输入下面的重新重定义的数据结构。

{

 "@timestamp": {
   "type": "date"
 },
 "continentEnglishName": {
   "type": "keyword"
 },
 "continentName": {
   "type": "keyword"
 },
 "countryEnglishName": {
   "type": "keyword"
 },
 "countryName": {
   "type": "keyword"
 },
 "provinceEnglishName": {
   "type": "keyword"
 },
 "provinceName": {
   "type": "keyword"
 },
 "province_confirmedCount": {
   "type": "integer"
 },
 "province_curedCount": {
   "type": "integer"
 },
 "province_deadCount": {
   "type": "integer"
 },
 "province_suspectedCount": {
   "type": "integer"
 },
 "province_zipCode": {
   "type": "integer"
 },
 "cityEnglishName": {
   "type": "keyword"
 },
 "cityName": {
   "type": "keyword"
 },
 "city_confirmedCount": {
   "type": "integer"
 },
 "city_curedCount": {
   "type": "integer"
 },
 "city_deadCount": {
   "type": "integer"
 },
 "city_suspectedCount": {
   "type": "integer"
 },
 "city_zipCode": {
   "type": "integer"
 },
 "level":{
   "type": "keyword"
 },
 "location": {
     "type": "geo_point"
 },
 "is_china": {
     "type": "boolean"
 },
 "updateTime": {
   "type": "date",
   "format": "yyyy-MM-dd HH:mm:ss"
 }
}

数据优化和及校准脚本

#维护is_china字段

POST dxy-area-m5/_update_by_query
{
 "script":{
   "lang": "painless",
   "source": """
      if (ctx._source.countryEnglishName == "China") {
        ctx._source.is_china = true;
      } else {
        ctx._source.is_china = false;
      }
   """
 }
}

#维护 level 字段,对于中国的数据来说,如果省的名字是中国这就是国家级的统计数据
POST dxy-area-m5/_update_by_query
{
 "script":{
   "lang": "painless",
   "source": """
     if(ctx._source.provinceName == ctx._source.countryName){
       ctx._source.level = "country"
     } else {
         if (ctx._source.cityName == null) {
           ctx._source.level = "cn-hmt"
         } else {
           ctx._source.level = "province"
         }
     }
   """
 }
}

#更新省的名字为国际代码
POST dxy-area-m5/_update_by_query
{
 "script":{
   "lang": "painless",
   "source": """
         if (ctx._source.provinceEnglishName == "Guangxi") {
           ctx._source.provinceEnglishName = "Guangxi Zhuang Autonomous Region";
         }
         if (ctx._source.provinceEnglishName == "Hong Kong") {
           ctx._source.provinceEnglishName = "HongKong";
         }

         if (ctx._source.provinceEnglishName == "Macao") {
           ctx._source.provinceEnglishName = "Macau";
         }

         if (ctx._source.provinceEnglishName == "Neimenggu") {
           ctx._source.provinceEnglishName = "Inner Mongolia";
         }

         if (ctx._source.provinceEnglishName == "Ningxia") {
           ctx._source.provinceEnglishName = "Ningxia Hui Autonomous Region";
         }

         if (ctx._source.provinceEnglishName == "Taiwan") {
           ctx._source.provinceEnglishName = "Taiwan Province";
           ctx._source.provinceName = "台湾省 (中华人民共和国)";
         }

         if (ctx._source.provinceEnglishName == "Xizang") {
           ctx._source.provinceEnglishName = "Tibet";
         }

         if (ctx._source.cityName == "境外输入人员") {
           ctx._source.cityName = "境外输入";
         }

   """
 }
}

可视化和数据展现

image.png

image.png

image.png

image.png

image.png

image.png

0
广告 广告

评论区