计算机毕业设计选题:基于Spark+Hadoop的健康饮食营养数据分析系统【源码+文档+调试】

发布于:2025-09-09 ⋅ 阅读:(24) ⋅ 点赞:(0)

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖

一、项目介绍

基于Spark的健康饮食营养数据分析系统是一个集成大数据技术与营养学知识的综合性分析平台,采用Hadoop分布式存储架构和Spark大数据计算引擎作为核心技术支撑,实现对健康饮食营养数据的深度挖掘与智能分析。系统运用Python语言结合Django框架构建后端服务,通过Vue.js框架搭建前端交互界面,利用ECharts可视化组件展现数据分析结果。平台主要功能涵盖膳食营养成分综合分析、不同烹饪方式与饮食健康关联性分析、全球菜系与饮食类型特色对比分析、膳食准备复杂度与时间成本评估等四大核心模块。系统能够处理包含卡路里、蛋白质、碳水化合物、脂肪、纤维等19项营养指标的大规模膳食数据,通过Spark分布式计算能力实现对2000条膳食记录的快速分析处理,为用户提供个性化的健康饮食建议和营养搭配方案,同时支持多维度的数据统计与可视化展示功能。

选题背景
随着现代生活节奏的加快和人们健康意识的不断提升,科学的饮食营养管理已经成为维护个人健康的重要手段。当前社会中,由于工作压力大、生活不规律等因素,很多人在日常饮食中缺乏对营养成分的准确了解和科学搭配,导致营养不均衡、肥胖、慢性疾病等健康问题日益突出。传统的营养分析方法往往依赖人工计算和简单的表格统计,无法处理大规模的膳食数据,也难以发现不同饮食模式之间的内在关联规律。与此同时,大数据技术的快速发展为营养数据分析提供了新的技术手段,Hadoop和Spark等分布式计算框架能够高效处理海量的膳食营养数据,挖掘出传统方法难以发现的营养搭配模式和健康规律。在这样的技术背景和现实需求推动下,构建一个基于大数据技术的智能化健康饮食营养分析系统显得十分必要。

选题意义
本课题的研究具有重要的理论价值和现实意义,为大数据技术在健康管理领域的应用探索提供了有益尝试。从技术角度来看,项目将Spark大数据分析技术与营养学知识相结合,验证了分布式计算在处理复杂营养数据方面的可行性,为类似的跨学科应用项目提供了技术参考。从实用价值来看,系统能够帮助用户更科学地了解不同食物的营养特点,掌握健康的烹饪方式选择,合理安排膳食时间和营养搭配,对于改善个人饮食习惯具有一定的指导作用。对于营养师、健康管理从业者而言,系统提供的多维度数据分析功能可以辅助他们更好地为客户制定个性化的饮食方案。从教育意义上来说,本项目为计算机专业学生提供了一个将理论知识与实际应用相结合的实践平台,有助于加深对大数据技术栈的理解和掌握,提升解决复杂问题的综合能力。

二、视频展示

计算机毕业设计选题:基于Spark+Hadoop的健康饮食营养数据分析系统【源码+文档+调试】

三、开发环境

  • 大数据技术:Hadoop、Spark、Hive
  • 开发技术:Python、Django框架、Vue、Echarts
  • 软件工具:Pycharm、DataGrip、Anaconda
  • 可视化 工具 Echarts

四、系统展示

登录模块:
在这里插入图片描述

