地理数据可视化探索——SLS的地图演变之路

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 伴随着阿里云日志服务(SLS)面向的客户群体不断变化,接入的日志数据种类日益增多,地理类数据成为了日志数据分析中越来越常见的一类数据形式。数据可视化应用的火爆发展,地理数据的可视化也萌发出了大量的需求,大规模地理数据可视化分析,从业务上来看一直是个难点,地理数据的存储,计算,分析,可视化,产品应用等各个方面都需要综合起来考虑。

前言

伴随着阿里云日志服务(SLS)面向的客户群体不断变化,接入的日志数据种类日益增多,地理类数据成为了日志数据分析中越来越常见的一类数据形式。数据可视化应用的火爆发展,地理数据的可视化也萌发出了大量的需求,大规模地理数据可视化分析,从业务上来看一直是个难点,地理数据的存储,计算,分析,可视化,产品应用等各个方面都需要综合起来考虑。本文将简单介绍一下日志服务在地理类日志数据可视化分析中的探索,并提供部分目前支持的地理类可视化工具demo。

有哪些地理类数据?

地理数据是直接或间接关联着相对于地球的某个地点的数据,地理类数据种类繁多,涉及的知识面也各不相同。比较学术类的就不展开,感兴趣的可以去同学可以了解一下GIS系统,就我们生活中常见的地理类数据无非就以下两种:

1. POI数据(Point of interest/Point of information)

POI数据,又称为信息点/兴趣点,常常出现在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、景点、找厕所等等的功能,生活中最常见的描述一个位置点的方式:

  • 阿里巴巴飞天园区
  • 浙江省杭州市西湖区云梦路与河山街交叉口西北角
  • 浙江省杭州市余杭区文一西路969号淘宝城一期

通过自然语言去描述一个位置信息,通俗易懂,各大地图类厂商都有自己的POI数据库,POI数据一般还有多种分类,如“餐饮服务”、“商务住宅”、“生活服务”等

POI描述位置信息

图(1).POI数据描述地理位置信息

2. Geo数据(Geography)

更加专业的地理信息描述方式,通过经度、维度、海拔相结合即可描述出一个三维空间的地理位置。在数字化地理信息中,我们经常能接触到诸如geo.json这一类数据用于描述一组地理位置信息的集合,常见的格式有:

  • ESRI Shapefile(shp)
    是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。该文件格式已经成为了地理信息软件界的一个开放标准。
  • GeoJSON
    GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式,web端友好
  • TopoJSON
    TopoJSON 是 GeoJSON 按拓扑学编码后的扩展形式。使用点、弧(有向线)来表示图形。

在线生成geoJson小工具

图(2).GeoJson描述地理位置信息

日志里的地理信息

了解了一些常见的地理类数据后,我们回归到日志领域,来看一下SLS在日志类信息中如何去做地理数据可视化分析。

1.早期的DevOps

谈到日志,我们最先想到的还是DevOps领域。在早期接入的各类数据源中,访问日志、错误日志、监控日志占据绝大多数,其中并没有直接和地理位置挂钩的信息数据,但我们能间接地通过一些常见的数据来推导地理位置信息,比如:

  • ip
  • 电话号码

基于此类需求,日志服务提供了丰富的ip函数和电话号码转换函数来处理这一类的信息并输出地理位置可视化图表

* | SELECT 
    mobile_city(try_cast("mobile" AS bigint)) AS "城市",
    mobile_province(try_cast("mobile" AS bigint)) AS "省份", 
    COUNT(1) as "请求次数" 
    GROUP BY "省份", "城市" ORDER BY "请求次数" DESC LIMIT 100

图(3).电话号码转换地图

* | SELECT
     ip_to_country(remote_addr) AS "国家", 
     count(1) AS c GROUP BY "国家" LIMIT 10

2. 逐渐成型的经纬度信息

随着日志种类的丰富,简单的地图不能完全满足用户的需求,主要的声音包括两种:

  1. 地图可视化过于简单,只能看到特定区域的总数,无法查看类似点图、热力图等更高阶的可视化分析
  2. 缺少事件,没办法变换维度

基于上述两个问题,日志服务着手进行了经纬度信息相关的配套研发:

* | SELECT 
    ip_to_geo(remote_addr) AS "经纬度", 
    COUNT(1) AS c GROUP BY "经纬度" LIMIT 100

支持经纬度之后,我们就可以直接分析日志中存在的经纬度信息了,并且通过一些列如split、concat去对应需要的属性列,同时地图类事件也得到了增强,变换地区的维度得到更细粒度的分析

* | SELECT arr[2] AS "经度", arr[1] AS "纬度", c FROM(
        SELECT split(r, ',') AS arr, c FROM(
            SELECT 
              ip_to_geo(remote_addr) AS r, 
              count(1) AS c FROM log GROUP BY r
          )) LIMIT 10

