前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战腾讯云 BI 可视化分析经典福克斯车辆 PID 历史记录

实战腾讯云 BI 可视化分析经典福克斯车辆 PID 历史记录

原创
作者头像
远哥制造
修改2024-06-10 07:44:34
1940
修改2024-06-10 07:44:34
举报
文章被收录于专栏:远哥制造远哥制造

0x01.前言

自从氪金购买了 Car Scanner Pro 安卓应用后,每次出行都打开 Dashboard 放在手机后台,这样 Recorder 就可以自动记录相关的 PID 和值了

但毕竟手机屏幕有限,每次出行结束后查看回放并不是很方便,于是考虑放在电脑上进行可视化分析,正巧赶上了腾讯云 BI 的活动,于是尝试使用腾讯云 BI 进行可视化分析

0x02.Car Scanner Pro 导出 CSV

支持以 CSV 的格式进行导出,这样就可以放到其他工具里进行分析了,目前 CSV 支持两种导出格式

  1. CSV #1
  2. CSV #2

第一种格式内容如下(经纬度已做 mask 处理)

代码语言:bash
复制
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55_1.csv
"SECONDS";"PID";"VALUE";"UNITS";"LATITUDE";"LONGTITUDE";
"71105.004622";"环境温度";"21";"℃";"<rm>";"<rm>";
"71105.147622";"进气温度";"27";"℃";"<rm>";"<rm>";
"71105.274622";"冷却液温度";"23";"℃";"<rm>";"<rm>";
"71105.413622";"发动机转速";"0";"rpm";"<rm>";"<rm>";
"71105.413622";"发动机转速 x1000";"0";"rpm";"<rm>";"<rm>";
"71105.538622";"节气门位置";"18.0392156862745";"%";"<rm>";"<rm>";
"71105.669622";"车速";"0";"km/h";"<rm>";"<rm>";
"71105.805622";"计算增压";"-0.01325";"bar";"<rm>";"<rm>";
"71105.805622";"进气歧管绝对压力";"100";"kPa";"<rm>";"<rm>";

不难看出这种格式是每一行记录着 PID 以及对应的单位和值

第二种格式内容如下(经纬度已做 mask 处理)

代码语言:bash
复制
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55.csv
time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,
19:45:05.005,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.148,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,<rm>,<rm>,
19:45:05.275,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.414,,,,,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.539,,,,,,,,,,,,,,,,,,,18.0392156862745,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.670,,,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,<rm>,<rm>,
19:45:05.806,,,,,,,,,,,,,,,,,,,,,,,,-0.01325,,,,100,,,,<rm>,<rm>,
19:45:06.069,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,<rm>,<rm>,
19:45:06.207,,,77845.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,

不难看出这种格式是将所有存在的 PID 做了汇总,然后具体时间点只记录实际获取到值的 PID

0x03. 数据库选型

CSV 管理起来不方便,于是计划将 CSV 导入至数据库,在常见的数据库中(MySQL、PG、ES 和 CK)中最终选择了 CK

毕竟是与时序相关的数据流,并且原始数据不会修改,CK 应该算是合适的数据库了

先尝试使用 CSV #2 这种格式进行导入,开始踩坑

首先,CSV 中的列名是中英文混合的,正常应该是全中文,部分翻译不完全所以才显示的英文,建表肯定是得全部使用英文了

CSV 列名如下

time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,

转化成英文列名如下

