文档首页 > > 最佳实践> 使用DLI进行车联网场景驾驶行为数据分析

使用DLI进行车联网场景驾驶行为数据分析

分享
更新时间:2020/08/03 GMT+08:00

业务场景介绍

  • 场景描述

    2016年,全国机动车保有量有3亿多辆,其中,载货车1400多万辆,商用车3000多万辆,大中小型车队也在100万以上。对于这些车辆的管理来说,目前存在着管理粗放的现状,比如,司机偷油、违规驾驶、消极怠工等问题,其中30%的油耗成本、45%的保险费用、90%的事故都是由于不良驾驶行为以及管理不到位导致。

    基于成本压力和政府监管的要求,车辆精细化管理成为大势所趋。现在,在车联网技术的支持下,可以利用云计算、大数据强大的分析挖掘能力,辅助企业和车队管理者更加科学、方便、快捷地对车队进行管理。

  • 场景方案
    图1 场景方案
  • 场景任务

    根据已有的某货运公司车辆定时上报的详单数据和货运订单数据,DLI可以完成对该货运公司车辆行驶轨迹、违规记录明细的查询。

  • 数据说明
    • 详单数据

      车辆上报的详单数据,包括定时上报的位置记录和异常驾驶行为触发的告警事件数据。

      表1 详单数据

      字段名称

      字段类型

      字段说明

      driverID

      string

      驾驶员ID

      carNumber

      string

      车牌号

      latitude

      double

      纬度

      longitude

      double

      经度

      speed

      int

      速度

      direction

      int

      方向

      siteName

      string

      地点

      time

      timestamp

      记录上报时间

      isRapidlySpeedup

      int

      急加速标识,“1”表示急加速,“0”表示非急加速

      isRapidlySlowdown

      int

      急减速

      isNeutralSlide

      int

      空挡滑行

      isNeutralSlideFinished

      int

      空挡滑行结束

      neutralSlideTime

      bigint

      空挡滑行时长

      isOverspeed

      int

      超速

      isOverspeedFinished

      int

      超速结束

      overspeedTime

      bigint

      超速时长

      isFatigueDriving

      int

      疲劳驾驶

      isHthrottleStop

      int

      停车轰油门

      isOilLeak

      int

      偷油漏油

    • 订单数据

      订单数据记录了货运订单相关的信息。

      表2 订单数据

      字段名称

      字段类型

      字段说明

      orderNumber

      string

      订单号

      driverID

      string

      驾驶员ID

      carNumber

      string

      车牌号

      customerID

      string

      客户ID

      sourceCity

      string

      出发城市

      targetCity

      string

      到达城市

      expectArriveTime

      timestamp

      期望送达时间

      time

      timestamp

      记录产生时间

      action

      string

      事件类型,包括创建订单、开始发货、货物送达、订单签收等事件

流程介绍

使用DLI进行驾驶行为数据分析的操作过程主要包括3个步骤:

步骤1:注册账号。使用DLI对数据进行分析之前,需要注册华为云账号并进行实名认证。

步骤2:上传数据。将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。

步骤3:分析数据。使用DLI对待分析的数据进行查询。

步骤1:注册账号

注册华为云账号并进行实名认证。

注册账号具体步骤可参考账号注册

实名认证具体步骤可参考实名认证

如果您已完成华为云账号注册和实名认证,可跳过该步骤。

步骤2:上传数据

将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。
  1. 下载OBS Browser+。下载地址请参考《对象存储服务工具指南》。
  2. 安装OBS Browser+。安装步骤请参考《对象存储服务工具指南》。
  3. 登录OBS Browser+。OBS Browser+支持AK方式登录,以及授权码登录两种登录方式。登录步骤请参考《对象存储服务工具指南》。
  4. 通过OBS Browser+上传数据。

    在OBS Browser+页面单击“创建桶”,按照要求选择“区域”和填写“桶名”(例如:DLI_demo),创建桶成功后,返回桶列表,单击桶DLI_demo。OBS Browser+提供强大的拖拽上传功能,您可以将本地的一个或多个文件或者文件夹拖拽到对象存储的对象列表或者并行文件系统的对象列表中;同时您也可以将文件或文件夹拖拽到指定的目录上,这样可以上传到指定的目录中。

步骤3:分析数据

