判菜系、调众囗、打分数,这一回,我们用大数据烧菜?

2019-03-18 11:17:00 浏览数 (1)

大数据文摘投稿作品

作者:blmoistawinde

年前,文摘菌曾经扒下了全网所有“年夜饭”菜谱,找到了最有年味的一道菜的一文,对于菜谱数据分析产生了浓厚的兴趣,遂自己也写了个爬虫爬取了某美食网站的一些精选菜谱和食材信息。

当看到这些美味佳肴的数据源源不断入库时,我旺盛的好奇心一下子被激发了起来:

  • 世界菜系琳琅满目,能不能从数据中挖掘出它们的特色?
  • 能不能从大数据中得到大家对美食口味的特别偏好?
  • 若是我自己找到甚至做了一道菜,能不能自动判断它的菜系,甚至给它打分?

我相信丰富的数据挖掘和机器学习方法将能够满足我的好奇心,现在就动手进行探索吧。

菜系特色

我认为菜系的特色食材应该是一个菜系能够用来区别于其他菜系的特殊食材。

我想到,机器学习中的分类方法正好可以帮助我们挖掘出这些区分性的特征!

川菜可能是中国最为人津津乐道的菜系之一了,于是我把每道菜的食材当成特征,先训练了一个区分是否川菜的逻辑回归模型,模型的参数就能够揭示川菜的特色了,让我们看看:

上半部分是川菜的特色食材,大名鼎鼎的郫县豆瓣位列榜首想必是众望所归。而看着后面的那些食材,草鱼、剁椒、鸡爪、花椒…水煮鱼、泡椒凤爪这些菜肴的辛香是不是已经飘入鼻腔了呢?

下半部分则是川菜相对于其他菜系来说不喜使用的食材(排斥食材)。番茄酱、冰糖、蜂蜜等甜味食材榜上有名,是因为习惯了重辣,清甜已经不如法眼了吗?另外,作为上海人的笔者还注意到,自己身边十分普遍的鸡蛋在川菜中似乎并不常用,莫不是蜀道难,难于养母鸡?看来这些数据中确实有颇多内涵,值得我们细细探究哈。

用同样的方法,我得到了22种菜系的特色食材和排斥食材:

看着这张有味道的表格,笔者的脑袋里已经自动冒出了意面、寿司、菠萝饭;夹馍、羊排、扬州饭,种种美食的画面了。不知道来自五湖四海的大家又会想到什么美食呢?

菜谱评分

要给菜谱打分,实际上就可以看成一个回归问题。给出人类对菜品的评分,然后再让模型去学习人的评分标准即可。不过当下有一个问题,就是我的数据中并没有标准的人类评分。

为了解决这个问题,我构造了一个属性,令评分=log(菜谱收藏数)/log(浏览量),这是基于一个直觉——一道菜越好,看到这个菜谱的人就越可能收藏它,也就是收藏的比例会更高。利用这种“评分”,我训练了一个xgboost的回归模型。

有了训练出的模型,我尝试了用它来给几道菜打打分:

或许这个模型比较喜欢重口味?

xgboost模型也有很好的解释性,我们可以通过它输出的特征重要性了解到影响菜谱评分的重要食材。

油盐糖、葱姜蒜等家常食材和调味料位列前茅,看来能把家常的食材驾驭好对于菜品的质量就很重要了,平平淡淡即是真。

各人口味

若是要承办一顿盛宴款待来自五湖四海的朋友,那么众口难调可能就是一个要考虑的重要问题了。再好的一道菜也未必能够合所有人的口味,但是,如果能够让菜桌上菜品的分布与各人的喜好相适应,每个人也就都能吃上自己喜欢的食物了。接下来,我正是要从这里的数据中找到大家的口味偏好。

数据中没有直接的口味信息,不过,我们可以从菜谱的名称、原料、简介等文字信息中粗略的估计其口味。我选取了“酸 辣 咸 甜 香 鲜 清淡”作为7种基本口味,若是它们出现在一道菜的文字信息中,就认为这道菜有这种滋味。一道菜可以有多重口味,比如加辣椒的酸菜鱼至少就有“酸、辣”两种滋味。

