注意:该项目只展示部分功能,如需了解,文末咨询即可。
1 开发环境
发语言:python
采用技术:Spark、Hadoop、Django、Vue、Echarts等技术框架
数据库:MySQL
开发环境:PyCharm
2 系统设计
随着移动互联网技术的快速发展和消费者生活方式的转变,餐饮外卖行业呈现爆发式增长态势,平台每日产生海量的交易数据、用户行为数据和商家运营数据。然而,传统的数据处理方式难以应对如此庞大的数据规模,无法充分挖掘数据背后的商业价值。本系统基于Python、Spark、Hadoop等大数据技术构建餐饮外卖平台数据分析系统,通过对菜品信息、商家经营、消费行为等多维度数据的深度分析,为平台运营决策、商家经营优化、用户体验提升提供科学的数据支撑,具有重要的商业价值和实践意义。
系统构建了六大核心分析模块:商家经营分析模块通过地域分布、品牌竞争力、评分等级、配送政策等维度全面评估商家经营状况;菜品销售分析模块基于热门菜品排行、价格区间分布、菜品类型偏好等指标深入洞察产品销售规律;消费行为分析模块从时间分布、消费金额、季节趋势、价格敏感度等角度刻画用户消费特征;市场竞争分析模块通过价格竞争、市场份额、品类竞争强度等指标评估市场竞争态势;平台运营分析模块监控商家增长趋势、菜品丰富度、服务质量变化等运营关键指标;用户体验分析模块运用聚类算法和关联规则挖掘技术,综合评价用户满意度并识别用户选择偏好模式。
3 系统展示
3.1 功能展示视频
基于python+spark的餐饮外卖平台数据分析系统源码 !!!请点击这里查看功能演示!!!
3.2 大屏页面


3.3 分析页面






3.4 基础页面



