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.mzph.cn/bicheng/14948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart(OpenHarmony-SIG/ohos-MPChart)的使用,自定义绘制方法,绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的,要么完全是实线,要么完全是虚线。那么当我…

面试总结之:socket线路切换

"socket线路切换"通常指的是在网络通信过程中,根据当前网络状态或策略来动态更换数据传输路径的技术。这种技术可以提高通信的可靠性和性能。 在实际应用中,线路切换可能涉及到多种技术,例如: 负载均衡:根据每条路径的当前负载情况,动态地选择一条较为空闲的路…

MySql超大Sql文件导入效率优化 —— 筑梦之路

使用场景 日常我们对mysql数据库、mariadb数据库进行定时备份,而随着时间增长,导出来的备份文件越来越大,使用备份sql文件进行还原的时候,大文件非常慢,有些要执行很长时间,效率很低。 如何优化&#xff…

根据多个坐标经纬度获取到中心点的经纬度,scala语言

文章目录 前言scala 代码 总结 前言 Scala 语言 通过多个经纬度坐标点, 计算出中心点, 这里使用的是 Scala 语言,其他的语言需要自行转换。求出来的并不是原有的点,而是原有点的中心位置的点。 scala 代码 package com.dw.process.midimport java.lang.Double.pa…

C语言 | Leetcode C语言题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; bool isInterleave(char* s1, char* s2, char* s3) {int n strlen(s1), m strlen(s2), t strlen(s3);int f[m 1];memset(f, 0, sizeof(f));if (n m ! t) {return false;}f[0] true;for (int i 0; i < n; i) {for (int j 0; j &l…

基于UDP的tftp的文件传输

#define SER_PORT 69 #define SER_IP "192.168.125.71" #define CLT_PORT 6666 #define CLT_IP "192.168.125.158" int main(int argc, const char *argv[]) {//创建套接字文件描述符int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd -1){perror("sock…

vue2-computed,vue3+watch 前端实现列表搜索,结合filter+some+indexOf

vue2 computed实现 computed: {FBAAddressListComputed () {if (!this.fbaInput) return this.FBAAddressListconst lowerCaseInput this.fbaInput.toLowerCase()return this.FBAAddressList.filter((item) > {return [item.fbaCode, item.zipCode, item.countryCode, ite…

六(3)、RTKLIB源码解析 — [postpos]: execses(antpos, outhead, procpos)

目录 一、antpos() 1.1 avepos() 1.2 getstapos() 二、outhead() 三、procpos() 3.1 inputobs() 3.1.1 nexto

牛客周赛 Round 42

小红叕战小紫 #include<bits/stdc.h> using namespace std; void solve(){string s;cin>>s;if(s.length()<1)cout<<"yukari";else cout<<"kou"<<endl; } int main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie…

Qt时间类、日期类、时间日期类介绍

一.时间类&#xff08;QTime&#xff09; Qt中的时间类QTime是用来处理时间的类&#xff0c;它可以表示一个特定的时间&#xff0c;精确到毫秒。QTime类提供了一些方法来访问和操作时间&#xff0c;例如获取小时、分钟、秒以及毫秒部分&#xff0c;还可以进行时间的比较和运算。…

Python列表,元组,集合,字典详解一篇搞懂

目录 介绍 列表(List) 集合(Set) 字典(Dict) 元组(Tuple) 列表 列表定义 ​编辑 列表切片 列表常用方法 append extend ​编辑 insert ​编辑 remove pop ​编辑 clear ​编辑 列表修改元素 sort 升序 倒序 reverse count ​编辑 index 浅拷贝和深拷贝 …

《书生·浦语大模型实战营》第一课 学习笔记:书生·浦语大模型全链路开源体系

文章大纲 1. 简介与背景智能聊天机器人与大语言模型目前的开源智能聊天机器人与云上运行模式 2. InternLM2 大模型 简介3. 视频笔记&#xff1a;书生浦语大模型全链路开源体系内容要点从模型到应用典型流程全链路开源体系 4. 论文笔记:InternLM2 Technical Report简介软硬件基础…

基于Java的地震震中附近城市分析实战

目录 前言 一、空间数据说明 1、空间查询 二、Java后台开发 1、模型层设计与实现 2、控制层设计与实现 三、Leaflet地图开发 1、地震震中位置展示 2、附近城市展示 3、成果展示 总结 前言 随着全球气候变化和地壳活动的不断演变&#xff0c;地震作为一种自然灾害&…

第十三节:带你梳理Vue2 : watch侦听器

官方解释:> 观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式&#xff0c;用一个函数取代<br/>## 1. 侦听器的基本使用侦听器可以监听data对象属性或者计算属性的变化watch是观察属性的…

现代C++ 如何使用 Lambda 使代码更具表现力、更容易理解?

使用 Lambda 使代码更具表现力 一、Lambda VS. 仿函数二、总结 一、Lambda VS. 仿函数 Lambda 是 C11 中最引人注目的语言特性之一。它是一个强大的工具&#xff0c;但必须正确使用才能使代码更具表现力&#xff0c;而不是更难理解。 首先&#xff0c;要明确的是&#xff0c;…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件&#xff0c;使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

防范TOCTOU竞态条件攻击

防范TOCTOU竞态条件攻击 在软件开发过程中&#xff0c;我们常常会遇到需要在使用资源之前检查其状态的情况。然而&#xff0c;如果资源的状态在检查和使用之间发生了变化&#xff0c;那么检查的结果可能会失效&#xff0c;导致软件在资源处于非正常状态时执行无效操作。这种时…

[datawhale202405]从零手搓大模型实战:TinyAgent

结论速递 TinyAgent项目实现了一个简单的Agent智能体&#xff0c;主要是实现了ReAct策略&#xff08;推理调用工具的能力&#xff09;&#xff0c;及封装了一个Tool。 项目实现有一定的疏漏。为了正确运行代码&#xff0c;本次对代码Agent部分进行了简单修改&#xff08;完善…

windows安装rocketmq

1.下载连接 https://rocketmq.apache.org/download/ 2.解压到D盘下&#xff08;其他位置也可以&#xff09; 3.配置环境变量 需要有jdk环境 新建ROCKETMQ_HOME&#xff0c;刚刚解压的位置 编辑Path&#xff0c;新增%ROCKETMQ_HOME%\bin 4.启动mqnameserver 进入安装bin目录下…

ERC314协议

314协议功能详解 这两天花时间研究了一下314协议&#xff0c;总体感觉还不错&#xff0c;有创新。 功能亮点 314协议作为一种创新的代币标准&#xff0c;致力于降低用户交易成本与简化授权流程&#xff0c;通过“转账即交易”模式革新传统Swap体验。此协议简化了买卖代币的过程…