当前位置: 首页 > news >正文

2024电工杯数学建模B题Python代码+结果表数据教学

2024电工杯B题保姆级分析完整思路+代码+数据教学

B题题目:大学生平衡膳食食谱的优化设计及评价 

以下仅展示部分,完整版看文末的文章

import pandas as pd
df1 = pd.read_excel('附件1:1名男大学生的一日食谱.xlsx')
df1# 获取所有工作表名称
excel_file = pd.ExcelFile('附件1:1名男大学生的一日食谱.xlsx')
sheet_names = excel_file.sheet_names
sheet_namesdf3 = pd.read_excel('附件3:某高校学生食堂一日三餐主要食物信息统计表.xlsx')
df3# 获取所有工作表名称
excel_file = pd.ExcelFile('附件3:某高校学生食堂一日三餐主要食物信息统计表.xlsx')
sheet_names = excel_file.sheet_names
sheet_names# 食谱提取foods = df1['1名男大学生的一日食谱'].dropna().values
meals = {}
name = ['早餐','午餐','晚餐']   
meal = []for item in foods:if item in name:key = itemmeal = []continueif item != '食物名称':meal.append(item)else:meals[key] = mealmeals

# 女大学生同理
df2 = pd.read_excel('附件2:1名女大学生的一日食谱.xlsx')
df2foods = df2['1名女大学生的1日食谱'].dropna().values
meals_nv = {}
name = ['早餐','午餐','晚餐']
meal = []for item in foods:if item in name:key = itemmeal = []continueif item != '食物名称':  meal.append(item)else:meals_nv[key] = mealmeals_nvfood_male = pd.read_excel('./食谱.xlsx',sheet_name='男大')
food_female = pd.read_excel('./食谱.xlsx',sheet_name='女大')
food_female.head()# 填充Nan值
# food_male=food_male.fillna(method='ffill', axis=0)
# food_female=food_female.fillna(method='ffill', axis=0)food_male.ffill(axis=0)
food_female.ffill(axis=0)food_female.head()# 读取食物营养素
foods_nutrients = pd.read_csv('./foods_nutrients.csv')
foods_nutrients.head()

# 计算营养素

# 计算每餐的总营养素 
whole_day_nutrients_male = {'热量 (kcal)': 0, '蛋白质 (g)': 0, '脂肪 (g)': 0, '碳水化合物 (g)': 0}
male_ls = []
for key in meals:total_nutrients = {'热量 (kcal)': 0, '蛋白质 (g)': 0, '脂肪 (g)': 0, '碳水化合物 (g)': 0}for item in meals[key]:for _, food in food_male.iterrows():if food['食物名称'] == item:nutrient = foods_nutrients[foods_nutrients['食物'] == food['主要成分']].iloc[0]portion_size = food['可食部(克/份)'] * food['食用份数'] / 100  # 换算成100g标准total_nutrients['热量 (kcal)'] += nutrient['热量 (kcal)'] * portion_sizetotal_nutrients['蛋白质 (g)'] += nutrient['蛋白质 (g)'] * portion_sizetotal_nutrients['脂肪 (g)'] += nutrient['脂肪 (g)'] * portion_sizetotal_nutrients['碳水化合物 (g)'] += nutrient['碳水化合物 (g)'] * portion_sizeprint(f"{key}的总营养素:", total_nutrients)male_ls.append(total_nutrients)whole_day_nutrients_male['热量 (kcal)'] += total_nutrients['热量 (kcal)']whole_day_nutrients_male['蛋白质 (g)'] += total_nutrients['蛋白质 (g)']whole_day_nutrients_male['脂肪 (g)'] += total_nutrients['脂肪 (g)']whole_day_nutrients_male['碳水化合物 (g)'] += total_nutrients['碳水化合物 (g)']
print(f"一天的总营养素:", whole_day_nutrients_male)

# 同理 计算女大
whole_day_nutrients_female = {'热量 (kcal)': 0, '蛋白质 (g)': 0, '脂肪 (g)': 0, '碳水化合物 (g)': 0}
female_ls = []
for key in meals_nv:total_nutrients = {'热量 (kcal)': 0, '蛋白质 (g)': 0, '脂肪 (g)': 0, '碳水化合物 (g)': 0}for item in meals_nv[key]:for _, food in food_female.iterrows():if food['食物名称'] == item:nutrient = foods_nutrients[foods_nutrients['食物'] == food['主要成分']].iloc[0]portion_size = food['可食部(克/份)'] * food['食用份数'] / 100  # 换算成100g标准total_nutrients['热量 (kcal)'] += nutrient['热量 (kcal)'] * portion_sizetotal_nutrients['蛋白质 (g)'] += nutrient['蛋白质 (g)'] * portion_sizetotal_nutrients['脂肪 (g)'] += nutrient['脂肪 (g)'] * portion_sizetotal_nutrients['碳水化合物 (g)'] += nutrient['碳水化合物 (g)'] * portion_sizefemale_ls.append(total_nutrients)print(f"{key}的总营养素:", total_nutrients)whole_day_nutrients_female['热量 (kcal)'] += total_nutrients['热量 (kcal)']whole_day_nutrients_female['蛋白质 (g)'] += total_nutrients['蛋白质 (g)']whole_day_nutrients_female['脂肪 (g)'] += total_nutrients['脂肪 (g)']whole_day_nutrients_female['碳水化合物 (g)'] += total_nutrients['碳水化合物 (g)']
print(f"一天的总营养素:", whole_day_nutrients_female)

