用Spark+Django打造食物营养数据可视化分析系统
🍊作者:计算机毕设匠心工作室
🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。
擅长:按照需求定制化开发项目、 源码、对代码进行完整讲解、文档撰写、ppt制作。
🍊心愿:点赞 👍 收藏 ⭐评论 📝
👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~
Java实战项目
Python实战项目
微信小程序|安卓实战项目
大数据实战项目
PHP|C#.NET|Golang实战项目
🍅 ↓↓文末获取源码联系↓↓🍅
这里写目录标题
- 基于大数据的食物营养数据可视化分析系统-功能介绍
- 基于大数据的食物营养数据可视化分析系统-选题背景意义
- 基于大数据的食物营养数据可视化分析系统-技术选型
- 基于大数据的食物营养数据可视化分析系统-视频展示
- 基于大数据的食物营养数据可视化分析系统-图片展示
- 基于大数据的食物营养数据可视化分析系统-代码展示
- 基于大数据的食物营养数据可视化分析系统-结语
基于大数据的食物营养数据可视化分析系统-功能介绍
本系统是基于大数据技术构建的食物营养数据可视化分析平台,采用Spark+Django的技术架构来处理和分析海量食物营养数据。系统运用Hadoop分布式存储框架管理大规模营养数据集,通过Spark强大的内存计算能力实现快速的数据处理和分析操作,结合Spark SQL进行复杂的营养成分查询与统计。后端采用Django框架构建RESTful API接口,前端运用Vue+ElementUI打造现代化的用户交互界面,通过Echarts实现丰富的数据可视化效果。系统功能覆盖宏观营养格局分析、特定营养素排名筛选、食物分类对比分析、膳食健康风险评估以及基于机器学习的食物聚类探索等多个维度,为用户提供全方位的食物营养信息查询和分析服务,帮助人们更科学地了解食物营养构成,做出更合理的膳食选择。
基于大数据的食物营养数据可视化分析系统-选题背景意义
选题背景
随着人们生活水平的提升和健康意识的增强,越来越多的人开始关注日常饮食的营养均衡和健康搭配。现代社会中,各种食物种类繁多,营养成分复杂多样,普通消费者往往难以准确掌握不同食物的具体营养信息,也缺乏科学的工具来帮助他们进行营养分析和比较。传统的营养查询方式多依赖于纸质资料或简单的数据库查询,信息获取效率低下,数据处理能力有限,难以满足用户对于深层次营养分析的需求。与此同时,大数据技术的快速发展为处理和分析海量营养数据提供了新的可能性,Spark等分布式计算框架能够高效处理大规模数据集,为构建智能化的营养分析系统奠定了技术基础。
选题意义
本课题的研究具有多方面的实际价值和应用意义。从技术角度来看,通过将大数据技术应用于食物营养分析领域,能够验证Spark等分布式计算框架在实际业务场景中的应用效果,为后续相关系统的开发提供一定的技术参考。从用户需求角度而言,系统能够为普通用户提供便捷的营养信息查询和分析工具,帮助他们更好地了解食物营养成分,制定更加科学合理的饮食方案。对于营养师、健身教练等专业人士来说,系统提供的数据分析功能可以辅助他们进行专业的营养指导工作。从社会价值层面考虑,该系统在一定程度上能够提升公众的营养健康意识,促进健康饮食理念的普及。虽然作为毕业设计项目,系统的规模和功能还比较有限,但这种尝试性的探索对于推动大数据技术在健康领域的应用具有积极的示范作用。
基于大数据的食物营养数据可视化分析系统-技术选型
大数据框架:Hadoop+Spark(本次没用Hive,支持定制)
开发语言:Python+Java(两个版本都支持)
后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持)
前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery
详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy
数据库:MySQL
基于大数据的食物营养数据可视化分析系统-视频展示
用Spark+Django打造食物营养数据可视化分析系统
基于大数据的食物营养数据可视化分析系统-图片展示
基于大数据的食物营养数据可视化分析系统-代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from django.http import JsonResponse
import json
from .models import NutritionData
import pandas as pd
import numpy as npdef get_nutrition_overview(request):spark = SparkSession.builder.appName("NutritionOverview").config("spark.sql.adaptive.enabled", "true").getOrCreate()df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://localhost:9000/nutrition/cleaned_nutrition_dataset_per100g.csv")calories_stats = df.select("热量").describe()protein_stats = df.select("蛋白质").describe()fat_stats = df.select("脂肪").describe()carb_stats = df.select("碳水化合物").describe()sodium_stats = df.select("钠").describe()sugar_stats = df.select("糖").describe()calories_distribution = df.select(when(col("热量") <= 100, "低热量(0-100)").when(col("热量") <= 300, "中等热量(100-300)").when(col("热量") <= 500, "高热量(300-500)").otherwise("超高热量(500+)").alias("热量区间")).groupBy("热量区间").count()macro_nutrients = df.select(avg("蛋白质").alias("平均蛋白质"), avg("脂肪").alias("平均脂肪"), avg("碳水化合物").alias("平均碳水化合物")).collect()[0]mineral_stats = df.select(avg("钙").alias("平均钙"), avg("铁").alias("平均铁"), avg("钠").alias("平均钠")).collect()[0]vitamin_stats = df.select(avg("维生素C").alias("平均维生素C"), avg("维生素B11").alias("平均维生素B11")).collect()[0]result = {"calories_stats": calories_stats.toPandas().to_dict(), "protein_stats": protein_stats.toPandas().to_dict(), "fat_stats": fat_stats.toPandas().to_dict(), "carb_stats": carb_stats.toPandas().to_dict(), "sodium_stats": sodium_stats.toPandas().to_dict(), "sugar_stats": sugar_stats.toPandas().to_dict(), "calories_distribution": calories_distribution.toPandas().to_dict(), "macro_nutrients": macro_nutrients.asDict(), "mineral_stats": mineral_stats.asDict(), "vitamin_stats": vitamin_stats.asDict()}spark.stop()return JsonResponse(result)
def get_nutrition_rankings(request):nutrient_type = request.GET.get('type', 'protein')limit = int(request.GET.get('limit', 20))spark = SparkSession.builder.appName("NutritionRankings").config("spark.sql.adaptive.enabled", "true").getOrCreate()df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://localhost:9000/nutrition/cleaned_nutrition_dataset_per100g.csv")nutrient_mapping = {"protein": "蛋白质", "fiber": "膳食纤维", "calcium": "钙", "iron": "铁", "low_calorie": "热量", "low_sodium": "钠"}target_nutrient = nutrient_mapping.get(nutrient_type)if nutrient_type in ["low_calorie", "low_sodium"]:rankings = df.select("食物名称", target_nutrient).orderBy(col(target_nutrient).asc()).limit(limit)else:rankings = df.select("食物名称", target_nutrient).orderBy(col(target_nutrient).desc()).limit(limit)rankings_list = rankings.collect()result = []for i, row in enumerate(rankings_list):result.append({"rank": i + 1, "food_name": row["食物名称"], "nutrient_value": float(row[target_nutrient]), "nutrient_name": target_nutrient})if nutrient_type == "protein":top_protein_foods = df.filter(col("蛋白质") > 20).select("食物名称", "蛋白质", "热量").orderBy(col("蛋白质").desc()).limit(10).collect()protein_efficiency = []for food in top_protein_foods:efficiency = food["蛋白质"] / food["热量"] * 100 if food["热量"] > 0 else 0protein_efficiency.append({"food_name": food["食物名称"], "protein": food["蛋白质"], "calories": food["热量"], "efficiency": efficiency})result.append({"protein_efficiency": protein_efficiency})spark.stop()return JsonResponse({"rankings": result, "nutrient_type": nutrient_type})
def get_category_comparison(request):spark = SparkSession.builder.appName("CategoryComparison").config("spark.sql.adaptive.enabled", "true").getOrCreate()df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://localhost:9000/nutrition/cleaned_nutrition_dataset_per100g.csv")df_with_category = df.withColumn("食物类别", when(col("食物名称").rlike(".*肉.*|.*鸡.*|.*鱼.*|.*虾.*"), "肉类").when(col("食物名称").rlike(".*菜.*|.*瓜.*|.*豆.*|.*萝卜.*"), "蔬菜类").when(col("食物名称").rlike(".*米.*|.*面.*|.*粉.*|.*饼.*"), "主食类").when(col("食物名称").rlike(".*奶.*|.*酸奶.*|.*芝士.*"), "奶制品").when(col("食物名称").rlike(".*果.*|.*橙.*|.*苹果.*|.*香蕉.*"), "水果类").otherwise("其他"))category_calories = df_with_category.groupBy("食物类别").agg(avg("热量").alias("平均热量"), count("*").alias("食物数量")).orderBy(col("平均热量").desc())category_protein = df_with_category.groupBy("食物类别").agg(avg("蛋白质").alias("平均蛋白质"), max("蛋白质").alias("最高蛋白质"), min("蛋白质").alias("最低蛋白质")).orderBy(col("平均蛋白质").desc())category_fat = df_with_category.groupBy("食物类别").agg(avg("脂肪").alias("平均脂肪"), stddev("脂肪").alias("脂肪标准差")).orderBy(col("平均脂肪").desc())category_sugar = df_with_category.groupBy("食物类别").agg(avg("糖").alias("平均糖含量"), sum("糖").alias("总糖含量")).orderBy(col("平均糖含量").desc())category_sodium = df_with_category.groupBy("食物类别").agg(avg("钠").alias("平均钠含量"), percentile_approx("钠", 0.5).alias("钠含量中位数")).orderBy(col("平均钠含量").desc())macro_composition = df_with_category.groupBy("食物类别").agg(avg("蛋白质").alias("平均蛋白质"), avg("脂肪").alias("平均脂肪"), avg("碳水化合物").alias("平均碳水化合物"))nutritional_density = df_with_category.withColumn("营养密度", (col("蛋白质") + col("膳食纤维") + col("维生素C")) / col("热量")).groupBy("食物类别").agg(avg("营养密度").alias("平均营养密度")).orderBy(col("平均营养密度").desc())result = {"category_calories": category_calories.toPandas().to_dict('records'), "category_protein": category_protein.toPandas().to_dict('records'), "category_fat": category_fat.toPandas().to_dict('records'), "category_sugar": category_sugar.toPandas().to_dict('records'), "category_sodium": category_sodium.toPandas().to_dict('records'), "macro_composition": macro_composition.toPandas().to_dict('records'), "nutritional_density": nutritional_density.toPandas().to_dict('records')}spark.stop()return JsonResponse(result)
基于大数据的食物营养数据可视化分析系统-结语
👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~
Java实战项目
Python实战项目
微信小程序|安卓实战项目
大数据实战项目
PHP|C#.NET|Golang实战项目
🍅 主页获取源码联系🍅