💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于大数据的健康饮食营养数据分析系统 介绍
基于大数据的健康饮食营养数据分析系统是一套融合Hadoop分布式存储与Spark大数据处理技术的营养数据分析平台,采用Django作为后端框架,Vue+ElementUI+Echarts构建前端交互界面。系统通过HDFS存储海量健康饮食营养数据,利用Spark SQL进行高效的数据清洗与转换,结合Pandas和NumPy完成复杂的营养成分计算。功能模块涵盖用户信息管理、健康饮食营养数据管理、大屏可视化展示、营养成分分析、烹饪方式分析、菜系饮食分析以及膳食复杂度分析等核心板块。系统运用Spark分布式计算能力对不同烹饪方式下的营养保留率进行对比分析,通过Echarts图表直观呈现各菜系的营养结构特征,帮助用户科学评估日常饮食的营养均衡性。整个系统架构采用前后端分离设计,Django提供RESTful API接口,前端通过Ajax异步请求获取Spark处理后的分析结果,实现了大数据技术在健康饮食领域的实际应用场景落地。
基于大数据的健康饮食营养数据分析系统 演示视频
基于大数据的健康饮食营养数据分析系统 演示图片
基于大数据的健康饮食营养数据分析系统 代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, sum, count, round, when, expr
from django.http import JsonResponse
from django.views import View
import pandas as pd
import numpy as np
import json
spark = SparkSession.builder.appName("HealthDietNutritionAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "2g").config("spark.driver.memory", "1g").getOrCreate()
class NutritionComponentAnalysisView(View):
def post(self, request):
request_data = json.loads(request.body)
food_category = request_data.get('category', 'all')
nutrition_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_diet").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "nutrition_data").option("user", "root").option("password", "123456").load()
if food_category != 'all':
nutrition_df = nutrition_df.filter(col("category") == food_category)
nutrition_stats = nutrition_df.groupBy("food_name").agg(round(avg("protein"), 2).alias("avg_protein"),round(avg("fat"), 2).alias("avg_fat"),round(avg("carbohydrate"), 2).alias("avg_carbohydrate"),round(avg("vitamin_a"), 2).alias("avg_vitamin_a"),round(avg("vitamin_c"), 2).alias("avg_vitamin_c"),round(avg("calcium"), 2).alias("avg_calcium"),round(avg("iron"), 2).alias("avg_iron"))
nutrition_stats = nutrition_stats.withColumn("protein_level",when(col("avg_protein") >= 20, "高蛋白").when(col("avg_protein") >= 10, "中蛋白").otherwise("低蛋白"))
nutrition_stats = nutrition_stats.withColumn("fat_level",when(col("avg_fat") >= 15, "高脂肪").when(col("avg_fat") >= 5, "中脂肪").otherwise("低脂肪"))
nutrition_stats = nutrition_stats.withColumn("nutrition_score",expr("avg_protein * 0.3 + avg_vitamin_a * 0.2 + avg_vitamin_c * 0.2 + avg_calcium * 0.15 + avg_iron * 0.15"))
sorted_nutrition = nutrition_stats.orderBy(col("nutrition_score").desc())
result_list = sorted_nutrition.limit(50).collect()
response_data = []
for row in result_list:
response_data.append({"food_name": row["food_name"],"avg_protein": float(row["avg_protein"]),"avg_fat": float(row["avg_fat"]),"avg_carbohydrate": float(row["avg_carbohydrate"]),"avg_vitamin_a": float(row["avg_vitamin_a"]),"avg_vitamin_c": float(row["avg_vitamin_c"]),"avg_calcium": float(row["avg_calcium"]),"avg_iron": float(row["avg_iron"]),"protein_level": row["protein_level"],"fat_level": row["fat_level"],"nutrition_score": float(row["nutrition_score"])})
return JsonResponse({"code": 200, "msg": "营养成分分析成功", "data": response_data})
class CookingMethodAnalysisView(View):
def post(self, request):
request_data = json.loads(request.body)
target_food = request_data.get('food_name', None)
cooking_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_diet").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "nutrition_data").option("user", "root").option("password", "123456").load()
if target_food:
cooking_df = cooking_df.filter(col("food_name") == target_food)
cooking_analysis = cooking_df.groupBy("cooking_method").agg(round(avg("protein"), 2).alias("avg_protein"),round(avg("vitamin_retention_rate"), 2).alias("avg_vitamin_retention"),round(avg("mineral_retention_rate"), 2).alias("avg_mineral_retention"),count("*").alias("sample_count"))
cooking_analysis = cooking_analysis.withColumn("health_index",expr("avg_vitamin_retention * 0.4 + avg_mineral_retention * 0.4 + (100 - avg_protein) * 0.2"))
cooking_analysis = cooking_analysis.withColumn("recommend_level",when(col("health_index") >= 80, "强烈推荐").when(col("health_index") >= 60, "推荐").when(col("health_index") >= 40, "一般").otherwise("不推荐"))
cooking_comparison = cooking_analysis.withColumn("vitamin_loss_rate", expr("100 - avg_vitamin_retention"))
cooking_comparison = cooking_comparison.withColumn("mineral_loss_rate", expr("100 - avg_mineral_retention"))
spark_result = cooking_comparison.orderBy(col("health_index").desc()).collect()
pandas_df = pd.DataFrame([row.asDict() for row in spark_result])
if len(pandas_df) > 0:
pandas_df['health_rank'] = pandas_df['health_index'].rank(ascending=False, method='dense')
pandas_df['vitamin_retention_normalized'] = (pandas_df['avg_vitamin_retention'] - pandas_df['avg_vitamin_retention'].min()) / (pandas_df['avg_vitamin_retention'].max() - pandas_df['avg_vitamin_retention'].min() + 0.001) * 100
analysis_result = []
for _, row in pandas_df.iterrows():
analysis_result.append({"cooking_method": row["cooking_method"],"avg_protein": float(row["avg_protein"]),"avg_vitamin_retention": float(row["avg_vitamin_retention"]),"avg_mineral_retention": float(row["avg_mineral_retention"]),"vitamin_loss_rate": float(row["vitamin_loss_rate"]),"mineral_loss_rate": float(row["mineral_loss_rate"]),"health_index": float(row["health_index"]),"health_rank": int(row["health_rank"]),"recommend_level": row["recommend_level"],"sample_count": int(row["sample_count"]),"vitamin_retention_normalized": float(row["vitamin_retention_normalized"])})
return JsonResponse({"code": 200, "msg": "烹饪方式分析完成", "data": analysis_result})
class CuisineAnalysisView(View):
def post(self, request):
request_data = json.loads(request.body)
compare_cuisines = request_data.get('cuisines', [])
cuisine_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_diet").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "nutrition_data").option("user", "root").option("password", "123456").load()
if len(compare_cuisines) > 0:
cuisine_df = cuisine_df.filter(col("cuisine_type").isin(compare_cuisines))
cuisine_stats = cuisine_df.groupBy("cuisine_type").agg(round(avg("protein"), 2).alias("avg_protein"),round(avg("fat"), 2).alias("avg_fat"),round(avg("carbohydrate"), 2).alias("avg_carbohydrate"),round(avg("fiber"), 2).alias("avg_fiber"),round(avg("sodium"), 2).alias("avg_sodium"),round(sum("calories"), 2).alias("total_calories"),count("*").alias("dish_count"))
cuisine_stats = cuisine_stats.withColumn("protein_ratio", expr("avg_protein / (avg_protein + avg_fat + avg_carbohydrate) * 100"))
cuisine_stats = cuisine_stats.withColumn("fat_ratio", expr("avg_fat / (avg_protein + avg_fat + avg_carbohydrate) * 100"))
cuisine_stats = cuisine_stats.withColumn("carb_ratio", expr("avg_carbohydrate / (avg_protein + avg_fat + avg_carbohydrate) * 100"))
cuisine_stats = cuisine_stats.withColumn("sodium_level",when(col("avg_sodium") >= 800, "高盐").when(col("avg_sodium") >= 400, "中盐").otherwise("低盐"))
cuisine_stats = cuisine_stats.withColumn("balance_score",expr("100 - abs(protein_ratio - 15) - abs(fat_ratio - 30) - abs(carb_ratio - 55)"))
spark_cuisine_result = cuisine_stats.collect()
cuisine_data_list = [row.asDict() for row in spark_cuisine_result]
cuisine_pandas = pd.DataFrame(cuisine_data_list)
if len(cuisine_pandas) > 0:
cuisine_pandas['calories_per_dish'] = cuisine_pandas['total_calories'] / cuisine_pandas['dish_count']
cuisine_pandas['fiber_score'] = np.where(cuisine_pandas['avg_fiber'] >= 3, 100, cuisine_pandas['avg_fiber'] / 3 * 100)
cuisine_pandas['comprehensive_score'] = cuisine_pandas['balance_score'] * 0.5 + cuisine_pandas['fiber_score'] * 0.3 + (1000 - cuisine_pandas['avg_sodium']) / 10 * 0.2
cuisine_pandas['health_rank'] = cuisine_pandas['comprehensive_score'].rank(ascending=False, method='min')
final_result = []
for _, row in cuisine_pandas.iterrows():
final_result.append({"cuisine_type": row["cuisine_type"],"avg_protein": float(row["avg_protein"]),"avg_fat": float(row["avg_fat"]),"avg_carbohydrate": float(row["avg_carbohydrate"]),"avg_fiber": float(row["avg_fiber"]),"avg_sodium": float(row["avg_sodium"]),"protein_ratio": float(row["protein_ratio"]),"fat_ratio": float(row["fat_ratio"]),"carb_ratio": float(row["carb_ratio"]),"sodium_level": row["sodium_level"],"balance_score": float(row["balance_score"]),"dish_count": int(row["dish_count"]),"calories_per_dish": float(row["calories_per_dish"]),"fiber_score": float(row["fiber_score"]),"comprehensive_score": float(row["comprehensive_score"]),"health_rank": int(row["health_rank"])})
sorted_result = sorted(final_result, key=lambda x: x['comprehensive_score'], reverse=True)
return JsonResponse({"code": 200, "msg": "菜系饮食分析完成", "data": sorted_result})
基于大数据的健康饮食营养数据分析系统 文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目