绘制可视化图:

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负数显示问题# 推荐摄入量
recommended_nutrients_male = {'热量 (kcal)': 2400, '蛋白质 (g)': 75, '脂肪 (g)': 66.5, '碳水化合物 (g)': 345}
recommended_nutrients_female = {'热量 (kcal)': 1900, '蛋白质 (g)': 60, '脂肪 (g)': 49.5, '碳水化合物 (g)': 275}# 创建子图
fig, axes = plt.subplots(2, 2, figsize=(14, 10))# 男大学生热量
axes[0, 0].bar(['当前', '调整后', '推荐'], [whole_day_nutrients_male['热量 (kcal)'], adjusted_nutrients_male['热量 (kcal)'], recommended_nutrients_male['热量 (kcal)']], color=['red', 'blue', 'green'])
axes[0, 0].set_title('男大学生热量摄入')# 女大学生热量
axes[0, 1].bar(['当前', '调整后', '推荐'], [whole_day_nutrients_female['热量 (kcal)'], adjusted_nutrients_female['热量 (kcal)'], recommended_nutrients_female['热量 (kcal)']], color=['red', 'blue', 'green'])
axes[0, 1].set_title('女大学生热量摄入')# 男大学生主要营养素
axes[1, 0].bar(['蛋白质', '脂肪', '碳水化合物'], [whole_day_nutrients_male['蛋白质 (g)'], whole_day_nutrients_male['脂肪 (g)'], whole_day_nutrients_male['碳水化合物 (g)']], color='red', label='当前')
axes[1, 0].bar(['蛋白质', '脂肪', '碳水化合物'], [adjusted_nutrients_male['蛋白质 (g)'], adjusted_nutrients_male['脂肪 (g)'], adjusted_nutrients_male['碳水化合物 (g)']], color='blue', label='调整后', alpha=0.7)
axes[1, 0].bar(['蛋白质', '脂肪', '碳水化合物'], [recommended_nutrients_male['蛋白质 (g)'], recommended_nutrients_male['脂肪 (g)'], recommended_nutrients_male['碳水化合物 (g)']], color='green', label='推荐', alpha=0.5)
axes[1, 0].set_title('男大学生主要营养素摄入')
axes[1, 0].legend()# 女大学生主要营养素
axes[1, 1].bar(['蛋白质', '脂肪', '碳水化合物'], [whole_day_nutrients_female['蛋白质 (g)'], whole_day_nutrients_female['脂肪 (g)'], whole_day_nutrients_female['碳水化合物 (g)']], color='red', label='当前')
axes[1, 1].bar(['蛋白质', '脂肪', '碳水化合物'], [adjusted_nutrients_female['蛋白质 (g)'], adjusted_nutrients_female['脂肪 (g)'], adjusted_nutrients_female['碳水化合物 (g)']], color='blue', label='调整后', alpha=0.7)
axes[1, 1].bar(['蛋白质', '脂肪', '碳水化合物'], [recommended_nutrients_female['蛋白质 (g)'], recommended_nutrients_female['脂肪 (g)'], recommended_nutrients_female['碳水化合物 (g)']], color='green', label='推荐', alpha=0.5)
axes[1, 1].set_title('女大学生主要营养素摄入')
axes[1, 1].legend()# 设置总体布局
plt.tight_layout()
plt.show()

以上仅为部分第一问代码,其中更详细的思路、各题目思路、代码、讲解视频、成品论文及其他相关内容,可以看下方名片获取哦!

http://www.lryc.cn/news/352304.html

相关文章:

  • LabVIEW和ZigBee无线温湿度监测
  • FastCopy
  • stm32常用编写C语言基础知识,条件编译,结构体等
  • 秋招突击——算法——模板题——区间DP——合并石子
  • 数据库——实验12 数据库备份和还原
  • Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证
  • 文旅3d仿真数字人形象为游客提供全方位的便捷服务
  • leetcode算法常用函数
  • element-plus表格的表单校验如何实现,重点在model和prop
  • WPF密码输入框明文掩码切换
  • SaaS架构详细介绍及一个具体实现的示例
  • 四川音盛佳云电子商务有限公司正规吗?靠谱吗?
  • C++ 写的_string类,兼容std::string, MFC CString和 C# 的string
  • 【揭开深度学习之核:反向传播算法简析】
  • Web3 知识体系架构图
  • SQL、Mongo、Redis一般适用于那些场景
  • 学习图形推理
  • plsql 学习
  • 如何远程连接默认端口?
  • 现代C++ 如何使用 Lambda 使代码更具表现力、更容易理解?
  • LeetCode 2644.找出可整除性得分最大的整数:暴力模拟(两层循环)
  • Python列表,元组,集合,字典详解一篇搞懂
  • Postgresql源码(132)分布式行锁的原理分析
  • 前端 防抖和节流
  • C语言 | Leetcode C语言题解之第109题有序链表转换二叉搜索树
  • 【DevOps】Linux 下安装配置 Apache 服务器:打造你的专属 Web 平台
  • 23种设计模式之一————外观模式详细介绍与讲解
  • 202109青少年软件编程(Python)等级考试试卷(四级)
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖
  • 【系统架构师】-论文考点整理