实时即未来,大数据项目车联网之车辆驾驶行程分析(13)

举报
Maynor学长 发表于 2022/10/31 12:31:38 2022/10/31
【摘要】 theme: smartblue持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情 车辆驾驶行程分析 驾驶行程分析业务逻辑星途车联网项目大数据平台,包含数据源数据存储pipeline实时业务指标统计分析数据存储分层数据可视化我们已经学习了原始数据实时ETL部分,数据存储在hive和hbase中,这部分数据对应hive数仓分层中的ODS层,本章内...

theme: smartblue

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

车辆驾驶行程分析

驾驶行程分析业务逻辑

星途车联网项目大数据平台,包含

数据源

数据存储pipeline

实时业务指标统计分析

数据存储分层

数据可视化

我们已经学习了原始数据实时ETL部分,数据存储在hive和hbase中,这部分数据对应hive数仓分层中的ODS层,本章内容围绕驾驶行程主题分析展开。

1 车联网项目数据存储分层设计

ODS层数据来源于车辆上报原始json实时ETL后的数据,DW(DWD)数据存储指标明细数据与维度分析拉宽表数据,来源于车联网业务主题分析结果数据。DM(APP)层来源于DW层转换数据,或ODS层数据通过分析直接得出DM层数据。

l ODS:原始数据层

l DW(DWD):数据仓库层(数据表明细层,由DW层拆分出来)

  • 主题业务结果数据,针对主题业务结果的宽表数据或主题业务结构明细数据

l DM(APP):数据集市层(可用于可视化指标存储层)

image-20221018195112154

2 车辆驾驶行程定义

1 驾驶行程业务简介

车辆在一定时间内行驶的里程称为行程,车辆行程由载重行程和空车行程构成。

  • 例子:隔壁老王周五准备下班时,开始下雨,于是准备开车去接女友到餐馆吃饭,刚刚行驶五分钟,老王的基友老郝打电话给他,老王把车停在安全的地方,接老郝的电话,老郝告诉老王到他们公司附近的咖啡店坐一坐,共商“赚钱大计”(日常互吹),老王于是继续开车到老郝公司附近的咖啡店,半个小时,又从咖啡馆开车到女朋友的公司,短暂停顿后,开车去餐馆吃饭,去了一个餐馆,发现需要等很久,等了十分钟后,不愿意继续等,他们驾车去另外一个餐馆吃饭,吃完饭,然后开车回家。

u 问题:此例子中,有多少个驾驶行程?

通常认为,行程指用户在一定时间内,连续的、不间断的驾驶车辆进行移动行为。根据停车时间超过15分钟划分行程。

  • 原因:行程划分分别按照5min、10min、15min、20min对数据进行行程划分,得到A、B、C、D类数据,通过F检验判断各个数据是否有显著性差异,即比较数据中各个变量的方差是否有显著性差异;通过t检验验证各个变量的均值是否相等。通过F检验和t检验验证发现按照15min划分行程,与其他时间划分的行程数据存在显著性差异,故按照15min来划分行程。
  • 时间上,对行程划分时间的选择,是通过统计概率进行计算出来

n T检验与F检验:

u T检验:

爱尔兰都柏林有一家健力士公司,该公司员工 威廉·希利·戈斯特 提出了t检验以降低啤酒质量监控成本,但健力士公司为保护公司利益,不允许员工发布此类文章。戈斯特并没有放弃对t检验的研究,并以”The Student”为笔名,发表关于t检验的文章,所以t检验又称为“学生t检验”

l t检验在啤酒厂的应用,啤酒的主要原料是大麦,如要提高啤酒产量,必须提高大麦的亩产量,下图中左边的麦田是用传统工艺(每珠大麦100粒穗子),右边的麦田使用改良工艺(5珠大麦,平均每珠120粒穗子),直观看,产量提示20%。

  • 戈斯特提出一个假设检验

u 假设:改良工艺没有提高产量

u 检验:在此假设下,x = 120发生的概率

img

l T检验是为了检验根据样本判断是否满足假设条件的统计学方法之一

u F检验

主要包含方差齐性检验(F-test of equality of variances)、方差分析(Analysis of Variance, ANOVA)、线性回归方程整体的显著性检验。

