本期推荐
本栏目责任编辑:王
基于Python 的美食数据爬取及可视化研究
依力·吐尔孙,艾孜尔古丽
(新疆师范大学,新疆乌鲁木齐830054)
摘要:本文主要研究中国菜谱里面的美食词汇资源的爬取、构建、数据处理并对词汇资源进行数据可视化分析。本文首先
采用Python 语言使用Scrapy 框架进行数据爬取并对目标网站的网页进行页面分析,采集的是豆果美食网里最新发布的中国菜系菜谱,然后用Pandas 、Numpy 等库进行清洗数据并做可视化分析。除此之外,用Pyecharts 库制作各大菜系菜品量的饼状图。最后通过Jieba 库进行中文分词处理,筛选出高频词
汇并制作了词云图。为了使乏味的文本数据散发活力,深入分析数据,以词云图展示数据分析的结果,增加数据可视化。关键词:美食词汇;Python ;网络爬虫;数据分析;词云图中图分类号:TP391
文献标识码:A
文章编号:1009-3044(2021)10-0019-02
开放科学(资源服务)标识码(OSID ):
Research on Data Crawling and Visualization of Food Based on Python Eli Tursun,Azragul
(Xinjiang Normal University,Urumqi 830054,China)
Abstract:This paper mainly studies the crawling,construction,data processing and data visualization analysis of Chinese cuisine vocabulary resources in Chinese recipes.In this paper,we first use Python language to Scrapy framework to crawl data and analyze the web pages of the target website.We collected the latest Chinese cuisine recipes from the Douguo Cuisine Network.Then we use libraries such as Pandas and Numpy to clean the data and do visual analysis.In addition,Pyecharts library is used to make pie charts of the quantity of dishes in each major cuisine.F
inally,word segmentation is carried out through JIEBA library to screen out high-frequency words and make word cloud map.In order to make boring text data exude vitality,in-depth analysis of the data,the word cloud map to show the results of data analysis,increase data visualization.Key words:food vocabulary;Python;Web crawler;Data analysis;Word cloud
非典、新冠肺炎等致命性疾病让人们更加意识到健康饮食习惯的重要性。人工智能、大数据的发展对饮食词汇数据的处理方面带来了便利。不仅,计算语言学、统计学等交叉学科的发展使得处理饮食词汇资源的数据引来了新思路和新角度,而且处理这些饮食数据资源促进了中国饮食文化、膳食结构、营养学、预防疾病学等学科方面的研究。
构建饮食词汇资源并进行数据可视化对研究民俗饮食有着重要作用,这些数据有利于分析各地民俗饮食的结构。为进一步开展食物资源和增加菜谱品种方面的研究,对各个地方不同菜谱的原料及其用料使用情况、食品加工、饮食制作、饮食命名和饮食传承有关的信息进行数据采集并对数据进行可视化研究是有必要的。
1美食文本采集技术研究
1.1美食文本采集思路
随着人工智能和大数据的发展,网络上越来越大的数据量成为一种重要资源,如何从这些海量数据中快速有效的提取和分析有效数据并排除无效数据是信息处理技术的研究热点。获取网络上有效数据的方法是网络爬虫技术。实现Web 爬虫技术,编写好网站爬虫的关键是利用更高效的爬虫工具和爬虫框架。于是Python 语言提供了很多方便的爬虫框架。Scrapy 是基于Python 开发的一个高层次的快速的网页抓取框架,用于
抓取Web 站点信息并从页面中提取结构化的数据[1]
。因此本文完成网站的数据提取任务时便用到了Scrapy 框架。文中采用
收稿日期:2021-01-05
基金项目:国家自然科学基金(61662081);新疆维吾尔自治区社会科学基金(2016CYY067);国家语言资源监测与研究中心少数民族
语言分中心项目(NMLR201602);新疆维吾尔自治区自然科学基金(2017D01A58);新疆维吾尔自治区青年科技创新人才培养工程(QN2016BS0365)
作者简介:依力·吐尔孙(1992—),男(维吾尔族),新疆莎车人,在读研究生,学士,研究方向为计算语言学;通信作者:艾孜尔古丽
(1987—),女(维吾尔族),新疆乌鲁木齐人,副教授,博士,研究方向为计算语言学,自然语言处理。
19
本栏目责任编辑:王力
本期推荐
Computer Knowledge and Technology 电脑知识与技术第17卷第10期(2021年4月)
了Scrapy 框架来对数据进行提取,爬取的对象是豆果美食网站菜式菜系的中国菜。
在进行爬取豆果美食网站数据之前,为了编写好代码的逻辑并更有效地提取该网站数据,应该要弄明白并且分析美食网站的域名结构和层次。分析研究的网站,其URL 链接结构以主域名为中心[2],主域名下分有豆果美食网站的首页、菜式菜系、中国菜等子域名,也就是导航部分。在子域名下是更详细的各种菜系URL 信息。此网站的结构进行分析就能提取菜系菜品所有URL ,但是会回到首页,因此进行URL 的去重,建立环路。
该文爬取豆果美食网站菜式菜系里的所有中国菜系的菜品,获取的内容包括菜谱链接、菜谱、用户、
用料、图片、评分、菜系。通过对网站页面的分析。通过美食网站的最新菜系页面提取全部菜谱数据代码,而不需要爬取所有URL 。通过“最新菜系”网站获取全部菜谱的策略是对比页面跳转URL 的变化,因此可以通过对数字的递增而得到所有数据。1.2美食网站环境分析及采集1.2.1美食网站页面分析
想要得到爬取规则和相应的代码信息,首先需要对美食网站内容进行结构分析。因此,进入豆果美食网,打开全部分类,到菜式菜系目录下的中国菜。本次需要爬取的内容是中国菜下的苏菜、新疆菜、东北菜等十五个中国菜系。这里面有效处理提取的数据是各大菜系中的菜谱名,菜谱链接、图片、评分、用户名、用料、菜系。打开Chrome 浏览器进入豆果美食网站后,查看全部分类到对应的菜系,按F12键就能看到页面的布局和源代码信息。查看并分析这些中国菜的菜系标题都包含了属性为class 的<li>元素里面。该页面的源代码信息和中国菜的各个菜系页面如图1
所示。
图1爬取代码信息和页面布局
通过源代码和页面布局分析,下面利用xpath 表达式进行该网站的解析。为了解析每一条信息的语句,编写了一下语句:response.xpath("//div[@class='pages']/a/@href").extract()。该表达式不仅能匹配当前节点和文档中的节点,而且直接从全文中搜索所有id 为'list'的结点。这样就能得到了该节点之后按照菜系所在的位置在该节点内部进行遍历搜索。这个程序就能得到了每条菜谱的详细页码连接和菜谱信息。1.2.2数据处理及保存
经过以上表达式,让爬虫程序提取到了美食网站内的菜谱页面信息,可是想要进行完全处理数据,那么利用item 对它进行格式化。文中定义一个名为DouguoItem 的类,该类之后需要从网页中获取数据内容的集合,它们分别是menu :用来存放菜谱的信息,menu_link :用来存放菜谱链接,score :用来存放评分,user:用来存放用户名,img_link :用来存放菜谱图片,ingredi⁃
ent :用来存放用料信息,classify :用来存放菜系。
为了进行进一步的数据处理、数据分析以及数据可视化,因此有必要对这些数据进行保存。由于本实验数据量不大,而且Scrapy 提供了多种格式的数据保存形式,因此使用简单的excel 文件的形式保存数据。
2美食数据处理技术研究
为了方便后续的可视化分析,还需要对爬取数据进行处理。美食词汇处理过程分为数据清洗,删除重复项,缺失值处理,评分字段清洗和添加用料数字段等。由于本研究保存的是excel 文本格式,为了更加高效地处理Excel 中的数据使用到了pandas 库。还用到了Numpy 库,用这个库来整合爬取数据。本文用jupyter notebook 来运行代码,首先,导入爬取到的菜谱数据,这个过程用了pd.read 方法,并添加了列名。预览数据
导航页源码如下:
图2数据处理和可视化库的运行结果
其次,用drop_duplicates 方法来删除爬虫过程中重复抓取的少量菜谱数据并通过dropna 方法来删除
缺失值。为了方便后续计算,提取到的评分字段里含有多余的object 类型的字符串,需要替换到多余字符串并转换为数字类型。由于用料词汇中间都是以逗号分隔开,先算逗号数加一就能得出用料数。最后,利用用料词汇统计每个菜谱的用料数量,这样有利于分析菜谱用料。
3美食数据可视化技术研究
数据时代,通过数据分析来挖掘数据的价值,本文数据分析过程分为以下几个步骤:数据获取,数据读取,数据计算,数据可视化以及数据分析。分析代码和数据如图2
所示。
图3各大菜系菜品数量占比
总爬取了2968个菜谱数据,通过数据处理,除掉缺失值和没有评分的数据后得到了最后的2197纯菜谱数据。数据分析后用Pyecharts 库制作各大菜系菜谱数量占比饼状图展示出效果。(下转第29页)
20
本期推荐
本栏目责任编辑:王
Computer Knowledge and Technology 电脑知识与技术
第17卷第10期(2021年4月
)
图4事件时间线
词云是对话题信息的一种直观刻画,由图3可知,在“东京奥运会”话题中“奥运会”“东京”、“推迟”、“奥委会”等关键词占比较大,于是我们可以直接通过联系词云中大部分词义得到“东京奥运会推迟”这样一个信息,而图4则直观地展示了话题内事件的发生顺序,通过时间线可以迅速确定此话题的最新发展状况。
5结论
针对新闻话题演化跟踪问题,本文优化了Single-Pass 聚类算法,降低了算法的时间复杂度,且通过对相关计算向量距离的方法比较和对新闻文本特殊结构的分析,加强了向量关键维度的权值,使算法性能进一步得到提高。同时,基于时间片序列,贪心地构建了不同时间片之间的事件依赖关系,生成了话题-事件演化树。然而,本文只是生成了话题内事件演化树,虽能够识别出话题的开始却不能检测话题的结束。之后可根据事件行为属性(如初始事件、合并事件、分裂事件、结束事件)进一步生成事件演化图以获得更准确的演化脉络。
参考文献:
[1]莫倩,刘书家,李凯.主题追踪系统的研究与实现[J].计算机工程与应用,2006,42(2):179-181.
[2]李想.在线新闻话题发现技术研究及应用综述[A].第十四届(2019)中国管理学年会论文集[C].中国管理现代化研究会、复旦管理学奖励基金会,2019:7.
[3]张晓艳,王挺,陈火旺.基于SVM 的多向量文本表示模型话题关联识别研究[C].//第七届中文信息处理国际会议,中国中文信息学会,2007:390-395.
[4]屈庆涛,刘其成,牟春晓.基于N-Gram 语言模型的并行自适应新闻话题追踪算法[J].山东大学学报(工学版),2018,48(6):37-43.
[5]张仰森,段宇翔,黄改娟,等.社交媒体话题检测与追踪技术研究综述[J].中文信息学报,2019,33(7):1-10,30.
[6]陈龙,徐建,于亚男,等.基于话题相似性改进的K-means 新闻话题聚类[J].计算机与数字工程,2017,45(8):1560-1565.
[7]魏德志,陈福集,林丽娜.一种基于时间序列的热点话题发现模型和算法[J].情报科学,2017,35(10):142-146.
[8]Rousseeuw P J.Silhouettes:a graphical aid to the interpretation and validation of cluster analysis[J].Journal of Computational and Applied Mathematics,1987,20:53-65.
【通联编辑:王力】
(上接第20页
图4各大菜系菜品占比饼状图
除此之外,为了充分利用中国菜谱数据,采用Jieba 库来处理中文分词,然后进行词频统计便挑选出高频词汇,最后制作词云图来展示效果。尺寸越大表明该词汇的词频率越高,尺寸
越小表明该词汇的词频率越低。
图5川菜用料词云图
以上词云图里尺寸大的、比较显眼的菜谱用料是主要的川
菜用料,比如花椒、干辣椒、大蒜和豆瓣酱。其他各大菜系菜谱用料的词云图也一样表示出该菜系菜谱用料情况。
4总结
本文首先探讨构建饮食词汇资源库在饮食文化中的重要作用。其次开展饮食词汇资源的获取和饮食词汇数据的充分利用。本研究涉及了网络爬虫技术、文本预处理技术、数据可视化等文本采集和数据加工技术并详细地给予该资源库的资源爬取、数据处理、数据分析以及数据可视化等过程和相关代码。
从高频词汇的分布情况分析可以为健康饮食模式推广提供多维视角与参考,健康饮食模式和膳食结构不仅影响人类健康,而且对我国经济发展、医疗支出、了解中国饮食文化等方面产生一定的影响。为了完善饮食词汇资源库,后续研究待需要爬取其他美食平台数据来补充资源。美食的烹饪涉及的影响因素还有很多,还需要思考和探索。
参考文献:
[1]杜鹏辉,仇继扬,彭书涛,等.基于Scrapy 的网络爬虫的设计与实现[J].电子设计工程,2019,27(22):120-123,132.
[2]李培.基于Python 的网络爬虫与反爬虫技术研究[J].计算机与数字工程,2019,47(6):1415-1420,1496.
【通联编辑:唐一东】
29