下面,以收藏数占比为标准,看看网站上大家的总体口味偏好都是怎样的吧:

看来大家对美食的首要要求就是要香(毕竟真香!),其次鲜、辣也是非常流行的要素。这样看来,理想的一桌宴席,应当是满桌的菜品都香飘四溢,有殷红的辣菜让人食指大动,鲜美的汤品让人久久回味,还有酸、甜、咸味的小菜点心更增胃口。

虽然总体的喜好有很参考价值,但是每个人都有自己好的一口,不能一概而论。不过,要是知道一个人的故乡,就能够大致猜到他的口味爱好了。那么我们怎么了解各地人们的口味爱好呢?

数据中有着各地的菜系信息,若是能够统计各种菜系的口味分布,不就能够估计出这个地方人们的爱好了吗?下面的动图就展示了13种菜系的相对口味偏好。

图中数值为菜系间的相对比较值,而非绝对值。绝对值数据及本可视化代码在后面提供。

所以,若是能够了解宴会上客人的故乡,我们就能够更准确地选择我们的菜品。就比如辣味虽好,若是有江浙地区的客人,也要记得留一些清淡的菜品哦。

那么,我们就大数据烧菜吧?

现在,我们已经可以用数据估计人群的口味偏好,用模型给我们的菜品打分了,那么后面似乎我们就可以用大数据投其所好,择优烧菜?

或许有能力的同仁真的可以做这样的尝试,不过在笔者自己的小家中似乎还没有能与大数据相匹配的丰富食材。这不,一天家里面准备烧意面,正可以在美食网站上查好的烧法,比如我就看中了"罗勒番茄意面",然而,家中并没有罗勒这种东西。

罗勒是一种香草,青翠的绿色又为菜肴增色不少……这时,我的目光投向冰箱中的香菜,它说不定也能收到类似的奇效呢?

于是,在我的巧思,和家人的巧手下,一道香菜番茄酱意面就这么诞生了,色香味也都不错!

不知道大数据会给我这道奇葩的菜(离群值)打出几分?不过我想,充分发挥创意,开拓现有数据中不存在的全新可能性,似乎是一件更享受的事情呢!

注:

1、本文结论,仅供娱乐。如有吻合,不胜荣幸。欢迎大家提出意见、指出问题。由于代码较多较杂不及整理,我把部分代码(动态可视化和原料标准化)和处理后的数据文件开源在我的Github上,有兴趣不妨看看和star一下~

https://github.com/blmoistawinde/hello_world/tree/master/caipu_data_analyze

2、在正式训练模型前需要进行特征工程,筛选掉不重要的特征。而这里我们又要用大量不规范的食材名来做特征,比如说光是豆瓣酱,就有[‘豆瓣酱’, ‘郫县豆瓣酱’, ‘正宗郫县豆瓣酱’, ‘六月香豆瓣酱’, ‘豆瓣酱盐糖鸡精香菜’, ‘辣豆瓣酱’, ‘老干妈和豆瓣酱可以二选一’]这么多种说法,所以这里我们就要合并这些冗余的特征。我把网上采集得到的食材作为标准实体,利用它们的本名和别名把各种描述与这些实体链接(源码见上),就完成了这一步。还可能存在一些少量的不规范描述,我使用低频词过滤消除了它们。

3、分类模型的效果很不错,能够达到96.6%的准确率。但回归模型的R方=0.156,实际上效果并不是很好,所以这一部分的结论可能会有些问题,或许需要更好的评分标准,这里仅作为一种可能性的探索。

注:本原载于作者的CSDN博客:

https://blog.csdn.net/blmoistawinde/article/details/87884777

希望交流的可以到博客处或上面的Github联系。

本文为投稿作品,仅代表个人观点。

作者介绍:

上海西南某高校学森一枚,数据玩家,喜欢有趣有意义的数据挖掘分析。目前兴趣方向在NLP,社交网络分析和知识图谱等。 向往风一般自由,希望拂过之处给世界带来些清新与滋润~

0 人点赞