使用DLI对待分析的数据进行查询。

  1. 创建数据库、表
    1. 在Console页面上方菜单栏中单击“产品”,单击“EI企业智能”分类中的“数据湖探索”。
    2. 创建demo数据库,在DLI控制台总览页面,选择“SQL作业”,单击“创建作业”,进入SQL作业编辑器。
    3. 在SQL作业编辑器左侧,选择“数据库”,单击创建数据库,请参见图2
      图2 创建数据库

      “default”为内置数据库,不能创建名为“default”的数据库。

    4. 选择demo数据库,在编辑框中输入以下SQL语句:
      create table detail_records(
        driverID String,
        carNumber String, 
        latitude double,
        longitude double,
        speed int,
        direction int,
        siteName String,
        time timestamp,
        isRapidlySpeedup int,
        isRapidlySlowdown int,
        isNeutralSlide int,
        isNeutralSlideFinished int,
        neutralSlideTime long,
        isOverspeed int,
        isOverspeedFinished int,
        overspeedTime long,
        isFatigueDriving int,
        isHthrottleStop int,
        isOilLeak int) USING CSV OPTIONS (PATH 'obs://DLI-demo/detail-records/');

      请注意,将SQL语句中的文件路径修改为实际存放详单数据的OBS路径。

    5. 单击“执行”,创建详单表detail_records,请参见图3
      图3 创建详单表
    6. 执行以下SQL语句,在demo数据库下创建告警事件表event_records,步骤同1.d
      create table event_records(
        driverID String,
        carNumber String, 
        latitude double,
        longitude double,
        speed int,
        direction int,
        siteName String,
        time timestamp,
        isRapidlySpeedup int,
        isRapidlySlowdown int,
        isNeutralSlide int,
        isNeutralSlideFinished int,
        neutralSlideTime long,
        isOverspeed int,
        isOverspeedFinished int,
        overspeedTime long,
        isFatigueDriving int,
        isHthrottleStop int,
        isOilLeak int) 
    7. 执行以下SQL语句,将告警事件数据从详单中抽取出来插入到event_records表中。
      insert into table event_records
      (select *
      from detail_records
      where isRapidlySpeedup > 0
      OR isRapidlySlowdown > 0
      OR isNeutralSlide > 0
      OR isNeutralSlideFinished > 0
      OR isOverspeed > 0
      OR isOverspeedFinished > 0
      OR isFatigueDriving > 0
      OR isHthrottleStop > 0
      OR isOilLeak > 0)
    8. 使用另一种方式创建订单表order_records,单击表菜单右边的加号,创建表,数据位置选择DLI,请参见图4。字段类型请参见 详单数据
      图4 创建订单表
    9. 将OBS数据导入到order_records表,单击“数据管理”,展开demo数据库,单击order_records表,单击“导入”按钮,数据存放路径“obs://DLI-demo/order-records/”。默认时间戳格式为“yyyy-MM-dd HH:mm:ss”,若采用其他日期格式,可打开“高级选项”手动输入。完成后单击“确定”。请参见图5
      图5 导入表数据
  2. 执行查询
    1. 执行以下SQL语句,对所有司机在某段时间的违规驾驶行为(异常告警事件)进行统计;常用查询语句可以设置为模板,下次查询的时候在模板管理页面可以查看,请参见图6。单击“执行”会跳转到SQL语句编辑器,修改查询条件可以很方便地查找对应的数据。
      select
        driverID,
        carNumber,
        sum(isRapidlySpeedup) as rapidlySpeedupTimes,
        sum(isRapidlySlowdown) as rapidlySlowdownTimes,
        sum(isNeutralSlide) as neutralSlideTimes,
        sum(neutralSlideTime) as neutralSlideTimeTotal,
        sum(isOverspeed) as overspeedTimes,
        sum(overspeedTime) as overspeedTimeTotal,
        sum(isFatigueDriving) as fatigueDrivingTimes,
        sum(isHthrottleStop) as hthrottleStopTimes,
        sum(isOilLeak) as oilLeakTimes
      from
        event_records
      where
        time >= "2017-01-01 00:00:00"
        and time <= "2017-02-01 00:00:00"
      group by
        driverID,
        carNumber
      order by
        rapidlySpeedupTimes desc,
        rapidlySlowdownTimes desc,
        neutralSlideTimes desc,
        neutralSlideTimeTotal desc,
        overspeedTimes desc,
        overspeedTimeTotal desc,
        fatigueDrivingTimes desc,
        hthrottleStopTimes desc,
        oilLeakTimes desc
      图6 设置模板
    2. 执行以下SQL语句,查询某个司机在某个时间段的详细违规记录。
      select
        *
      from
        event_records
      where
        driverID = "panxian1000005"
        and time >= "2017-01-01 00:00:00"
        and time <= "2017-02-01 00:00:00"
    3. 执行以下SQL语句,查询订单信息。
      select
        *
      from
        order_records
      where
        orderNumber = "2017013013584419488"
      order by
        time desc
    4. 执行以下SQL语句,根据司机和发车时间信息查询司机详细轨迹。
      select
        driverID,
        carNumber,
        latitude,
        longitude,
        siteName,
        time
      from
        detail_records
      where
        driverID = "zouan1000007"
        and time > "2017-01-30 16:00:00"
        and siteName IS NOT NULL
      order by
        time desc
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问