实时即未来,大数据项目车联网之车辆驾驶行程分析(13)
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):数据集市层(可用于可视化指标存储层)
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发生的概率
l T检验是为了检验根据样本判断是否满足假设条件的统计学方法之一
u F检验
主要包含方差齐性检验(F-test of equality of variances)、方差分析(Analysis of Variance, ANOVA)、线性回归方程整体的显著性检验。
l F检验对于数据的正态性非常敏感,因此在检验方差齐性的时候,Levene检验, Bartlett检验或者Brown–Forsythe检验的稳健性都要优于F检验,若两个母体有相同的方差(方差齐性),那么可以采用F检验,但是该检验会呈现极端的非稳健性和非常态性, 可以用t检验、巴特勒特检验等取代。
2 驾驶行程分析流程
原始数据->kafka->flink实时处理(etl、业务逻辑解析)->驾驶行程与驾驶行程采样数据入库
关联性业务:充电驾驶行程分析
3 驾驶行程分析业务价值
单次行驶里程区间分布、单次行程消耗soc区间分布、最大里程分布、充电行程占比、平均行驶里程分布、周行驶里程分布、最大行驶里程分段统计、常用行驶里程、全国-每日平均行驶里程(近4周)、全国-单车日均行驶里程分布(近一年)、各车系单次最大行驶里程分布、不同里程范围内车辆占比情况
2. 驾驶行程分析任务设置
2.1 驾驶行程分析任务基类和主类设置
创建驾驶行程划分任务:TripDriveTask
继承自***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
驾驶行程采样分析与入库(第四节实现)
驾驶行程划分与入库(第五节实现)
- 点赞
- 收藏
- 关注作者
评论(0)