为了解答到底吃什么健康,我用程序分析了一千多种食材

作者:若饭 发布日期:2018-07-13



最近团队里陆续来了几个新同事,我照例开展食品营养方面的科普内训。美女设计师emily特别关心怎么吃能变得更漂亮,积极提问。其中有个问题是这样:“伯恩老师,我有些朋友还没打算尝试若饭,平时要多吃什么东西才比较好呢?

这个问题引起了我的兴趣。基于我们的很多饭友也不是一日三餐只吃若饭,关于其他食物该如何选择,似乎值得聊一聊。

在这个问题里,emily提到的「朋友」,通常情况下应该是她的同龄人,多数为上班族,有男有女,年龄大概以20+岁为主。而所谓的「比较好」,按我的理解应该是指如何保持健康、全面的营养摄入。

这些年轻的朋友们多数作息不规律,抽烟喝酒,三餐不定时,平时吃东西主要考虑口味和满足感。而询问「多吃什么东西」,应该是想得到一个简单粗暴的答案,方便后续直接多补充某一样食物以达到目的。毕竟年轻的朋友们大多信奉的是「熬最长的夜,敷最贵的面膜」。

从常规营养学角度来说,对于这种问题一般会建议「饮食要均衡多样化」、「多吃蔬菜」、「多喝水」、「少吃重口味,忌辛辣」等等。但我觉得这样的答案对于这些朋友来说,执行性很小。

正好前段时间我参加了一个Growth Hacker①的线下活动并做了简单的分享,作为一个支持用数据说话的码农,针对这个问题或许可以做些新的探索

为了解答到底吃什么健康,我用程序分析了一千多种食材


于是我想起电脑里还有几份关于各种食物营养成分表的文档。

“给我1小时分析下各种食物营养成分的数据,然后再来看吃什么比较好”

我打开了一个名为“中国食物成分表2015完整版”的Excel文件,用“世界上最好的语言PHP”处理这个任务,先在MySQL②里建表,然后用phpExcel③库将这个表格导入数据库,以供查询分析。我们可以看到包含各种食物营养成分的数据有1284条,即此数据库包含1284种食物。

为了解答到底吃什么健康,我用程序分析了一千多种食材


为了便于查看数据整体情况,需要做些页面,那就用ThinkPHP④框架,加上BootStrap⑤前端框架,完成了一个便于查看排序的食物数据清单页面。

为了解答到底吃什么健康,我用程序分析了一千多种食材


为了方便的查看所有食物的营养分布情况,需要坐标轴进行汇总展示,我选用ECharts⑥可视化图表进行快速开发。

稍微有点营养学常识的人都知道蛋白质对人体的重要性,首先我们来看1284种食物的蛋白质含量分布图:

为了解答到底吃什么健康,我用程序分析了一千多种食材


Y轴表示该食物每100克所含有的蛋白质。X轴列出所有食物,并按蛋白质含量从高到低排列,上图已包含了1284种食物的蛋白质含量,紧密连成了一条数据线(5个显示出来的食物名称仅做随机抽样显示)。从这个图不难看出,大多数食物的蛋白质含量在20%以下。

而在若饭不断的科普下,饭友们应该都知道,专业的健康饮食管理要求均衡摄入各种营养,蛋白质含量高并不是我们筛选食物的唯一标准。因此我们以蛋白质数据为基准,叠加脂肪含量进行查看,得到下面这张图:

为了解答到底吃什么健康,我用程序分析了一千多种食材


不难发现各个食物相应的脂肪含量极其不规则。

我们再次叠加三大宏量营养素的最后一项——碳水化合物,得到下图:

为了解答到底吃什么健康,我用程序分析了一千多种食材


相信看到这里,有些饭友已经凌乱了。通过这张画风清奇的数据图,我们可以得出结论:各种食物的三大宏量营养素含量并没有呈现直观可见的变化规律

  • 蛋白含量高的食物通常碳水含量较低;

  • 脂肪含量高的食物通常蛋白含量较低;

  • 碳水含量高的食物通常蛋白和脂肪含量较低;

因此,为了达到DRIs⑦推荐的营养摄入量,人类的饮食习惯只能以多样化为基础,也就是说,我们只能通过不同食物的组合搭配来满足身体的营养需求,无法指望通过某种单一的天然食物来达到吃得健康的目的。

“伯恩老师,能不能再给力一点?”

emily似懂非懂,于是我继续科普。

专业的健康饮食管理对三大宏量营养素的摄入比例是有要求的,其中的供能比概念如下:

要求日常饮食中,蛋白质的提供热量占总热量的10%-15%,脂肪占20%-30%,碳水占55%-65%。

而食物营养含量和热量的换算采取4:9:4的算法,也就是说,如果你吃了1克蛋白质,1克脂肪和1克碳水,它们所提供的热量分别是4大卡、9大卡和4大卡,总热量为17大卡,对应的占比分别是24%、52%和24%,显然不符合所要求的供能比。

或许这1284种单一食物里的供能比存在符合健康比例的食物?