4 更多推荐
计算机专业毕业设计新风向,2026年大数据 + AI前沿60个毕设选题全解析,涵盖Hadoop、Spark、机器学习、AI等类型
计算机专业毕业设计选题深度剖析,掌握这些技巧,让你的选题轻松通过,文章附35个优质选题助你顺利通过开题!
【避坑必看】26届计算机毕业设计选题雷区大全,这些毕设题目千万别选!选题雷区深度解析
【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台
基于Hadoop生态的汽车全生命周期数据分析与可视化平台-基于Python+Vue的二手车智能估价与市场分析系统
5 部分功能代码
spark = SparkSession.builder \
.appName("UserSatisfactionClustering") \
.config("spark.sql.adaptive.enabled", "true") \
.config("spark.sql.adaptive.coalescePartitions.enabled", "true") \
.getOrCreate()
try:
# 获取数据集绝对路径,避免相对路径错误
current_dir = os.path.dirname(os.path.abspath(__file__))
data_path = os.path.join(current_dir, "data", "meishiinfo.csv")
# 读取原始数据
print("正在读取餐饮外卖数据...")
df = spark.read.csv(data_path, header=True, inferSchema=False)
# 数据预处理:类型转换和异常值处理
print("开始数据预处理...")
processed_df = df.select(
col("shopname"),
# 评分转换为浮点型,异常值处理为0
when(col("score").rlike("^[0-9]+(\\.[0-9]+)?$"),
col("score").cast(FloatType())).otherwise(0.0).alias("score"),
# 价格转换为浮点型,异常值处理为0
when(col("jiage").rlike("^[0-9]+(\\.[0-9]+)?$"),
col("jiage").cast(FloatType())).otherwise(0.0).alias("price"),
# 月销量转换为整型,异常值处理为0
when(col("monthsales").rlike("^[0-9]+$"),
col("monthsales").cast(IntegerType())).otherwise(0).alias("monthly_sales")
).filter(
# 过滤掉评分、价格、销量为0的异常数据
(col("score") > 0) & (col("price") > 0) & (col("monthly_sales") > 0)
)
# 按商家聚合数据,计算平均指标
print("按商家聚合数据,计算综合指标...")
shop_metrics = processed_df.groupBy("shopname").agg(
spark_round(avg("score"), 2).alias("avg_score"), # 平均评分
spark_round(avg("price"), 2).alias("avg_price"), # 平均价格
spark_round(sum("monthly_sales"), 2).alias("total_sales"), # 总销量
count("*").alias("dish_count") # 菜品数量
).filter(
# 过滤至少有3个菜品的商家,确保数据代表性
col("dish_count") >= 3
)
# 计算衍生指标:销售效率和性价比指数
enhanced_metrics = shop_metrics.withColumn(
"sales_efficiency",
spark_round(col("total_sales") / col("dish_count"), 2) # 平均每菜品销量
).withColumn(
"value_index",
spark_round((col("avg_score") * col("total_sales")) / col("avg_price"), 2) # 性价比指数
)
# 特征工程:准备聚类特征向量
print("准备聚类特征向量...")
feature_cols = ["avg_score", "avg_price", "total_sales", "sales_efficiency", "value_index"]
# 使用VectorAssembler组合特征
assembler = VectorAssembler(
inputCols=feature_cols,
outputCol="features"
)
feature_df = assembler.transform(enhanced_metrics)
# 特征标准化,消除不同量纲的影响
print("进行特征标准化...")
scaler = StandardScaler(
inputCol="features",
outputCol="scaled_features",
withStd=True,
withMean=True
)
scaler_model = scaler.fit(feature_df)
scaled_df = scaler_model.transform(feature_df)
# 确定最佳聚类数量:使用肘部法则
print("确定最佳聚类数量...")
silhouette_scores = []
k_values = range(2, 8) # 测试2-7个聚类
for k in k_values:
kmeans = KMeans(
featuresCol="scaled_features",
predictionCol="prediction",
k=k,
seed=42,
maxIter=100
)
model = kmeans.fit(scaled_df)
predictions = model.transform(scaled_df)
# 计算轮廓系数评估聚类质量
evaluator = ClusteringEvaluator(
featuresCol="scaled_features",
predictionCol="prediction"
)
silhouette = evaluator.evaluate(predictions)
silhouette_scores.append(silhouette)
print(f"K={k}, 轮廓系数={silhouette:.4f}")
# 选择轮廓系数最高的K值
optimal_k = k_values[silhouette_scores.index(max(silhouette_scores))]
print(f"选择最佳聚类数量: K={optimal_k}")
# 执行K-means聚类
print(f"执行K-means聚类分析,K={optimal_k}...")
kmeans = KMeans(
featuresCol="scaled_features",
predictionCol="cluster_id",
k=optimal_k,
seed=42,
maxIter=100,
tol=1e-4
)
kmeans_model = kmeans.fit(scaled_df)
clustered_df = kmeans_model.transform(scaled_df)
# 分析聚类结果,为每个聚类添加业务解释
print("分析聚类结果...")
cluster_analysis = clustered_df.groupBy("cluster_id").agg(
count("*").alias("shop_count"), # 商家数量
spark_round(avg("avg_score"), 2).alias("cluster_avg_score"), # 聚类平均评分
spark_round(avg("avg_price"), 2).alias("cluster_avg_price"), # 聚类平均价格
spark_round(avg("total_sales"), 2).alias("cluster_total_sales"), # 聚类平均总销量
spark_round(avg("sales_efficiency"), 2).alias("cluster_efficiency"), # 聚类平均销售效率
spark_round(avg("value_index"), 2).alias("cluster_value_index") # 聚类平均性价比
)
# 基于聚类特征为每个聚类分配业务标签
cluster_pandas = cluster_analysis.toPandas()
# 定义聚类标签映射逻辑
def assign_cluster_label(row):
score = row['cluster_avg_score']
price = row['cluster_avg_price']
sales = row['cluster_total_sales']
efficiency = row['cluster_efficiency']
if score >= 4.5 and sales >= 1000 and efficiency >= 200:
return "优质高销型商家"
elif score >= 4.0 and price <= 15:
return "高性价比商家"
elif sales >= 2000:
return "高销量商家"
elif price >= 25 and score >= 4.0:
return "高端品质商家"
elif efficiency <= 50:
return "待提升商家"
else:
return "普通商家"
cluster_pandas['cluster_label'] = cluster_pandas.apply(assign_cluster_label, axis=1)
# 生成最终分析报告
print("生成用户满意度聚类分析报告...")
final_result = clustered_df.select(
"shopname", "avg_score", "avg_price", "total_sales",
"sales_efficiency", "value_index", "cluster_id"
).join(
spark.createDataFrame(cluster_pandas[['cluster_id', 'cluster_label']]),
on="cluster_id"
)
源码项目、定制开发、文档报告、PPT、代码答疑
希望和大家多多交流 ↓↓↓↓↓

901

被折叠的 条评论
为什么被折叠?