代码语言:sql
复制
CREATE TABLE IF NOT EXISTS car_scanner_record (
  time DateTime64(3),
  accelarator_pedal_position_percentage Float64,
  cylinder_head_temp_c Float64,
  odometer_km Float64,
  cooling_liquid_temp_c Float64,
  engine_speed_rpm UInt32,
  engine_speed_x1000_rpm UInt16,
  fuel_used_l Float64,
  fuel_used_total_l Float64,
  average_gps_speed_km_h Float64,
  average_fuel_consumption_l_100km Float64,
  average_fuel_consumption_10_sec_l_100km Float64,
  average_fuel_consumption_total_l_100km Float64,
  average_speed_km_h Float64,
  fuel_cost_yen Float64,
  fuel_cost_total_yen Float64,
  ambient_temperature_c Float64,
  instantaneous_engine_power_kw Float64,
  instantaneous_fuel_consumption_l_100km Float64,
  throttle_position_percentage Float64,
  fuel_saver_status UInt8,
  trip_distance_km Float64,
  trip_distance_total_km Float64,
  calculated_engine_load_value_percentage Float64,
  calculated_boost_bar Float64,
  calculated_instantaneous_fuel_rate_l_h Float64,
  vehicle_acceleration_g Float64,
  vehicle_speed_km_h Float64,
  intake_manifold_absolute_pressure_kpa Float64,
  intake_air_temperature_c Float64,
  speed_gps_km_h Float64,
  altitude_gps_m Float64,
  latitude Float64,
  longtitude Float64,
  geo Point MATERIALIZED (longtitude, latitude)
)
ENGINE = MergeTree()
ORDER BY time;

其中时间字段类型选择了 DateTime64(3),需要排序

数值型字段,整数类型选择了 UInt8 和 UInt32,浮点类型选择了 Float64

可以看到经纬度字段除了通过浮点类型保留原始的经纬度 latitude 和 longtitude

还新增了一个字段 geo,使用了 Point 类型用于存储地理位置信息,并通过物化视图取值,ck 真方便

0x04. CSV 导入至 Clickhouse

使用的版本是:ClickHouse 24.4.1.2088

可以看到表已经建好了,但是目前还没有导入数据

接下来使用 GUI 工具导入数据,毕竟图形化工具更直观

下一步

选择 CSV 文件

因为 CSV 表头末尾多了一个逗号,识别为多了一列,设置跳过即可

继续

报错了,是因为 CSV 文件中只有时间而没有日期

于是需要自行补充日期,运行

代码语言:bash
复制
[root@cn-tx-bj7-c8 ~]# sed -i 's/^/2024-06-07 /' 2024-06-07_19-44-55.csv
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55.csv
2024-06-07 time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,
2024-06-07 19:45:05.005,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.148,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,<rm>,<rm>,
2024-06-07 19:45:05.275,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.414,,,,,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.539,,,,,,,,,,,,,,,,,,,18.0392156862745,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.670,,,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,<rm>,<rm>,
2024-06-07 19:45:05.806,,,,,,,,,,,,,,,,,,,,,,,,-0.01325,,,,100,,,,<rm>,<rm>,
2024-06-07 19:45:06.069,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:06.207,,,77845.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,

第一行无需替换,手动修改下改回 time

然后预览数据,均可正常匹配

0x05. 腾讯云 BI 数据接入

进入控制台:https://console.cloud.tencent.com/bi/overview

申请试用专业版

给了一个月的时间

创建项目 CarScannerPro,新建数据源

选择自有 ck

一键测试失败了,并不能连接成功,明明开放了外网访问自己的电脑上也可以正常连接

自己有个 TDSQL-C,无奈只好将数据存储至 MySQL 5.7,重新建表

代码语言:sql
复制
USE car_scanner_pro;

CREATE TABLE IF NOT EXISTS car_scanner_record (
  time DATETIME(3),
  accelarator_pedal_position_percentage DOUBLE,
  cylinder_head_temp_c DOUBLE,
  odometer_km DOUBLE,
  cooling_liquid_temp_c DOUBLE,
  engine_speed_rpm INT UNSIGNED,
  engine_speed_x1000_rpm INT UNSIGNED,
  fuel_used_l DOUBLE,
  fuel_used_total_l DOUBLE,
  average_gps_speed_km_h DOUBLE,
  average_fuel_consumption_l_100km DOUBLE,
  average_fuel_consumption_10_sec_l_100km DOUBLE,
  average_fuel_consumption_total_l_100km DOUBLE,
  average_speed_km_h DOUBLE,
  fuel_cost_yen DOUBLE,
  fuel_cost_total_yen DOUBLE,
  ambient_temperature_c DOUBLE,
  instantaneous_engine_power_kw DOUBLE,
  instantaneous_fuel_consumption_l_100km DOUBLE,
  throttle_position_percentage DOUBLE,
  fuel_saver_status INT,
  trip_distance_km DOUBLE,
  trip_distance_total_km DOUBLE,
  calculated_engine_load_value_percentage DOUBLE,
  calculated_boost_bar DOUBLE,
  calculated_instantaneous_fuel_rate_l_h DOUBLE,
  vehicle_acceleration_g DOUBLE,
  vehicle_speed_km_h DOUBLE,
  intake_manifold_absolute_pressure_kpa DOUBLE,
  intake_air_temperature_c DOUBLE,
  speed_gps_km_h DOUBLE,
  altitude_gps_m DOUBLE,
  latitude DOUBLE,
  longtitude DOUBLE,
  PRIMARY KEY (time)
);