3. 更加自然的POI

对于通过自然语言描述地理位置的POI信息,我们也支持去识别并进行统计和可视化

* | SELECT poi, type LIMIT 1000
  • 数据源:
poi type
杭州市临安市杭州樱久工贸有限公司 公司企业;公司企业
杭州市余杭区IADO女装 购物;服饰鞋包
杭州市建德市交投公司 公司企业;公司企业
杭州市西湖区觉客O2O家居体验店(山姆会员店) 购物;家具家居建材
杭州市临安市东方罗马 运动健身;其它运动健身
...... ......

4. 轨迹和扩展

当地理位置结合日志特有的时间属性,就可以描绘出某一类别日志的轨迹地图,并根据时间的演变关系进行动态追踪。在这次新冠疫情的场景下,我们也结合了一部分确诊病人的行动轨迹点,进行了对应的轨迹可视化,简单且清晰:

id: 2 | SELECT 
    __time__,
    id,
    location,
    type,
    text ORDER BY seq ASC limit 10000

path1

图(8).轨迹地图

写在最后

地理位置的可视化对于日志服务的可视化系统来讲是必不可少的一环,目前我们地图发展到现在还有很大的发展空间,日志服务也一直致力于提供更好的日志可视化系统服务用户,如果对日志服务可视化感兴趣的同学可以参考具体的文档指引:

联系我们

如有任何问题也可以钉钉扫码进群联系我们,欢迎拍砖:
public

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
Rust 编译器 C语言
Rust安装手册
卸载 Rust 在任何时候如果您想卸载 Rust,您可以运行 rustup self uninstall。但我们会想念您的!
743 0
Rust安装手册
|
9月前
|
人工智能 自然语言处理 数据可视化
AI视频培训|格律诗AI 视频创作与自媒体传播——某诗词学会
近日,TsingtaoAI派驻专家团队为某诗词学会学员交付《格律诗AI 视频创作与自媒体传播》培训。本课程精准切中行业痛点——传统诗词创作与现代传播方式的断层。课程摒弃泛泛而谈,直击实操:首日聚焦"工具认知+创作逻辑",系统梳理即梦、可灵等国产AI工具在格律诗意象可视化中的差异化应用,如将"月光在指尖碎裂"转化为动态场景;次日深入"语音表达+自媒体运营",传授用魔音工坊生成情感化配音、坤行数字人打造诗人形象的秘技,更结合抖音、小红书平台特性,解析"前5秒高光片段设计"等流量密码。
786 3
|
XML 移动开发 前端开发
Canvas和SVG的区别
Canvas和SVG的区别
580 1
|
存储 SQL 关系型数据库
面试官:你能聊聊 binlog、undo log、redo log 吗?
本文详细解析了MySQL数据库中的三种日志:binlog、undo log和redo log。binlog用于记录数据库的所有表结构变更及数据修改,支持归档、主从复制和数据恢复;undo log用于事务回滚,确保事务的原子性和实现多版本控制;redo log则用于crash-safe,确保数据库异常重启后已提交记录不丢失。文章通过实例和图表,深入浅出地介绍了每种日志的特点、应用场景及其实现机制。适合数据库开发者和运维人员阅读。
1071 2
|
设计模式 缓存 Dubbo
一文读懂微内核架构
微内核是一种典型的架构模式 ,区别于普通的设计模式,架构模式是一种高层模式,用于描述系统级的结构组成、相互关系及相关约束。
1573 0
一文读懂微内核架构
|
Ubuntu Linux 网络安全
在Ubuntu 18.04上添加和删除用户的方法
在Ubuntu 18.04上添加和删除用户的方法
430 0
|
机器学习/深度学习 并行计算 PyTorch
轻量级网络——ShuffleNetV2
轻量级网络——ShuffleNetV2
1558 0
轻量级网络——ShuffleNetV2
|
Rust Linux 开发工具
Rust安装
该文介绍了如何在Linux、mac和Windows上安装Rust编程语言。在Linux和mac系统中,可以通过运行一个curl命令自动下载并安装;在Windows上,需从官方网站下载安装包。安装完成后,使用`rustc --version`检查Rust版本以确认安装成功。此外,还提到了如何更新Rust(使用`rustup update`)和卸载(使用`rustup self uninstall`)以及查看官方文档(运行`rustup doc`)。推荐的开发工具有Visual Studio Code和JetBrains CLion,需要安装Rust插件。
|
存储 Java 大数据
Springboot整合Minio实现文件上传和下载
Minio是一个灵活、高性能、开源的对象存储解决方案,适用于各种存储需求,并可以与云计算、容器化、大数据和应用程序集成。它为用户提供了自主控制和可扩展性,使其成为一个强大的存储解决方案。
2151 0
|
Web App开发 网络协议 算法
用Wireshark 分析打开网页发生了什么
用Wireshark 分析打开网页发生了什么
468 0