精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻
💖🔥作者主页 :计算机毕设木哥🔥 💖
文章目录
- 一、项目介绍
- 二、视频展示
- 三、开发环境
- 四、系统展示
- 五、代码展示
- 六、项目文档展示
- 七、项目总结
- [<font color=#fe2c24 >大家可以帮忙点赞、收藏、关注、评论啦 👇🏻](#fe2c24 >大家可以帮忙点赞、收藏、关注、评论啦 👇🏻)
一、项目介绍
随着车辆出行规模持续扩大,燃油消耗与行程成本越来越受车队管理、出行规划与节能降耗关注,但原始记录往往分散在车型、路况、驾驶习惯等多维字段里,单靠表格汇总既慢也难看出规律。现有数据体量已达三十余万条,若仍靠人工统计,很难支撑分群、异常识别等深入分析。本文通过开发一个基于大数据的燃油消耗数据可视化与分析系统,用以帮助解决燃油消耗规律难发现、成本影响因素难量化的问题。
系统采用 Hadoop 存储原始数据,以 PySpark 完成 15 项统计分析,并引入 K-Means 驾驶聚类、FP-Growth 关联规则、Isolation Forest 异常检测与 PCA 主成分分析;后端用 Django 提供分析接口,前端以 Vue2 与 ECharts 搭建 4 页分析专题和可视化大屏,同时支持燃油数据的增删改查,以及登录、个人中心、密码修改等管理功能。
经过系统测试,本系统能满足交通运输相关从业者查看车型油耗对比、拥堵与空调对油费影响的需求,也能为计算机专业学生提供可运行的数据分析毕设样例,对把大数据挖掘结果落到 Web 可视化展示具有一定参考意义。
二、视频展示
大数据毕业设计选题方向|【基于大数据的燃油消耗数据分析
三、开发环境
- 大数据技术:Hadoop、Spark、Hive
- 开发技术:Python、Django框架、Vue、Echarts
- 软件工具:Pycharm、DataGrip、Anaconda
- 可视化 工具 Echarts
四、系统展示
系统页面模块展示:







五、代码展示
bash
def driving_cluster_profile_analysis(input_df):
logger.info('开始分析: 聚类分群')
feature_cols = ['engine_size', 'cylinders', 'milage_kmpl', 'distance_km', 'fuel_cost']
assembler = VectorAssembler(inputCols=feature_cols, outputCol='raw_features')
assembled = assembler.transform(input_df.select(feature_cols))
scaler = StandardScaler(inputCol='raw_features', outputCol='features', withMean=True, withStd=True)
scaled = scaler.fit(assembled).transform(assembled)
kmeans = KMeans(featuresCol='features', predictionCol='cluster_id', k=4, seed=42)
clustered = kmeans.fit(scaled).transform(scaled)
profile = clustered.groupBy('cluster_id').agg(
spark_count(lit(1)).alias('sample_count'),
spark_round(spark_avg('engine_size'), 2).alias('avg_engine_size'),
spark_round(spark_avg('cylinders'), 2).alias('avg_cylinders'),
spark_round(spark_avg('milage_kmpl'), 2).alias('avg_mileage_kmpl'),
spark_round(spark_avg('distance_km'), 2).alias('avg_distance_km'),
spark_round(spark_avg('fuel_cost'), 2).alias('avg_fuel_cost'),
).withColumn(
'cluster_label',
when(col('cluster_id') == 0, lit('簇群1-短途经济型'))
.when(col('cluster_id') == 1, lit('簇群2-中途均衡型'))
.when(col('cluster_id') == 2, lit('簇群3-长途高耗型'))
.otherwise(lit('簇群4-高费异常型')),
).orderBy('cluster_id')
_save_result_csv(profile, os.path.join(OUTPUT_DIR, 'driving_cluster_profile.csv'))
def driving_association_rules_analysis(input_df):
logger.info('开始分析: 关联规则')
basket_df = input_df.select(
array(col('vehicle_class'), col('traffic_level'),
col('driving_style'), col('ac_usage')).alias('items'))
model = FPGrowth(itemsCol='items', minSupport=0.05, minConfidence=0.4).fit(basket_df)
freq_map = {tuple(sorted(r['items'])): float(r['freq']) for r in model.freqItemsets.collect()}
rule_rows = []
for rule in model.associationRules.collect():
antecedent, consequent = sorted(rule['antecedent']), sorted(rule['consequent'])
rule_dict = rule.asDict()
if rule_dict.get('support') is not None:
support = round(float(rule_dict['support']), 2)
else:
ant_support = freq_map.get(tuple(antecedent), 0.01)
support = round(float(rule['confidence']) * ant_support, 2)
rule_rows.append({
'antecedent': '、'.join(antecedent),
'consequent': '、'.join(consequent),
'support': support,
'confidence': round(float(rule['confidence']), 2),
'lift': round(float(rule['lift']), 2),
})
rule_rows.sort(key=lambda item: (item['lift'], item['confidence']), reverse=True)
_save_result_csv(spark.createDataFrame(rule_rows[:20]),
os.path.join(OUTPUT_DIR, 'driving_association_rules.csv'))
def fuel_anomaly_detection_analysis(input_df):
logger.info('开始分析: 异常识别')
feature_cols = ['milage_kmpl', 'distance_km', 'fuel_cost', 'engine_size']
row_count = input_df.count()
sample_fraction = min(0.05, 50000.0 / max(row_count, 1))
sample_pdf = input_df.select(feature_cols).sample(False, sample_fraction, 42).toPandas()
features = SkStandardScaler().fit_transform(sample_pdf[feature_cols])
iso = IsolationForest(n_estimators=100, contamination=0.05, random_state=42)
iso.fit(features)
sample_pdf['anomaly_score'] = (-iso.score_samples(features)).round(2)
sample_pdf['score_bin'] = pd.cut(
sample_pdf['anomaly_score'],
bins=[-np.inf, 0.45, 0.55, 0.65, np.inf],
labels=['低异常', '中低异常', '中高异常', '高异常'])
summary = sample_pdf.groupby('score_bin', observed=False).agg(
sample_count=('anomaly_score', 'count'),
avg_mileage_kmpl=('milage_kmpl', 'mean'),
avg_distance_km=('distance_km', 'mean'),
avg_fuel_cost=('fuel_cost', 'mean'),
avg_engine_size=('engine_size', 'mean'),
).reset_index().rename(columns={'score_bin': 'anomaly_score_range'})
_save_result_csv(spark.createDataFrame(summary.to_dict(orient='records')),
os.path.join(OUTPUT_DIR, 'fuel_anomaly_detection.csv'))
def fuel_pca_components_analysis(input_df):
logger.info('开始分析: 成分分析')
feature_cols = ['engine_size', 'cylinders', 'milage_kmpl', 'distance_km', 'fuel_cost']
sample_pdf = input_df.select(feature_cols).sample(
False, min(0.05, 50000.0 / max(input_df.count(), 1)), 42).toPandas()
scaled = SkStandardScaler().fit_transform(sample_pdf[feature_cols])
pca = PCA(n_components=3, random_state=42)
pca.fit(scaled)
rows, cumulative = [], 0.0
for idx, ratio in enumerate(pca.explained_variance_ratio_):
ratio_val = round(float(ratio), 2)
cumulative = round(cumulative + ratio_val, 2)
loadings = [f'{METRIC_NAME_MAP[feature_cols[i]]}:{round(float(pca.components_[idx][i]), 2)}'
for i in range(len(feature_cols))]
rows.append({
'component': f'主成分{idx + 1}',
'variance_ratio': ratio_val,
'cumulative_ratio': cumulative,
'loadings': ';'.join(loadings),
})
_save_result_csv(spark.createDataFrame(rows),
os.path.join(OUTPUT_DIR, 'fuel_pca_components.csv'))
def run_all_analyses():
preprocessed_path = f'hdfs://127.0.0.1:9000/{PROJECT_NAME}/output/{CONCEPT_NAME}_preprocessed_data.csv'
input_df = spark.read.csv(preprocessed_path, header=True, inferSchema=True)
logger.info(f'从HDFS读取成功,行数: {input_df.count()}, 列数: {len(input_df.columns)}')
for func in [
vehicle_class_distribution_analysis, mileage_by_vehicle_class_analysis,
traffic_impact_analysis, numeric_correlation_analysis,
driving_cluster_profile_analysis, driving_association_rules_analysis,
fuel_anomaly_detection_analysis, fuel_pca_components_analysis,
# ... 其余 7 项分析函数同理注册
]:
func(input_df)
logger.info('全部分析函数执行完毕')
六、项目文档展示

七、项目总结
本课题围绕车辆燃油消耗数据,完成了从数据采集处理到 Web 可视化展示的完整链路建设。项目以约 34.2 万条行程记录为研究对象,涵盖车型、排量、行程距离、拥堵程度、驾驶风格、空调使用及燃油成本等维度,借助 Hadoop 完成原始数据存储,利用 PySpark 实现 15 项统计分析,并在挖掘层面引入 K-Means 驾驶聚类、FP-Growth 关联规则、Isolation Forest 异常检测与 PCA 主成分分析,从群体划分、行为共现、异常识别和指标降维等角度揭示燃油消耗规律。
在系统实现方面,后端基于 Django 与 MySQL 提供分析接口与数据管理能力,前端采用 Vue2 与 ECharts 搭建 4 页分析专题和可视化大屏,支持车型油耗对比、拥堵与驾驶行为影响、关联规则展示及聚类画像查看;同时配套燃油数据增删改查与登录、个人中心等基础功能,形成"大数据处理---结果入库---接口服务---图表展示"的闭环。
经测试,本系统能够较直观地呈现不同车型、路况与驾驶习惯下的油耗差异,为燃油成本管控和出行行为优化提供数据参考;对计算机专业学生而言,该项目也具备较好的毕设示范价值,体现了 Hadoop、Spark 挖掘算法与前后端可视化技术的综合应用。
大家可以帮忙点赞、收藏、关注、评论啦 👇🏻
💖🔥作者主页 :计算机毕设木哥🔥 💖