那我们继续通过代码来实现每种食物的供能比计算,最终呈现的数据图如下:

为了解答到底吃什么健康,我用程序分析了一千多种食材


上图依旧以蛋白质含量从高到低排序作为X轴,Y轴是各个食物里蛋白、脂肪和碳水的供能比数据叠加。画风依然凌乱,可以看出食物的供能比依旧无序,部分食物甚至完全不提供热量(右侧空白处)。

秉着不死不休的科学精神,我们对所有食物逐个进行计算排查,最终发现1284种食物里有5种食物符合要求,分别是:

为了解答到底吃什么健康,我用程序分析了一千多种食材


从食物名称中不难发现其中4种是再加工食品,是相对比较健康的单一食物。食物名称后的括号内容分别表示蛋白、脂肪和碳水的供能比数据。

而我们意外发现,天然食物里的姜居然成功符合供能比要求。只是姜的能量密度太低了,100克姜里有87%都是水分,仅能提供41大卡热量。如果把姜作为一顿饭来吃,按照获取500大卡热量的需求,你得吃1.2公斤的姜。

为了解答到底吃什么健康,我用程序分析了一千多种食材


姜的供能比示意图

但新的问题又来了,我们筛选出的5个食物里,只有三大宏量营养素符合健康要求,膳食纤维和微量元素却远远不达标。比如这款补血饼干,营养成分详细数据如下:

为了解答到底吃什么健康,我用程序分析了一千多种食材


可以看到,为了“补血”,饼干中增加了铁元素的含量,除此之外其他微量元素基本没有(也可能是数据缺失),膳食纤维只有0.4克。

按照日常饮食的习惯,人体非常容易缺乏膳食纤维,从下面这个分布图中也能看出,各类食物里的纤维含量非常少。图中纤维含量最高的魔芋精粉则严重缺乏其他营养成分。

为了解答到底吃什么健康,我用程序分析了一千多种食材


综上,我们的结论依旧是,想要吃得健康只能多样化搭配,没有捷径。

现在emily知道了食物多样化的重要性,但似乎还是不知道如何解答朋友们的问题。

“伯恩老师,能不能再给力一点?”

关于饮食多样性,我国居民膳食指南中的平衡膳食宝塔图呈现得非常直观了::

为了解答到底吃什么健康,我用程序分析了一千多种食材


膳食宝塔是基于传统食物尽可能实现营养均衡的解决方案,针对宏量营养和微量营养分别指定相应的食物类型,例如谷薯、蔬菜和水果主要提供碳水和纤维,肉类、水产品和蛋类等提供蛋白质和脂肪,同时结合奶制品和豆类获取植物蛋白等。

近百年来,人类为多样化饮食做了各种努力,这都是因为传统饮食无法量化管控,只好用“饮食多样化”来尽可能规避营养缺失的隐患。

但在实际生活中,饮食多样化存在极大的执行困难,主要有几方面客观原因存在:

◎ 随着越来越焦虑的时代背景,人人都在为生活奔波奋斗,尤其是一线城市工作的年轻人,根本没有能力和时间自主采购食材在家烹饪,这对实现饮食多样化是极大的阻碍。

◎ 依托第三方获取食物时,可选择的范围很窄,多数商家更倾向于提供美味的食物而不是真正营养的食物。

综上,emily提出的问题落到执行上十分困难,到底怎么吃才健康,其实变成了一个纯粹看运气的事。

“伯恩老师,能不能再给力一点?”

我始终相信开源的力量,本文涉及到的全部食物数据以及程序代码全部公开,可供任何人随意使用。

我也期待着更多人加入我们这个开源项目,为人类的饮食进行更丰富的讨论。

本开源项目托管在国内“码云”平台,项目主页 https://gitee.com/sanool/foodnutrition

注解:

①Growth Hacker:把数据分析、创造力及好奇心三者结合到一起去推动业务发展的专业技术人员

②MySQL:一种开源的数据库系统,便于实施数据的结构化查询分析。

③phpExcel:一种基于php开发的,用于快速读取和写入Excel格式文件的开发库。

④ThinkPHP:一种基于PHP的web开发框架。

⑤BootStrap:一种javascript+css的前端网页框架,组件丰富,便于高效开发前台网页。

⑥ECharts:百度公司出品的一套开源数据图表开发库。

⑦DRIs:膳食营养素参考摄入量(Dietary Reference Intakes),是在RDAs基础上发展起来的一组每日膳食营养素摄入量的参考值,包括4项内容:平均需要量(EAR)、推荐摄入量(RNI)、适宜摄入量(AI)和可耐受最高摄入量(UL)

⑧图灵完备:在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。这个词源于引入图灵机概念的数学家艾伦·图灵。

⑨第一性原理:最早是古希腊哲学家亚里士多德提出的哲学概念,“在任何一个系统中,存在第一性原理,是一个最基本的命题或假设,不能被省略,也不能被违反。”,后来被广泛应用到物理学、数学和计算机科学。