实现根据gps数据计算停留点udaf函数

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 该内容是关于在Maxcompute平台上使用Python编写的UDAF(用户自定义聚合函数)来处理GPS轨迹数据,以计算停留点信息。函数`ret_tld_by_gps`接收经纬度、速度和时间戳等参数,通过排序和时间差判断,识别出停留超过10分钟且不超过40分钟的点,并返回这些停留点的详细信息。代码中包含了数据处理和时间差计算,适用于大数据分析场景。欢迎反馈和指正。

1.梳理、总结经纬度处理在Maxcompute平台上的实战应用,如根据gps轨迹数据计算停留点信息。
2.欢迎批评指正,跪谢一键三连!

1.参考代码

  •   #!/usr/bin/env python
      # coding: utf-8
    
      import numpy as np
      from odps.udf import annotate
      from odps.udf import BaseUDAF
      from datetime import datetime
    
      @annotate('string,string,double,string->string')
      class ret_tld_by_gps(BaseUDAF):
          """计算停留点"""
          def new_buffer(self):
              return []
          def iterate(self, buffer, lati, longi, speed, gpstime):
              buffer.append([lati, longi, speed, gpstime])
          def merge(self, buffer, pbuffer):
              buffer += pbuffer
          def terminate(self, buffer): 
              buf = np.array(buffer)
              # try:
              buf2 = buf[:, 3]
              # return '%s %s %d %d' % (type(buf), type(buffer), buf.shape[0], buf.shape[1])
              index = np.lexsort((buf2,))
              buf3 = buf[index]
              # return '%s %d %d' % (','.join(buf3[0]), buf3.shape[0], buf3.shape[1])
              tld = []
              cnt, total_cnt, _flag = 0, 0, 0
              lati ,longi ,speed ,first_gpstime ,last_gpstime  = '','',0.0,'',''
              for rw in buf3:
                  total_cnt += 1
                  if float(rw[2])>0:
                      if _flag==1: # 速度变化点
                          if cnt==1:
                              last_gpstime = first_gpstime
                          # return '114, %d %s %d ' % (_flag, str(rw[2]), _flag)
                          # if (first_gpstime<>'') and (last_gpstime<>''):
                          diff_time = (datetime.strptime(last_gpstime, "%Y-%m-%d %H:%M:%S")-datetime.strptime(first_gpstime, "%Y-%m-%d %H:%M:%S")).seconds
                          # tld.append(','.join([lati, longi, first_gpstime, last_gpstime, '%.2f' % (diff_time/60.0) , str(cnt)]))
                          if (diff_time>=600) and (diff_time<=2400):
                              tld.append(','.join([lati, longi, first_gpstime, last_gpstime, '%.2f' % (diff_time/60.0) , str(cnt)]))
                          _flag, cnt = 0, 0
                  elif float(rw[2])<=0: # 起始停留时间
                      cnt += 1
                      if _flag==0: # 持续为0点轨迹点
                          lati, longi = rw[0], rw[1]
                          first_gpstime, _flag = rw[3], 1
                      else:
                          last_gpstime = rw[3]
              if cnt!=1:
                  # print('')
                  # if (first_gpstime<>'') and (last_gpstime<>''):
                  diff_time = (datetime.strptime(last_gpstime, "%Y-%m-%d %H:%M:%S")-datetime.strptime(first_gpstime, "%Y-%m-%d %H:%M:%S")).seconds
                  if (diff_time>=600) and (diff_time<=2400):
                      tld.append(','.join([lati, longi, first_gpstime, last_gpstime, '%.2f' % (diff_time/60.0) , str(cnt)]))
              # return '%s' % (str(total_cnt))
              return '%s' % (';'.join(tld))
    
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
3月前
|
JSON 数据可视化 数据挖掘
Polars函数合集大全:大数据分析的新利器
Polars函数合集大全:大数据分析的新利器
148 1
|
2月前
|
SQL 消息中间件 分布式计算
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
41 0
|
5月前
|
分布式计算 自然语言处理 大数据
MaxCompute操作报错合集之使用pyodps读取全表(百万级),然后对其中某列apply自己定义的分词函数,遇到报错,该如何排查
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
SQL 分布式计算 数据处理
MaxCompute操作报错合集之使用Spark查询时函数找不到的原因是什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
分布式计算 监控 大数据
MaxCompute产品使用合集之CASE WHEN语句如何开窗函数一起使用
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
106 2
|
6月前
|
分布式计算 大数据 调度
MaxCompute产品使用问题之为什么用python写的udf函数跑起来比本地还要慢
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
机器学习/深度学习 分布式计算 DataWorks
MaxCompute产品使用问题之如何在UDF函数中访问外网
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之建了一个python 的 UDF脚本,生成函数引用总是说类不存在,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之在创建SQL函数时,遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
232 0
|
6月前
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
298 0

相关产品

  • 云原生大数据计算服务 MaxCompute