创建完成

重新导入之后,连接数据源,成功!

0x06. 数据建表

选择第一个

选择全部字段,可惜时间类型不支持毫秒

+1

0x07. 数据可视化

在「仪表盘」中创建「Record」页面,然后就可以在组件库中使用各种组件了

需要输入的有【维度】【指标】和【条件】,这里选择几个典型的

1. 指标卡(总览里程变化量 min -> max)

  • 维度选择 time,根据日聚合
  • 指标选择里程表的 max 和 min
  • 条件选择 time,本月至今

立即分析

保存就能预览查询的结果

2.折线图(单独分析每分钟发动机平均转速)

  • 维度选择 time,每分钟聚合
  • 指标选择转速,mean 平均值
  • 条件选择 time,本月至今

保存,预览

3. 柱状图(横向对比查看环境、进气、气缸盖、冷却液温度)

  • 维度选择 time,每分钟聚合
  • 指标选择四个温度,仍然是平均值聚合
  • 条件选择 time,本月至今

保存,预览

4.仪表盘(平均车速和最大车速)

官方示例就是车速 2333

这里需要添加两个仪表盘

预览,保存

5.点地图(分析去过哪些城市)

像不像是高德地图的「点亮城市」统计

  • 维度选择经纬度,注意右边也需要同样勾选

保存,预览

6.时间筛选器(最后添加一个全局时间切换)

需要关联上述 5 个图表的 time 字段

0x08.看板/页面分享

分享页面

切换时间选择器,5 个图表也跟着联动查询

  • 查询 19:00~20:00
  • 查询 20:00~21:00

0x09.后记

腾讯云图用到腾讯云 BI,只要成功对接了数据后都是开箱即用

图表类型非常丰富,这里限于篇幅只演示了几种类型,实际还有很多 PID 可以利用图表进行展示,毕竟不是官方文档,没必要每种都用一遍

当然,本文所述的分析只是最基础的,还有更多分析的方向 RT(by Gemini 1.5 Pro)

看到异常值检测觉得这个方向不错,也就是告警功能,最简单的比如针对历史图表当值发生异常变化时在图表中标红显示,应该是比较实用的功能了

文档中也有关于配置告警的功能:https://cloud.tencent.com/document/product/590/95713

今天周日写了整整一下午,更多方向就留给读者们自己思考吧,欢迎 DM

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01.前言
  • 0x02.Car Scanner Pro 导出 CSV
  • 0x03. 数据库选型
  • 0x04. CSV 导入至 Clickhouse
  • 0x05. 腾讯云 BI 数据接入
  • 0x06. 数据建表
  • 0x07. 数据可视化
    • 1. 指标卡(总览里程变化量 min -> max)
      • 2.折线图(单独分析每分钟发动机平均转速)
        • 3. 柱状图(横向对比查看环境、进气、气缸盖、冷却液温度)
          • 4.仪表盘(平均车速和最大车速)
            • 5.点地图(分析去过哪些城市)
              • 6.时间筛选器(最后添加一个全局时间切换)
              • 0x08.看板/页面分享
              • 0x09.后记
              相关产品与服务
              腾讯云 BI
              腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档