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

news2025/1/16 8:51:48

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_names

df3 = 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 = item
        meal = []
        continue
    if item != '食物名称':
        meal.append(item)
    else:
        meals[key] = meal

meals

# 女大学生同理
df2 = pd.read_excel('附件2:1名女大学生的一日食谱.xlsx')
df2

foods = df2['1名女大学生的1日食谱'].dropna().values
meals_nv = {}
name = ['早餐','午餐','晚餐']
meal = []

for item in foods:
    if item in name:
        key = item
        meal = []
        continue
    if item != '食物名称':  
        meal.append(item)
    else:
        meals_nv[key] = meal

meals_nv

food_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_size
                total_nutrients['蛋白质 (g)'] += nutrient['蛋白质 (g)'] * portion_size
                total_nutrients['脂肪 (g)'] += nutrient['脂肪 (g)'] * portion_size
                total_nutrients['碳水化合物 (g)'] += nutrient['碳水化合物 (g)'] * portion_size
    print(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_size
                total_nutrients['蛋白质 (g)'] += nutrient['蛋白质 (g)'] * portion_size
                total_nutrients['脂肪 (g)'] += nutrient['脂肪 (g)'] * portion_size
                total_nutrients['碳水化合物 (g)'] += nutrient['碳水化合物 (g)'] * portion_size
    female_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.coloradmin.cn/o/1690976.html

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

相关文章

派可数据助力制造企业数字化生产管理新能力提升

生产管理是现代企业运营的核心之一,它决定了产品的质量、生产效率和企业的竞争力。在一个日益竞争激烈、市场需求多变的商业环境中,如何高效地组织和管理生产过程成为了企业不容忽视的重要课题。 过去,生产管理可能主要侧重于物理工厂的运作…

Sping源码(八)—registerBeanPostProcessors

序言 之前我们用大量的篇幅介绍过invokeBeanFactoryPostProcessors()方法的执行流程。 而invokeBeanFactoryPostProcessors的主要逻辑就是遍历执行实现了BeanDefinitionRegistryPostProcesso类(主要是针对BeanDefinition的操作)和BeanFactoryPostProcessor(主要针对BeanFacrot…

【C语言】深入理解指针(一)(上)

本篇文章将讲解: (1)内存和地址 (2)指针变量和细致 (3)指针变量类型的意义 一:内存和地址 (1)内存 在讲内存和地址之前,我们讲一个生活中的…

混合组网VS传统网络:智能硬件混合组网优劣势浅要解析

智能硬件混合组网是一种利用多种通信技术相结合的方法,以实现更灵活、更可靠的网络连接。通过蓝牙、Wi-Fi、LoRa、4G相互之间的不同通讯方式,根据应用场景的不同以及现场实际环境,优选最佳物联网混合组网方案,以达到部署最便捷性价…

618知识狂欢,挑本好书,点亮智慧生活!

618精选编程书单:提升你的代码力 一年一度的618又到啦!今年的618就不要乱买啦,衣服买多了会被淘汰,电子产品买多了会过时,零食买多了会增肥,最后怎么看都不划算。可是如果你购买知识,坚持阅读&a…

2024年了, 你还不会使用node.js做压力测试?

前些天刷抖音,看到网传的Java继父,求人攻击压测他的网站,这不得摩拳擦掌。 所以今天来聊聊如何对自己的项目、接口进行压力测试。 压力测试的目的 首先, 绝对不是为了压测、攻击别人的网站为乐。 1、探索线上系统流量承载的极限&#xff…

鲁教版六年级数学下册-笔记

文章目录 第五章 基本平面图形1 线段、射线、直线2 比较线段的长短3 角4 角的比较5 多边形和圆的初步认识第六章 整式的乘除1 同底数幂的乘法2 幂的乘方与积的乘方3 同底数幂的除法4 零指数幂与负整数指数幂5 整式的乘法6 平方差公式7 完全平方公式8 整式的除法 第七章 相交线与…

保障餐饮场所安全:定期送检可燃气体报警器

在餐饮行业,火灾隐患一直备受关注。餐厅、茶饮店等场所常常使用燃气设备,而这些设备带来了潜在的安全隐患。 为了及时发现并预防可燃气体泄漏,可燃气体报警器的定期送检显得尤为重要。那么,为什么可燃气体报警器需要定期送检呢&a…

20.有序性与内存屏障

文章目录 有序性与内存屏障1.重排序1.1.编译器重排序1.2.CPU重排序1.2.1.指令级重排序1.2.2.内存系统重排序1.3.As-if-Serial规则 2.内存屏障2.1.硬件层面的内存屏障2.1.2.写屏障2.1.3.读屏障2.1.4.全屏障 2.2.硬件层的内存屏障作用2.3.案例 有序性与内存屏障 有序性 与 可见性…

基于英飞凌BGT60LTR11AIP E6327芯片具低功耗的脉冲多普勒操作模式常用于汽车应用的雷达上

芯片特征: 60 GHz收发器MMIC,带一个发射器和一个接收器单元封装天线(AIP)(6.73.30.56 mm3)低功耗的脉冲多普勒操作模式自主模式用于运动和运动方向的集成检测器运动检测信号的直接输出目标检测范围的15个可配置阈值检测…

汇编-16位汇编环境搭建

16位汇编环境 在学习16位汇编时,我选择的环境是在VMware中安装Windows XP虚拟机来学习;因为Windows XP提供了兼容的DOS环境,可以直接运行和调试16位汇编程序;在win10,win11环境中原生不支持直接运行 16 位程序&#x…

华为鸿蒙认证培训 | 讯方技术成为首批鸿蒙原生应用开发及培训服务商

5月20日,鸿蒙原生应用合作交流推介会-深圳站在深圳中洲万豪酒店隆重举行。讯方技术作为鸿蒙钻石服务商受邀参与此次活动,活动由讯方技术总裁刘国锋、执行副总裁刘铭皓、教学资源部部长张俊豪共同出席。 本次活动由深圳政府指导,鸿蒙生态官方…

微服务项目收获和总结---第4天(文章审核和保存)

文章审核以及APP端保存文章 业务流程: App端保存接口: 数据库表详情 文章的基本信息表:id,标题,作者id,频道id...... 文章的权限/配置表:存储文章是否可以评论,是否上架&#xff…

eclipse配置JDK和Tomcat

eclipse配置JDK jdk配置 配置JDK: 首先,确保JDK已经安装并配置了环境变量。这包括设置JAVA_HOME环境变量,指向JDK的安装目录,以及更新CLASSPATH和PATH环境变量以包含JDK的bin目录。 在Eclipse中,通过Window > Pre…

【设计模式深度剖析】【4】【创建型】【建造者模式】| 类比选购汽车的过程,加深理解

👈️上一篇:抽象工厂模式 | 下一篇:原型模式👉️ 目录 建造者模式概览定义英文原话直译如何理解呢?建造者模式将对象的建造过程给抽象出来了类比选购汽车 4个角色UML类图1. 抽象建造者(Builder)角色2. 具体建造者…

02.爬虫---HTTP基本原理

02.HTTP基本原理 1.URI 和 URL 的区别2.HTTP 和 HTTPS 的区别3.请求过程 1.URI 和 URL 的区别 URL(Uniform Resource Locator)即-统一资源定位符 URL是用来定位和访问互联网上资源的独特标识,它包括了资源的位置(如IP地址或域名&a…

Docker-制作镜像的两种方式=》基于容器制作基于Dockerfile制作

本文主要是基于Docker如何制作一个Java镜像,而一个Java镜像想要运行需要系统环境,JDK。所以我们要先有一个系统环境,本文使用的是centos7,JDK选择版本是8,而我使用的Java程序是一个简易的springBoot项目,你…

详细分析Vue按钮间距的优化方式(附Demo)

目录 前言1. 按钮间距2. 垂直间距 前言 正常间距如下&#xff1a; 其Demo如下&#xff1a; <el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"openFor…

Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证

JWT的认识 什么是 JWT JWT&#xff08;英文全称&#xff1a;JSON Web Token&#xff09;是目前最流行的跨域认证解决方案。 JWT 的工作原理 总结&#xff1a;用户的信息通过 Token 字符串的形式&#xff0c;保存在客户端浏览器中。服务器通过还原 Token 字符串的形式来认证用…

Mysql注入详细讲解

特殊字符 0x3a:0x7e~0x23# 注入基础 联合查询注入(union) :::tips 页面将SQL查询内容显示出来&#xff0c;即为有回显&#xff0c;可以尝试联合查询注入 利用关键字union &#xff0c;union all 拼接恶意SQL语句 ::: 注入流程 有报错&#xff0c;可以利用报错。如&#xff…