管理模块展示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
from pyspark.ml.stat import Correlation
import pandas as pd
spark = SparkSession.builder.appName("HealthyEatingAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
def comprehensive_nutrition_analysis():
    df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/healthy_eating/healthy_eating_dataset.csv")
    df = df.fillna({"calories": 0, "protein_g": 0, "carbs_g": 0, "fat_g": 0, "fiber_g": 0, "sugar_g": 0, "sodium_mg": 0, "cholesterol_mg": 0})
    df = df.withColumn("is_healthy_label", when(col("is_healthy") == 1, "健康").otherwise("不健康"))
    nutrition_stats = df.select(
        round(avg("calories"), 2).alias("avg_calories"),
        round(max("calories"), 2).alias("max_calories"),
        round(min("calories"), 2).alias("min_calories"),
        round(avg("protein_g"), 2).alias("avg_protein"),
        round(avg("carbs_g"), 2).alias("avg_carbs"),
        round(avg("fat_g"), 2).alias("avg_fat"),
        round(avg("fiber_g"), 2).alias("avg_fiber")
    )
    healthy_comparison = df.groupBy("is_healthy_label").agg(
        round(avg("calories"), 2).alias("avg_calories"),
        round(avg("protein_g"), 2).alias("avg_protein"),
        round(avg("fat_g"), 2).alias("avg_fat"),
        round(avg("sugar_g"), 2).alias("avg_sugar"),
        round(avg("sodium_mg"), 2).alias("avg_sodium"),
        count("*").alias("meal_count")
    )
    high_risk_meals = df.filter(
        (col("sugar_g") > df.select(percentile_approx("sugar_g", 0.9)).collect()[0][0]) |
        (col("sodium_mg") > df.select(percentile_approx("sodium_mg", 0.9)).collect()[0][0]) |
        (col("cholesterol_mg") > df.select(percentile_approx("cholesterol_mg", 0.9)).collect()[0][0])
    ).select("meal_name", "cuisine", "meal_type", "sugar_g", "sodium_mg", "cholesterol_mg")
    nutrition_correlation_data = df.select("calories", "protein_g", "carbs_g", "fat_g", "sugar_g")
    assembler = VectorAssembler(inputCols=["calories", "protein_g", "carbs_g", "fat_g", "sugar_g"], outputCol="features")
    vector_df = assembler.transform(nutrition_correlation_data)
    correlation_matrix = Correlation.corr(vector_df, "features").head()[0]
    correlation_result = spark.createDataFrame([(float(correlation_matrix[i, j]) for j in range(5)) for i in range(5)], ["calories_corr", "protein_corr", "carbs_corr", "fat_corr", "sugar_corr"])
    final_result = nutrition_stats.union(healthy_comparison.select(lit("综合营养统计").alias("analysis_type"), col("avg_calories"), col("avg_protein"), lit(0.0).alias("max_calories"), lit(0.0).alias("min_calories"), col("avg_fat").alias("avg_carbs"), col("avg_sugar").alias("avg_fat"), col("avg_sodium").alias("avg_fiber")))
    return final_result.toPandas().to_csv("nutrition_comprehensive_analysis.csv", index=False)
def cooking_method_health_analysis():
    df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/healthy_eating/healthy_eating_dataset.csv")
    df = df.fillna({"cooking_method": "未知", "calories": 0, "fat_g": 0, "sodium_mg": 0, "prep_time_min": 0, "cook_time_min": 0})
    cooking_method_mapping = {
        "Grilled": "烧烤", "Roasted": "烘烤", "Boiled": "水煮", "Steamed": "蒸制",
        "Fried": "油炸", "Sauteed": "炒制", "Baked": "烘焙", "Raw": "生食"
    }
    mapping_expr = create_map([lit(x) for x in sum(cooking_method_mapping.items(), ())])
    df = df.withColumn("cooking_method_cn", coalesce(mapping_expr[col("cooking_method")], lit("其他")))
    df = df.withColumn("total_time", col("prep_time_min") + col("cook_time_min"))
    df = df.withColumn("is_healthy_label", when(col("is_healthy") == 1, "健康").otherwise("不健康"))
    cooking_health_ratio = df.groupBy("cooking_method_cn").agg(
        count("*").alias("total_meals"),
        sum(when(col("is_healthy") == 1, 1).otherwise(0)).alias("healthy_meals")
    ).withColumn("health_ratio", round(col("healthy_meals") / col("total_meals") * 100, 2))
    cooking_nutrition_avg = df.groupBy("cooking_method_cn").agg(
        round(avg("calories"), 2).alias("avg_calories"),
        round(avg("fat_g"), 2).alias("avg_fat"),
        round(avg("sodium_mg"), 2).alias("avg_sodium"),
        round(avg("total_time"), 2).alias("avg_total_time"),
        count("*").alias("meal_count")
    )
    cooking_time_analysis = df.filter(col("total_time") > 0).groupBy("cooking_method_cn").agg(
        round(avg("prep_time_min"), 2).alias("avg_prep_time"),
        round(avg("cook_time_min"), 2).alias("avg_cook_time"),
        round(avg("total_time"), 2).alias("avg_total_time"),
        round(max("total_time"), 2).alias("max_total_time"),
        round(min("total_time"), 2).alias("min_total_time")
    )
    healthiest_methods = cooking_health_ratio.filter(col("health_ratio") >= 60.0).orderBy(desc("health_ratio"))
    fastest_healthy_meals = df.filter((col("is_healthy") == 1) & (col("total_time") <= 30)).groupBy("cooking_method_cn").agg(count("*").alias("fast_healthy_count")).orderBy(desc("fast_healthy_count"))
    final_cooking_analysis = cooking_nutrition_avg.join(cooking_health_ratio, "cooking_method_cn", "inner").join(cooking_time_analysis, "cooking_method_cn", "left")
    return final_cooking_analysis.toPandas().to_csv("cooking_method_analysis.csv", index=False)
def cuisine_diet_type_analysis():
    df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/healthy_eating/healthy_eating_dataset.csv")
    df = df.fillna({"cuisine": "未知", "diet_type": "未知", "calories": 0, "protein_g": 0, "carbs_g": 0, "fat_g": 0, "rating": 0})
    cuisine_mapping = {
        "Chinese": "中式", "Indian": "印度菜", "Mexican": "墨西哥菜", "Italian": "意大利菜",
        "Japanese": "日式", "French": "法式", "American": "美式", "Thai": "泰式", "Mediterranean": "地中海菜"
    }
    diet_type_mapping = {
        "Keto": "生酮饮食", "Paleo": "原始饮食", "Vegan": "纯素食", "Vegetarian": "素食",
        "Balanced": "均衡饮食", "Low-Carb": "低碳水", "High-Protein": "高蛋白"
    }
    cuisine_map_expr = create_map([lit(x) for x in sum(cuisine_mapping.items(), ())])
    diet_map_expr = create_map([lit(x) for x in sum(diet_type_mapping.items(), ())])
    df = df.withColumn("cuisine_cn", coalesce(cuisine_map_expr[col("cuisine")], lit("其他菜系")))
    df = df.withColumn("diet_type_cn", coalesce(diet_map_expr[col("diet_type")], lit("其他类型")))
    df = df.withColumn("is_healthy_label", when(col("is_healthy") == 1, "健康").otherwise("不健康"))
    cuisine_nutrition_profile = df.groupBy("cuisine_cn").agg(
        round(avg("calories"), 2).alias("avg_calories"),
        round(avg("protein_g"), 2).alias("avg_protein"),
        round(avg("carbs_g"), 2).alias("avg_carbs"),
        round(avg("fat_g"), 2).alias("avg_fat"),
        round(avg("sugar_g"), 2).alias("avg_sugar"),
        round(avg("sodium_mg"), 2).alias("avg_sodium"),
        round(avg("rating"), 2).alias("avg_rating"),
        count("*").alias("total_meals")
    )
    cuisine_health_ratio = df.groupBy("cuisine_cn").agg(
        sum(when(col("is_healthy") == 1, 1).otherwise(0)).alias("healthy_count"),
        count("*").alias("total_count")
    ).withColumn("health_percentage", round(col("healthy_count") / col("total_count") * 100, 2))
    diet_type_nutrition = df.groupBy("diet_type_cn").agg(
        round(avg("calories"), 2).alias("avg_calories"),
        round(avg("protein_g"), 2).alias("avg_protein"),
        round(avg("carbs_g"), 2).alias("avg_carbs"),
        round(avg("fat_g"), 2).alias("avg_fat"),
        count("*").alias("meal_count")
    )
    protein_energy_ratio = df.withColumn("protein_calories", col("protein_g") * 4).withColumn("carbs_calories", col("carbs_g") * 4).withColumn("fat_calories", col("fat_g") * 9)
    total_calculated_calories = protein_energy_ratio.withColumn("total_calc_calories", col("protein_calories") + col("carbs_calories") + col("fat_calories"))
    energy_composition = total_calculated_calories.filter(col("total_calc_calories") > 0).withColumn("protein_ratio", round(col("protein_calories") / col("total_calc_calories") * 100, 2)).withColumn("carbs_ratio", round(col("carbs_calories") / col("total_calc_calories") * 100, 2)).withColumn("fat_ratio", round(col("fat_calories") / col("total_calc_calories") * 100, 2))
    diet_energy_composition = energy_composition.groupBy("diet_type_cn").agg(
        round(avg("protein_ratio"), 2).alias("avg_protein_ratio"),
        round(avg("carbs_ratio"), 2).alias("avg_carbs_ratio"),
        round(avg("fat_ratio"), 2).alias("avg_fat_ratio"),
        count("*").alias("sample_count")
    )
    cuisine_diet_cross = df.groupBy("cuisine_cn", "diet_type_cn").agg(count("*").alias("combination_count")).orderBy(desc("combination_count"))
    final_cuisine_analysis = cuisine_nutrition_profile.join(cuisine_health_ratio, "cuisine_cn", "inner")
    return final_cuisine_analysis.toPandas().to_csv("cuisine_diet_analysis.csv", index=False)


六、项目文档展示

在这里插入图片描述

七、项目总结

基于Spark的健康饮食营养数据分析系统作为一个综合性的大数据应用项目,成功地将分布式计算技术与营养健康领域相结合,为计算机专业毕业设计提供了一个具有实际应用价值的研究方向。该系统通过Hadoop+Spark技术栈处理大规模膳食营养数据,运用Python Django框架构建后端服务架构,结合Vue.js和ECharts实现数据的可视化展示,形成了完整的技术解决方案。项目涵盖了膳食营养成分分析、烹饪方式健康关联性研究、全球菜系特色对比以及膳食时间成本评估等多个分析维度,体现了大数据技术在跨学科应用中的价值。从技术实现角度来看,系统运用了Spark的分布式计算能力、机器学习聚类算法以及统计分析方法,展现了现代大数据处理的核心技术要点。虽然作为毕业设计项目,其规模和复杂度相对有限,但该系统在数据处理流程设计、多维度分析建模以及可视化展示方面都体现了较好的工程实践水平,对于掌握大数据技术栈、提升数据分析能力具有积极的学习价值,同时也为健康管理信息化提供了有益的探索思路。

大家可以帮忙点赞、收藏、关注、评论啦 👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖


网站公告

今日签到

点亮在社区的每一天
去签到