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_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()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 屏保开关

设置-显示-屏保, 打开关闭 设置代码在 ./packages/apps/Settings/src/com/android/settings/dream/DreamMainSwitchPreferenceController.java , Overridepublic boolean isChecked() {return mBackend.isEnabled();}Overridepublic boolean setChecke…

K8S中Prometheus+Grafana监控

1.介绍 phometheus:当前一套非常流行的开源监控和报警系统。 运行原理:通过HTTP协议周期性抓取被监控组件的状态。输出被监控组件信息的HTTP接口称为exporter。 常用组件大部分都有exporter可以直接使用,比如haproxy,nginx,Mysql,Linux系统信…

实例展示vue单元测试及难题解惑

通过生动详实的例子带你排遍vue单元测试过程中的所有疑惑与难题。 技术栈:jest、vue-test-utils。 共四个部分:运行时、Mock、Stub、Configuring和CLI。 运行时 在跑测试用例时,大家的第一个绊脚石肯定是各种undifned报错。 解决这些报错…

网络协议测试仪设计方案:474-便携式手提万兆网络协议测试仪

便携式手提万兆网络协议测试仪 一、平台简介 便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议…

同旺科技 FLUKE ADPT 隔离版发布 ---- 3

所需设备: 1、FLUKE ADPT 隔离版 内附链接; 应用于:福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于:福禄克Fluke 15B / 17B / 18B 总体连接: 连接线,根据自己实际需求而定; …

java操作Redis缓存设置过期时间

如何用java操作Redis缓存设置过期时间?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 在应用中我们会需要使用redis设置过期时间&…

WPS PPT学习笔记 1 排版4原则等基本技巧整理

排版原则 PPT的排版需要满足4原则:密性、对齐、重复和对比4个基本原则。 亲密性 彼此相关的元素应该靠近,成为一个视觉单位,减少混乱,形成清晰的结构。 两端对齐,1.5倍行距 在本例中,19年放左边&#x…

融资融券利率4.0%!融资融券保证金比例和余额

融资融券利率最低是4.0%~5.0%,这是目前市场最低的利率水平,股票佣金万一。 各家券商的利率差异是较大的,现在无门槛利率是5%,根据投资者的资金量大小在4.0%~5%之间浮动,具体需要通过对应证券经理协商办理!…

C++_vector操作使用

文章目录 🚀1.1 vector介绍🚀1.2 vector的初始化🚀1.3 vector的常用内置函数🚀1.4 vector的遍历 🚀1.1 vector介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元…

什么是线程安全?如何保证线程安全?

目录 一、引入线程安全 👇 二、 线程安全👇 1、线程安全概念 🔍 2、线程不安全的原因 🔍 抢占式执行(罪魁祸首,万恶之源)导致了线程之间的调度是“随机的” 多个线程修改同一个变量 修改…

Java代码审计-XSS审计

一、漏洞简介 XSS是Cross Site Scripting的缩写,意为"跨站脚本攻击",为了避免与层叠样式表(Cascading Style Sheet,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种针对网站应用程序的安全漏洞攻击技术&#xff…

线上申请流量卡一些必知的小知识,愿每个人都能刷到!

很多朋友都想办理一张大流量卡,但是又怕被套路,一时不知道该怎么选择,那个纠结啊。 今天,小编用自己多年的行业经验给大家整理了一些办卡攻略,希望能帮助大家选到适合自己的流量卡。 ​1、有的流量卡都是免费申请&…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(三)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…

了解 Linux 网络卡绑定:提高网络性能与冗余性

在现代 IT 基础设施中,网络性能和可靠性至关重要。对于许多企业和个人用户来说,确保网络的高可用性和冗余性是首要任务之一。Linux 提供了一个强大的解决方案——网络卡绑定(Network Interface Card Bonding,简称 NIC Bonding&…

DevExpress Office File API中文教程 - 如何用OpenAI模型增强Office文档可访问性?

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

58同城如何降低 80%的机器成本 | OceanBase案例

本文作者:58同城架构师刘春雷 一、背景介绍 58同城作为中国互联网生活服务领域的领军者,其平台规模居国内之首,涵盖了包括车辆交易、房产服务、人才招聘、本地生活服务以及金融等多元化的业务场景。 因其业务的广泛性和多样性,我…

Keil MDK map文件学习笔记

Keil MDK map文件学习笔记 map文件组成1.Section Cross References段交叉引用2.Removing Unused input sections from the image移除无用的段3.Image Symbol Table镜像符号表局部符号表全局符号表 4.Memory Map of the image镜像存储器映射ROM区执行域RAM区执行域 5. Image com…

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域,大规模训练作业面临着一系列挑战。首先,硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次,传统的检查点机制在大规模训练中效率低下,耗时长且容易降低训练的有效时间。资源管理的复杂性也给…

关于新配置的adb,设备管理器找不到此设备问题

上面页面中一开始没有找到此android设备, 可能是因为我重新配置的adb和设备驱动, 只把adb配置了环境变量,驱动没有更新到电脑中, 点击添加驱动, 选择路径,我安装时都放在了SDK下面,可以尝试…

卷爆短剧出海:五大关键,由AIGC重构

短剧高温下,谈谈AIGC的助攻路线。 短剧,一个席卷全球的高温赛道。 以往只是踏着霸总题材,如今,内容循着精品化、IP化的自然发展风向,给内容、制作、平台等产业全链都带来新机,也让短剧消费走向文化深处&am…