l F检验对于数据的正态性非常敏感,因此在检验方差齐性的时候,Levene检验, Bartlett检验或者Brown–Forsythe检验的稳健性都要优于F检验,若两个母体有相同的方差(方差齐性),那么可以采用F检验,但是该检验会呈现极端的非稳健性和非常态性, 可以用t检验、巴特勒特检验等取代。

u 讲义关联资料\统计概率中的T检验和F检验.md

2 驾驶行程分析流程

原始数据->kafka->flink实时处理(etl、业务逻辑解析)->驾驶行程与驾驶行程采样数据入库

image-20221018195235338

关联性业务:充电驾驶行程分析

image-20221018195301616

3 驾驶行程分析业务价值

单次行驶里程区间分布、单次行程消耗soc区间分布、最大里程分布、充电行程占比、平均行驶里程分布、周行驶里程分布、最大行驶里程分段统计、常用行驶里程、全国-每日平均行驶里程(近4周)、全国-单车日均行驶里程分布(近一年)、各车系单次最大行驶里程分布、不同里程范围内车辆占比情况

img

2. 驾驶行程分析任务设置

2.1 驾驶行程分析任务基类和主类设置

创建驾驶行程划分任务:TripDriveTask

img

继承自***BaseTask***基类

/**
 * 驾驶行程业务开发
 * 1)消费kafka数据过滤出来驾驶行程采样数据,实时的写入到hbase表中
 * 2)消费kafka数据过滤出来驾驶行程数据,实时的写入到hbase表中
 */
public class TripDriveTask extends BaseTask {
}

创建flink流式任务环境

/**
 * 驾驶行程业务开发
 * 1)消费kafka数据过滤出来驾驶行程采样数据,实时的写入到hbase表中
 * 2)消费kafka数据过滤出来驾驶行程数据,实时的写入到hbase表中
 */
public class TripDriveTask extends BaseTask {
    public static void main(String[] args) {
        //TODO 1)初始化flink流式处理的开发环境
        StreamExecutionEnvironment env = getEnv(TripDriveTask.class.getSimpleName());try {
            env.execute("TripDriveTask");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 

l kafka数据源设置

/**
 * 驾驶行程业务开发
 * 1)消费kafka数据过滤出来驾驶行程采样数据,实时的写入到hbase表中
 * 2)消费kafka数据过滤出来驾驶行程数据,实时的写入到hbase表中
 */
public class TripDriveTask extends BaseTask {
    public static void main(String[] args) throws Exception {
        //TODO 1)初始化flink流式处理的开发环境
        StreamExecutionEnvironment env = getEnv(TripDriveTask.class.getSimpleName());//TODO 6)将kafka消费者对象添加到环境中
        DataStream<String> dataStreamSource = createKafkaStream(SimpleStringSchema.class);try {
            env.execute("TripDriveTask");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

数据预处理

n json数据解析、转换

  • 过滤解析成功的数据
  • 过滤驾驶行程数据

u 充电状态为行车充电(chargeStatus=2)、未充电(=3)的数据为驾驶行程数据

u 否则充电状态为停车充电(=1)、充电完成(=4)则为驾驶充电行程数据

/**
 * 驾驶行程业务开发
 * 1)消费kafka数据过滤出来驾驶行程采样数据,实时的写入到hbase表中
 * 2)消费kafka数据过滤出来驾驶行程数据,实时的写入到hbase表中
 */
public class TripDriveTask extends BaseTask {
    public static void main(String[] args) throws Exception {
        //TODO 1)初始化flink流式处理的开发环境
        StreamExecutionEnvironment env = getEnv(TripDriveTask.class.getSimpleName());//TODO 6)将kafka消费者对象添加到环境中
        DataStream<String> dataStreamSource = createKafkaStream(SimpleStringSchema.class);//TODO 7)将消费出来的数据进行json解析成javaBean对象
        SingleOutputStreamOperator<ItcastDataObj> itcastJsonStream = dataStreamSource.map(JsonParseUtil::parseJsonToObject)
                //过滤出来驾驶行程数据
                .filter(itcastDataObj -> 2 == itcastDataObj.getChargeStatus() || 3 == itcastDataObj.getChargeStatus());try {
            env.execute("TripDriveTask");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

创建行程划分Window(第四节实现)

  • 添加行程划分水位线
  • 根据vin进行分组
  • 指定Window为SessionWindow

驾驶行程采样分析与入库(第四节实现)

驾驶行程划分与入库(第五节实现)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。