💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于大数据的个性化饮食风味数据分析系统介绍
基于大数据的个性化饮食风味数据分析系统是一套综合运用Hadoop和Spark技术栈的大数据分析平台,该系统通过Hadoop分布式文件系统HDFS存储海量饮食数据,利用Spark强大的内存计算能力对用户的饮食偏好、地域风味特征进行深度挖掘分析。系统前端采用Vue+ElementUI+Echarts构建可视化交互界面,后端支持Django和SpringBoot双框架版本,数据处理层整合Spark SQL、Pandas、NumPy等工具实现高效的数据清洗与分析。核心功能模块涵盖用户管理、饮食风味数据管理、用户画像分析、地理文化分析、用户分群分析以及核心因素分析等八大板块,通过Spark的分布式计算引擎对不同地域、不同人群的饮食习惯数据进行多维度交叉分析,生成个性化的风味偏好报告和可视化图表,帮助用户深入了解饮食文化背后的数据规律,为餐饮行业的精准营销和个性化推荐提供数据支撑,整个系统从数据采集、存储、计算到可视化展示形成完整的大数据处理链路。
基于大数据的个性化饮食风味数据分析系统演示视频
基于大数据的个性化饮食风味数据分析系统演示图片
.config("spark.executor.memory", "4g").config("spark.driver.memory", "2g").getOrCreate()
class UserPortraitAnalysisView(View):
def post(self, request):
user_id = json.loads(request.body).get('user_id')
food_data_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_flavor_db").option("dbtable", "food_flavor_data").option("user", "root").option("password", "123456").load()
user_food_df = food_data_df.filter(col("user_id") == user_id)
taste_stats = user_food_df.groupBy("taste_type").agg(count("*").alias("count"), avg("rating").alias("avg_rating")).orderBy(desc("count"))
taste_preference = taste_stats.collect()
top_taste = taste_preference[0]["taste_type"] if len(taste_preference) > 0 else "未知"
category_stats = user_food_df.groupBy("food_category").agg(count("*").alias("count")).orderBy(desc("count"))
category_preference = category_stats.collect()
top_category = category_preference[0]["food_category"] if len(category_preference) > 0 else "未知"
price_avg = user_food_df.agg(avg("price").alias("avg_price")).collect()[0]["avg_price"]
price_level = "高消费" if price_avg > 80 else "中消费" if price_avg > 40 else "低消费"
order_time_df = user_food_df.withColumn("hour", split(col("order_time"), ":")[0].cast("int"))
time_stats = order_time_df.groupBy("hour").agg(count("*").alias("count")).orderBy(desc("count"))
time_preference = time_stats.collect()
peak_hour = time_preference[0]["hour"] if len(time_preference) > 0 else 12
time_period = "早餐时段" if 6 <= peak_hour < 10 else "午餐时段" if 11 <= peak_hour < 14 else "晚餐时段" if 17 <= peak_hour < 21 else "夜宵时段"
spicy_count = user_food_df.filter(col("is_spicy") == 1).count()
total_count = user_food_df.count()
spicy_ratio = round(spicy_count / total_count * 100, 2) if total_count > 0 else 0
portrait_result = {"user_id": user_id, "top_taste": top_taste, "top_category": top_category, "price_level": price_level, "avg_price": round(price_avg, 2), "peak_time_period": time_period, "spicy_preference_ratio": spicy_ratio, "total_orders": total_count}
return JsonResponse({"code": 200, "message": "用户画像分析成功", "data": portrait_result})
class GeoCultureAnalysisView(View):
def post(self, request):
region = json.loads(request.body).get('region', 'all')
food_data_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_flavor_db").option("dbtable", "food_flavor_data").option("user", "root").option("password", "123456").load()
if region != 'all':
region_df = food_data_df.filter(col("region") == region)
else:
region_df = food_data_df
taste_distribution = region_df.groupBy("region", "taste_type").agg(count("*").alias("count")).orderBy("region", desc("count"))
taste_data = taste_distribution.collect()
taste_result = [{"region": row["region"], "taste_type": row["taste_type"], "count": row["count"]} for row in taste_data]
spicy_stats = region_df.groupBy("region").agg(sum(when(col("is_spicy") == 1, 1).otherwise(0)).alias("spicy_count"), count("*").alias("total_count"))
spicy_ratio_df = spicy_stats.withColumn("spicy_ratio", round(col("spicy_count") / col("total_count") * 100, 2))
spicy_data = spicy_ratio_df.collect()
spicy_result = [{"region": row["region"], "spicy_ratio": row["spicy_ratio"]} for row in spicy_data]
price_stats = region_df.groupBy("region").agg(avg("price").alias("avg_price"), avg("rating").alias("avg_rating"))
price_data = price_stats.collect()
price_result = [{"region": row["region"], "avg_price": round(row["avg_price"], 2), "avg_rating": round(row["avg_rating"], 2)} for row in price_data]
category_stats = region_df.groupBy("region", "food_category").agg(count("*").alias("count")).orderBy("region", desc("count"))
category_data = category_stats.collect()
region_category_map = {}
for row in category_data:
region_name = row["region"]
if region_name not in region_category_map:
region_category_map[region_name] = []
region_category_map[region_name].append({"category": row["food_category"], "count": row["count"]})
category_result = [{"region": k, "categories": v[:5]} for k, v in region_category_map.items()]
analysis_result = {"taste_distribution": taste_result, "spicy_preference": spicy_result, "price_and_rating": price_result, "category_preference": category_result}
return JsonResponse({"code": 200, "message": "地理文化分析完成", "data": analysis_result})
class UserClusteringAnalysisView(View):
def post(self, request):
cluster_num = json.loads(request.body).get('cluster_num', 4)
food_data_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/food_flavor_db").option("dbtable", "food_flavor_data").option("user", "root").option("password", "123456").load()
user_features = food_data_df.groupBy("user_id").agg(count("*").alias("order_count"), avg("price").alias("avg_price"), avg("rating").alias("avg_rating"), sum(when(col("is_spicy") == 1, 1).otherwise(0)).alias("spicy_count"))
user_features_df = user_features.withColumn("spicy_ratio", round(col("spicy_count") / col("order_count") * 100, 2))
assembler = VectorAssembler(inputCols=["order_count", "avg_price", "avg_rating", "spicy_ratio"], outputCol="features")
feature_vector_df = assembler.transform(user_features_df)
kmeans = KMeans(k=cluster_num, seed=42, featuresCol="features", predictionCol="cluster")
model = kmeans.fit(feature_vector_df)
clustered_df = model.transform(feature_vector_df)
cluster_result = clustered_df.select("user_id", "order_count", "avg_price", "avg_rating", "spicy_ratio", "cluster").collect()
cluster_data = [{"user_id": row["user_id"], "order_count": row["order_count"], "avg_price": round(row["avg_price"], 2), "avg_rating": round(row["avg_rating"], 2), "spicy_ratio": row["spicy_ratio"], "cluster": row["cluster"]} for row in cluster_result]
cluster_summary = clustered_df.groupBy("cluster").agg(count("*").alias("user_count"), avg("order_count").alias("avg_order_count"), avg("avg_price").alias("cluster_avg_price"), avg("avg_rating").alias("cluster_avg_rating"), avg("spicy_ratio").alias("cluster_spicy_ratio"))
summary_data = cluster_summary.collect()
summary_result = [{"cluster": row["cluster"], "user_count": row["user_count"], "avg_order_count": round(row["avg_order_count"], 2), "avg_price": round(row["cluster_avg_price"], 2), "avg_rating": round(row["cluster_avg_rating"], 2), "spicy_ratio": round(row["cluster_spicy_ratio"], 2)} for row in summary_data]
return JsonResponse({"code": 200, "message": "用户分群分析完成", "data": {"user_clusters": cluster_data, "cluster_summary": summary_result}})
基于大数据的个性化饮食风味数据分析系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目