本文尝试对Kaggle中提供的一份“麦当劳菜单中的各类食品的营养成分表”进行数据分析,初步回答页面中的一个问题,并做一些延伸讨论。
Inspiration
How many calories does the average McDonald's value meal contain?
平均下来,每顿麦当劳大概含有多少卡路里?
1.导入数据
下载数据集,解压后得到名为“menu”的.csv文件,脚本输入代码:
library(readr)
menu <- read_csv("C:/Users/Administrator/Desktop/menu.csv")
成功导入相应数据:
脚本输入代码:
menu #显示数据
class(menu)#数据类型显示
dim(menu)#查看变量的维数
由图可知,本数据集是一个data.frame类型的对象,包含260条数据记录、24个变量。
2.数据处理
本次数据分析的目标是:计算平均每顿麦当劳的卡路里数。对于以上问题,我们需要的变量应该为:每种餐品对应的卡路里数。
从表中目测可知,餐品类别有一下9组:Breakfast(早餐)、Beef & Pork(牛肉和猪肉)、Chicken & Fish(鸡肉和鱼)、Salads(沙拉)、Snacks & Sides(小吃和面包)、Desserts(甜点)、Beverages(饮料)、Coffee & Tea(咖啡和茶)、Smoothies & Shakes(冰沙和奶昔)。因此,我们首先计算出每个类别的餐品所提供的卡路里数:
脚本输入代码:
food<-menu
MCfood <- select(food,Category,Calories) #筛选变量列表
by_Category <- group_by(MCfood, Category) #将Category进行分组
by_Category #显示by_Category数据表
由上图可知,数据表包含260条数据记录、2个变量,按照category被分为9组。
3.数据计算
接着输入代码:
Category_sum <- summarise(by_Category, count = n(),#统计各分组的数量
mean_calories = mean(Calories, na.rm = TRUE))#计算每组平均卡路里数
Category_sum <- arrange(Category_sum , desc(mean_calories)) #按照卡路里数降序排列
Category_sum #显示Category_sum 表数据
由表中可知,各分组的餐品的平均卡路里量。Breakfast(早餐)为526.6、Beef & Pork(牛肉和猪肉)为494.0、Chicken & Fish(鸡肉和鱼)为553.0、Salads(沙拉)为270.0、Snacks & Sides(小吃和面包)为245.8、Desserts(甜点)为222.1、Beverages(饮料)为113.7、Coffee & Tea(咖啡和茶)为283.9、Smoothies & Shakes(冰沙和奶昔)为531.4。
由上述数据,可以绘制出餐品热量排名图,脚本输入代码:
ggplot(Category_sum ,aes(x =reorder(Category,mean_calories),y = mean_calories))+
geom_bar(stat = "identity",fill = "#B4EEB4",colour = "#BFFFFF",width=0.68) #绘制柱形图
按照本人的饮食习惯,选择的午餐的搭配通常为肉类、主食、甜点、饮品。所以,固定主食和甜点不变,我可以选择的剩余组合是Beef & Pork、Beverages;Beef & Pork、Coffee & Tea;Beef & Pork、Smoothies & Shakes;Chicken & Fish、Beverages;Chicken & Fish、Coffee & Tea;Chicken & Fish、Smoothies & Shakes,共计6种组合。分别计算各组合的卡路里量:
sum(245.8,222.1)#固定主食和甜点的卡路里数
sum1<-sum(245.8,222.1)
a<-sum(494.0,113.7,sum1)#加上Beef & Pork、Beverages的总卡路里数
b<-sum(494.0,283.9,sum1)#加上Beef & Pork、Coffee & Tea的总卡路里数
c<-sum(494.0,531.4,sum1)#加上Beef & Pork、Smoothies & Shakes的总卡路里数
d<-sum(553.0,113.7,sum1)#加上Chicken & Fish、Beverages的总卡路里数
e<-sum(553.0,283.9,sum1)#加上Chicken & Fish、Coffee & Tea的总卡路里数
f<-sum(553.0,531.4,sum1)#加上Chicken & Fish、Smoothies & Shakes的总卡路里数
上述六种午餐组合的卡路里摄入分别为1075.6、1245.8、1493.3、1134.6、1304.8、1552.3,由此可以计算出午餐平均摄入卡路里量。继续输入代码:
mean1<-c(a,b,c,d,e,f)
lunch=mean(mean1)
lunch
由上图可知,午餐摄入卡路里量为1301.1。
而本人晚餐的组合一般为肉类、主食、饮品,固定主食不变,所选的组合依旧为Beef & Pork、Beverages;Beef & Pork、Coffee & Tea;Beef & Pork、Smoothies & Shakes;Chicken & Fish、Beverages;Chicken & Fish、Coffee & Tea;Chicken & Fish、Smoothies & Shakes,共计6种组合。所以,只需将午餐卡路里平均摄入量减去甜点的222.1,即为晚餐平均卡路里摄入量。输入代码:
dinner=lunch-222.1
dinner
由图可知,本人晚餐摄入卡路里为1078.967。
综上所述,本人在麦当劳早、中、晚餐的卡路里摄入量分别为526.6、1301.1、1079。平均每顿摄入卡路里数为:
meal_mean=c(526.6,lunch,dinner)
mean(meal_mean)
从图可知,本人在麦当劳平均每顿摄入卡路里为968.9!!!!!!
meal_sum=sum(526.6,lunch,dinner)
meal_sum
从图可知,本人在麦当劳一天摄入平均卡路里为2906.6!!!!!!
我因此从网上查询了每日需要卡路里的计算方法:
[(10 × 体重) + (6.25 × 身高) - (5 × 年龄) - 161]*活动量,活动量为1.1-1.3不等。
代入体重51、身高165、年龄26,计算得卡路里需求范围为:1375.3-1625.3。
这告诉我,在麦当劳吃上三餐,相当于摄入了正常两天所需要的热量。哎哎哎~管住嘴、迈开腿啊~~~