大数据可视化 课件 项目2 Matplotlib实战_第1页
大数据可视化 课件 项目2 Matplotlib实战_第2页
大数据可视化 课件 项目2 Matplotlib实战_第3页
大数据可视化 课件 项目2 Matplotlib实战_第4页
大数据可视化 课件 项目2 Matplotlib实战_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

—Matplotlib实战(影视数据可视化)项目二:目录CONTENTS项目概述学习目标影视数据分析电影票房及数据可视化思考与练习1项目概述项目概述在熟悉使用Matplotlib进行图表绘制的基础上,本项目将介绍基于Matplotlib绘图库对影视数据进行可视化,包括如下内容:1.爬虫获取影视数据,以电影票房数据和豆瓣评论数据作为数据源2.Matplotlib进行影视数据分析与可视化;本项目融合Matplotlib基础知识和综合绘图应用,着重讲解Matplotlib在影视数据中的可视化应用,通过对数据集、数据分析到可视化完整实现过程的展示,便于对所学内容进行实践练习,增强解决实际问题的能力。本项目的具体工作如下:1.影视数据简介及采集示例;2.基于Matplotlib的结构化影视数据可视化;3.基于Matplotlib的非结构化影视数据可视化。2学习目标任务分析通过本项目的学习,进一步提升运用Matplotlib解决实际应用的能力,熟悉影视各环节数据产生及采集方法、掌握基于网络爬虫获取影评数据的方法、Networkx软件包的安装与使用、基于Matplotlib对结构化影视数据和非结构化影视数据的可视化流程和方法;培养学生具备Matplotlib开展大数据可视化的基本技能,拓展大数据专业学生视野、更新知识储备。3影视数据分析任务描述本任务学习的是从豆瓣影评网站抓取最新的影评数据,作为数据可视化的数据集,与本项目的后续任务具有良好的衔接关系,全方位体验从数据集、数据分析到可视化的完整应用流程。完成本任务需要学生以点带面地扩展学习浏览器端访问网页的基本原理,学会使用Python编写网络爬虫获取网页数据的方法。通过学习本任务内容,完成对豆瓣中科幻影评数据的抓取。在本任务提供示例代码基础上通过修改代码中的url进行增量式开发,尝试对豆瓣中其他专题数据的获取。WWW的工作原理媒体的发布方式有“微博”“微信”和“客户端”等,分别表示的是WWW网站、移动互联网中的移动端应用和PC端的客户端应用程序。在3种发布方式中,基于浏览器/服务器模式的WWW网站是最早出现、也最为成熟的技术。1、WWW的概念“WWW”全称为WorldWideWeb,翻译过来就是“全球广域网”,它是互联网上最为广泛使用的一种服务。WWW是指由许多互相链接的HTML(超文本标记语言)页面组成的系统,可以用浏览器访问和使用。WWW是由英国计算机科学家蒂姆·伯纳斯-李在1991年发明的。知识与技能WWW的工作原理2、WWW的结构WWW的基础设施是一个由网络连接的文件存储库,其中包括各种类型的媒体(例如文本、图片、视频、音频等),这些媒体文件被存储在多个服务器上。所有这些服务器都被称为“Web服务器”,用户可以通过诸如电脑、手机或平板电脑等设备上的浏览器来访问这些服务器,获取其中保存的信息。每个Web服务器都有一个独特的地址,称为URL(UniformResourceLocator,统一资源定位符),URL提供了访问Web服务器上特定资源的方式。知识与技能WWW的结构主要由以下三部分构成:1.客户端:通过Web浏览器、移动应用程序等终端设备访问WWW服务。2.服务器端:由Web服务器和Web应用程序(如网站、在线游戏、社交网络等)组成,它们提供信息、服务和交互性。3.互联网:作为连接所有设备和服务器的通信网络基础。用户通过拨号、宽带、光纤或其他方式连接到互联网,从而可以访问WWW服务。知识与技能WWW的工作原理3、WWW的工作原理1.客户端向服务器发送请求当用户在浏览器中输入URL并按下回车键时,Web浏览器会向服务器发送HTTP(HypertextTransferProtocol,超文本传输协议)请求。HTTP是一种规定了Web客户端和Web服务器之间通信格式的协议,是一个基于“请求-响应”的协议,客户端通过请求获取数据,服务器则通过响应来返回数据给客户端。2.服务器接受请求并返回相应数据当Web服务器接收到HTTP请求后,它会根据请求的内容做出相应的回应。如果请求中包含HTML文件,则服务器将返回HTML文件。如果请求中包含其他文件类型的数据,例如图片、视音频等,服务器将返回相应的文件。对于每个HTTP请求,Web服务器都会生成一个HTTP响应,并将其发送回客户端。知识与技能3.客户端接受响应并呈现数据当Web浏览器接收到来自服务器的HTTP响应时,它将解析该响应,然后按照HTML文件中指示的规则呈现数据。浏览器将HTML文件解析为DOM(DocumentObjectModel)树,将CSS样式和JavaScript代码应用于它,并将结果呈现为可见网页。4.交互和链接当用户与Web页面进行交互或单击链接时,Web浏览器将在客户端发出新的HTTP请求。这导致服务器再次生成HTTP响应,网页内容被刷新,并且用户将看到新的页面数据。知识与技能4、WWW的使用WWW使得用户可以从任何设备上访问和共享各种类型的信息,包括文本、图片、视频、音频等。用户可以通过Web浏览器、移动应用程序等终端设备来使用WWW服务。WWW提供了丰富的应用程序和服务,例如电子邮件、在线购物、社交网络、在线教育等。WWW的使用可以分为以下几个部分:1.浏览网页通过浏览器访问WEB服务,从而打开各种网站,可以查阅最新的新闻内容,或者搜索自己所需要的信息。2.使用Web应用程序和服务WWW包括许多Web应用程序和服务,如电子邮件、社交网络、在线购物等。这些应用程序使得用户能够轻松访问和共享各种不同类型的信息和服务。知识与技能3.在线教育WWW使得教育资源在全球范围内得以共享。通过在线课程、在线学习平台和其他Web应用程序,有兴趣的人可以获得全球领先的大学和其他教育机构的帮助和支持。4.多媒体娱乐WWW也为用户提供了各种类型的娱乐内容,例如音乐、视频、游戏等。用户可以通过浏览器或其他终端设备来访问这些内容。知识与技能知识与技能总结一下,WWW的工作原理可以归纳为以下几个步骤:1. 客户端向Web服务器发送HTTP请求来获取信息。2. Web服务器接收到HTTP请求并生成HTTP响应。3. 客户端接收HTTP响应并解析它,然后将数据呈现为可见网页。4. 当用户与页面交互或单击链接时,Web浏览器将在客户端重新发出HTTP请求。5. Web服务器再次生成HTTP响应,网页内容被刷新,用户将看到新的页面数据。用户在浏览网页时,在地址栏中输入形如“协议://域名:端口/路由?参数”格式规范的URL即可实现对指定Web服务器网站的访问。在Chrome浏览器的地址栏中输入:/review/latest/?app_name=movie将出现豆瓣电影影评网页。知识与技能HTTP主要包括GET和POST等2种请求。对于指定URL的访问可以使用浏览器方式,也可以使用代码请求方式。在浏览器地址栏上输入URL:/typerank?type_name=%E7%BA%AA%E5%BD%95%E7%89%87&type=1&interval_id=100:90&action=将出现以下页面。知识与技能任务实施网络爬虫的基本思想是采用代码请求方式,模拟人工浏览网页的方式请求网络链接,通过对服务器返回的数据进行解析和筛选,实现对批量数据的快速获取。安装包:pipinstallrequestsimportrequestsimportjsonurl='/j/chart/top_list'params={'type':'1','interval_id':'100:90','action':'','start':'0','limit':'200'}headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/101.0.4951.67Safari/537.36'}response=requests.get(url=url,params=params,headers=headers)content=response.json()print(content)数据爬取:2.1.1豆瓣电影纪录片排行榜数据爬取任务实施运行该Python代码,将自动生成与程序文件相同路径下的“豆瓣电影科幻排行榜.csv”文件。2.1.2豆瓣电影纪录片排行榜数据处理withopen('豆瓣电影纪录片排行榜.csv','w',encoding='gbk')asfp:

foriincontent:

title=i['title']

mtype='\\'.join(i['types'])

regions='\\'.join(i['regions'])

release_date=i['release_date']

score=i['score']

vote_count=str(i['vote_count'])

ifregions=="中国大陆":

fp.write(title+','+mtype+','+regions+','+release_date+','

+score+','+vote_count+'\n')

任务实施2.1.2豆瓣电影纪录片排行榜数据处理代码首先导入Python的requests库和json库,进一步通过requests.get()方法向服务器发出get请求,response.json()方法获取从服务器端返回的JSON数据,最后“fp.write(title+','+...)”语句将各字段通过逗号','进行拼接输出,保存为CSV格式规范的文件“豆瓣电影科幻排行榜.csv”。任务总结通过学习本任务内容,在知识层面熟悉WWW的工作原理,在代码开发方面掌握使用Python语言编写获取网站数据网络爬虫的方法,并进一步将数据导出为CSV格式化文本,作为数据可视化的数据源,并依据练习题进一步巩固所学知识。4电影票房及影评数据可视化任务描述本任务基于电影票房的年度数据和影评数据进行可视化,进一步巩固Matplotlib绘制折线图、直方图和饼图的绘制方法。通过网站获取电影票房的年度数据作为数据集1,将“任务1:影视数据简介及采集示例”生成的“豆瓣电影科幻排行榜.csv”文件作为数据集2,分别在数据集1和数据集2的基础上使用Matplotlib进行可视化。通过学习本任务内容,掌握Python读取CSV文件的方法,熟悉将数据作为数组赋值给自变量x和应变量y的方法,进一步掌握Matplotlib绘图语句的使用。可在本任务提供示例代码基础上通过修改数据集进行扩展的可视化绘图。知识与技能从中国票房网站(/)获取2015年~2021年连续7年的总票房收入数据。如在地址栏中输入“/boxoffice2015”,将出现如图2-8的网页。一、年度票房数据集的整理依次访问如下URL查看并获取2016年~2021年等6年的票房数据:1./boxoffice20162./boxoffice20173./boxoffice20184./boxoffice20195./boxoffice20206./boxoffice2021汇总之后的年度数据表所示。知识与技能年度收入金额2015440.692016457.122017559.112018609.762019642.662020204.172021472.58知识与技能二、词云图1、 词云图介绍词云图(WordCloud),也被称为文字云或标签云,是一种展示文本信息的可视化图形。简单来说,它就是把一些文字在空间上按照大小的比例分布开来,形成一个图案,可以很好地反映出这些文字的关键词和主题。一般来说,词云图常用于对大量文本数据进行分析和可视化,是一种非常实用的数据呈现方式。它可以帮助我们捕捉到文本数据的重要特征和关键信息,同时也可以直观、快速地展示这些信息。下面我将详细介绍词云图的原理、构建方法、常见应用场景以及如何优化词云图效果等方面的内容。知识与技能二、词云图2、 词云图原理词云图的原理十分简单,就是根据文本中关键词出现的频率和权重等因素,将这些关键词按照一定的规则和方式排列成图形。具体来说,生成词云图的算法大致可以分为以下几个步骤:(1)文本预处理。首先,我们需要对文本进行一些预处理工作,例如去除停用词、标点符号、数字等无关紧要的内容,只保留词汇、短语等具有意义的单元。(2)计算词频。在文本预处理完成后,我们需要对每个词汇计算其在文档中出现的频次,并根据这些频次来确定每个词汇在云图中所占的大小。知识与技能二、词云图(3)设置云图规则。接下来,我们需要设定云图规则,即如何排列和分布关键词汇。这一步需要考虑多个因素,例如单词在文本中的频次、长度、位置、字体、颜色、方向等。(4)渲染云图。生成词云图后,我们需要进行渲染和美化工作,包括选择适当的字体、颜色、形状等,以及去除重复和无用的词汇。(5)输出和导出。最后一步,我们需要将生成的词云图输出到屏幕或保存为文件,以便其他人阅读和使用。知识与技能二、词云图3、词云图的应用场景词云图主要用于对文本数据进行分析和可视化,常见的应用场景包括但不限于以下几个方面:(1)文本挖掘与分析词云图可以帮助我们快速把握文本数据中的重要信息和热点话题。通过生成词云图,我们可以直观地发现文本数据中的高频词汇、关键词、主题、情感倾向等重要信息,从而进行更深入的分析和挖掘。例如,在社交媒体、新闻报道、市场调查等领域中,对大量文本数据进行分析时,可以使用词云图来展示用户评论、网民观点、产品评价等,以便更好地理解用户需求和市场变化。知识与技能二、词云图(2)网站设计与界面优化词云图在网站设计和界面优化中也有广泛应用。通过根据网页内容生成词云图,可以更好地突出网站的特色和重点,提高用户体验和访问效果。词云图也可以作为网页主题、导航标签、商标设计等元素的参考,从而提高网站的美观度和品牌形象。任务实施2.2.1基于年度票房数据的可视化基于年度票房数据的可视化程序如下所示:importmatplotlib;importmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnpdata1=pd.read_csv('FilmIncome.csv',header=None)data1=data1.drop(0)x=data1[0]y=data1[1].astype("float")plt.rcParams['font.sans-serif']=['SimHei']#显示中文标签#设置数字标签fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)plt.title('2015年~2021年中国电影票房收入',fontproperties='simhei',fontsize=24)#标题plt.xlabel('年份',fontproperties='simhei',fontsize=18)#设置x标签plt.ylabel('收入额(单位:亿元)',fontproperties='simhei',fontsize=18)#设置y标签plt.plot(x,y,color='red',marker='o')plt.show()任务实施2.2.1基于年度票房数据的可视化运行该Python代码,将出现如图所示的年度票房收入折线图的可视化效果从图中可以看出,2015年~2019年年度总票房收入持续增长,2020年受疫情影响,该年度总票房收入跌至204.17亿元,位于2015年~2021年年度总票房收入的最低点;2021年得益于疫情应对的有序有效,全国观众的热情支持,该年度的总票房收入恢复到472.58亿元,略高于2016年年度总票房收入。任务实施2.2.2基于纪录片排行数据的可视化如图“豆瓣电影纪录片排行榜.csv”文件的数据格式所示,数据集2包括影片名称、类别、上映地区、上映时间、评分和参评人数等6个字段。绘制豆瓣电影科幻Top10影评人数及占比的代码内容如下所示。##Importingrequiredfunctionsimportosimportnumpyasnpimportmatplotlib;importmatplotlib.pyplotaspltfromflaskimportFlask,render_template#importpylabasplimportmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnp

第一步:导入相关包任务实施2.2.2

基于科幻排行数据的可视化第二步:绘制图形plt.rcParams['font.sans-serif']=['SimHei']#显示中文标签plt.rcParams['axes.unicode_minus']=Falsemyfont=fm.FontProperties(fname=r'C:\Windows\Fonts\SimHei.ttf')#设置字体mycolor=['grey','gold','darkviolet','turquoise','r','g','b','c','m','y','k','darkorange','lightgreen','plum','tan','khaki','pink','skyblue','lawngreen','salmon']plt.title('豆瓣电影科幻Top10影评人数及占比',fontproperties='SimHei',fontsize=20)#标题N=10#待显示的数据项数data0=pd.read_csv(‘豆瓣电影纪录片排行榜.csv',header=None)data0=np.array(data0)data1=data0[0:N,:]x=np.arange(N)#生成从0到9的10个连续整数l=data1[:,0]#labelsy=data1[:,4]z=data1[:,5]#评分人数,占比计算的原始数据print(z)explode=(0.0,0.1,0.4,0.2,0.1,0.1,0.3,0.05,0,0)#突出显示,这里仅仅突出显示第二块

pie=plt.pie(z,explode=explode,colors=mycolor,autopct=lambdapct:'({:.1f}%)\n{:d}'.format(pct,int(pct/100*sum(z))),shadow=True,startangle=90)plt.legend(pie[0],labels=l,loc="upperleft")plt.axis('equal')#显示为圆(避免比例压缩为椭圆)plt.show()

任务实施2.2.2基于科幻排行数据的可视化程序运行结果如右图:从图2-7中可以看出,在豆瓣电影纪录片评分排行数据中,《二十二》《四个春天》和《三十二》等3部影片的评分人数位居前三,评分人数分别为295336、172844和76323。三部纪录片评分人数占比依次为40.9%、23.9%和10.6%。任务实施2.2.3 豆瓣电影科幻影评人数及评分可视化以散点图方式,展示豆瓣电影科幻影评人数及评分之间的关系;通过本示例中的散点图,可以观察数据值的分布模式,如整体聚类情况或部分离散点情况。绘制豆瓣电影科幻影评人数及评分的代码内容如下所示。##Importingrequiredfunctionsimportosimportnumpyasnpimportmatplotlib;#importpylabasplimportmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnpplt.rcParams['font.sans-serif']=['SimHei']#显示中文标签plt.rcParams['axes.unicode_minus']=Falsemyfont=fm.FontProperties(fname=r'C:\Windows\Fonts\SimHei.ttf')#设置字体#读取数据第一步:导入相关包任务实施2.2.3 豆瓣电影科幻影评人数及评分可视化##Importingrequiredfunctions#读取数据N=8#待显示的数据项数plt.title('豆瓣电影科幻'+str(N)+'条记录中影评人数和评分散点图',fontproperties='SimHei',fontsize=20)#标题data0=pd.read_csv('豆瓣电影科幻排行榜.csv',header=None)data0=np.array(data0)data1=data0[0:N,:]x=np.arange(N)#生成从0到9的10个连续整数l=data1[:,0]#labelsy=data1[:,4]z=data1[:,5]#评分人数,占比计算的原始数据#绘图plt.scatter(y,z,marker='D',s=10,c=y,alpha=0.8)plt.xlim((y.min()*0.98,y.max()*1.05))#动态设置X轴和Y轴的刻度值plt.ylim((z.min()*0.98,z.max()*1.05))#循环遍历所有点,并增加数值标记foriinrange(len(y)):plt.annotate(l[i]+'('+str(z[i])+')',(y[i],z[i]+0.1))plt.show()第二步:绘制相关图形任务实施2.2.3 豆瓣电影科幻影评人数及评分可视化运行该代码,将出现如图所示豆瓣电影科幻8条记录中影评人数和评分散点图的可视化效果。如图所示,在豆瓣电影纪录片8条记录中,大部分电影的影评人数在20万人以下,纪录片《四个春天》的影评人数最多,为172844人,但是其评分最低。而纪录片《三十二》评分较高,其影评人数为76324。任务实施2.2.4豆瓣电影科幻部分评分可视化下面利用柱状图展示纪录片的评分,这里只选择部分纪录片进行可视化展示。为了充分展示豆瓣电影纪录片部分在不同评分段的分值,对数据CSV文件任务2.1中的数据集“豆瓣电影纪录片排行榜.csv”进行按照评分进行排序筛选,保留10条影评信息(评分前10),保存为“豆瓣电影纪录片排行榜1.csv”文件任务实施2.2.4豆瓣电影科幻部分评分可视化绘制豆瓣电影纪录片排行榜部分数据的柱状图的代码内容如下所示。##Importingrequiredfunctionsimportosimportnumpyasnpimportmatplotlib;importmatplotlib.pyplotasplt#importpylabasplimportmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnpplt.rcParams['font.sans-serif']=['SimHei']#显示中文标签plt.rcParams['axes.unicode_minus']=Falsemyfont=fm.FontProperties(fname=r'C:\Windows\Fonts\SimHei.ttf')#设置字体#读取数据##PlottingFunctionofDisplayingFilm'sAnalysis-#Bar:柱状图defaddlabels(x,y):

foriinrange(len(x)):plt.text(i,y[i]+0.08,y[i],ha='center',color='red',fontsize=10)#plt.text(i,y[i]//2,y[i],ha='center',color='red',fontsize=16)myfont=fm.FontProperties(fname=r'C:\Windows\Fonts\SimHei.ttf')#设置字体

plt.rcParams['font.sans-serif']=['SimHei']#显示中文标签

plt.rcParams['axes.unicode_minus']=False

mycolor=['grey','gold','darkviolet','turquoise','r','g','b','c','m','y']plt.title(‘豆瓣电影纪录片排行榜',fontproperties='SimHei',fontsize=20)#标题

N=10#待显示的数据项数

data0=pd.read_csv(‘豆瓣电影纪录片排行榜1.csv',header=None)data0=np.array(data0)data1=data0[0:N,:]x=np.arange(N)#生成从0到9的10个连续整数

l=data1[:,0]#labels

y=data1[:,4]returnx,y,l#绘图plt.ylabel('豆瓣评分',fontsize=10,color='blue')plt.xticks(rotation=15,fontsize=8,color='red')x,y,l=addlabels(x,y)plt.bar(x,y,align="center",tick_label=l,color=mycolor)plt.show()任务实施2.2.4豆瓣电影纪录片部分评分可视化运行该代码,将出现如图所示的豆瓣电影纪录片排行榜部分数据的柱状图的可视化效果。任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

从豆瓣电影网站(/)获取有关电影影评。如在地址栏中输入“/subject/34841067/comments?status=P”,将出现如图所示的网页。任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用采用HTML作为前端网页,编写基于Flask框架的Web网页应用,实现对电影豆瓣影评的词云分析,实现的功能为:从豆瓣网站上爬取某一指定影片的评论,经过jieba分词、去停用词后的词云图。在浏览器的地址栏中输入“:5000/”,将出现如图所示的电影豆瓣影评的词云分析网页。任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用对电影豆瓣影评的词云分析网页的实现过程如下:第一步:安装包pipinstallflaskpipinstallpymysqlpipinstallbase64pipinstalljiebapipinstallimageiopipinstallwordcloud第二步:复制文件到工程目录中将资料中提供的mask.jpg、stopwords.txt文件复制到工作目录下。第三步:抓取豆瓣网站影评信息的应用在工作目录下创建“douban.py”文件并编写爬虫代码获取数据。任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用#-*-coding:utf-8-*-frombs4importBeautifulSoupimporturllib.requestdefget_Html(url):

"""获取url页面"""

headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/62.0.3202.94Safari/537.36'}req=urllib.request.Request(url,headers=headers)req=urllib.request.urlopen(req)content1=req.read().decode('utf-8')

returncontent1defget_Comment(url):

"""解析HTML页面"""

html=get_Html(url)soupComment=BeautifulSoup(html,'html.parser')comments=soupComment.findAll('span','short')onePageComments=[]

forcomment1incomments:

#print(comment.getText()+'\n')

onePageComments.append(comment1.getText()+'\n')

returnonePageCommentsdefGetText():content=[]

forpageinrange(10):#豆瓣爬取多页评论需要验证。

url='/subject/34841067/comments?start='+str(20*page)+'&limit=20&sort=new_score&status=P'

#从豆瓣网站上抓取电影《你好,李焕英》的评论

foriinget_Comment(url):content.append(i)print("爬虫成功")

returncontent“douban.py”文件代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用第四步:基于Flask框架的Web服务器网页应用:在工作目录下,创建“index.py”文件并编写以下代码:fromflaskimportFlask,render_template,request,jsonifyimportpymysqlimportbase64importjiebafromimageioimportimreadfromwordcloudimportWordCloudimportosfromdoubanimportGetTextapp=Flask(__name__)@app.route("/")defmy_echart():

returnrender_template('index.html')

#render_template函数会自动在templates文件夹中找到对应的html,默认显示index.html页面#接收txt文件@app.route('/upload/file',methods=['POST'])defupload_file():

ifrequest.method=='POST':

try:file=request.files['file']content=file.read().decode("utf-8")

returnjsonify({'data':content}),200#jsonify帮助将字典转换为json数据

except:

returnjsonify({'code':-1,'msg':'文件上传失败!'}),500

finally:

pass#任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用在工作目录下,创建“index.py”文件并继续编写以下代码:#获取爬虫文本@app.route('/get/douban',methods=['POST'])defget_text():

ifrequest.method=='POST':

try:content=GetText()

returnjsonify({'data':content}),200

except:

returnjsonify({'code':-1,'msg':'文本上传失败!'}),500

finally:

pass#jieba分词@app.route('/cut/jieba',methods=['POST'])defcut_jieba():

ifrequest.method=='POST':

try:content=request.json.get('content',None)segment=jieba.lcut(content)#精确模式

returnjsonify({'data':segment}),200

except:

returnjsonify({'code':-1,'msg':'Jieba分词失败!'}),500

finally:

pass#任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用#去停用词@app.route('/remove/stopwords',methods=['POST'])defremove_stopwords():

ifrequest.method=='POST':

try:segment=request.json.get('segment',None)new_segment=[xforxinsegmentifxnotin['\n','']]

withopen("stopwords.txt",'r',encoding='gbk')asf:stopwords=f.readlines()stopwords=[x.strip()forxinstopwords]words=[xforxinnew_segmentifxnotinstopwords]

returnjsonify({'data':words}),200

except:

returnjsonify({'code':-1,'msg':'去停用词失败!'}),500

finally:

pass

#生成词云图@app.route('/genetate/cloud',methods=['POST'])defgenerate_cloud():

ifrequest.method=='POST':

try:words=request.json.get('words',None)mask=imread(r'mask.jpg')#设置词云背景图

wordcloud=WordCloud(font_path="simhei.ttf",#设置字体可以显示中文

background_color="white",

mask=mask,

scale=2,#缩放比例,清晰度#width=400,height=400#设置图片默认的大小,若有背景图片则依照背景图片大小,

)wc=wordcloud.generate(words)wc.to_file("result.png")

withopen("result.png",'rb')asf:image=f.read()image_base64=str(base64.b64encode(image),encoding='utf-8')os.remove("result.png")#将指定路径下原始图片删除,方便后续选取图片存储位置

returnjsonify({'data':image_base64}),200

except:

returnjsonify({'code':-1,'msg':'生成词云图失败!'}),500

finally:

passif__name__=='__main__':app.run(debug=True)#启用调试模式在工作目录下,创建“index.py”文件并继续编写以下代码:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用第五步在工作目录中创建“templates”文件夹,并在此文件夹中创建文件“index.html”,编写前端页面,代码如下:

<!DOCTYPE

html><html><head>

<!--指定编码格式,防止中文乱码-->

<meta

charset="utf-8">

<title>ECharts</title>

<!--引入各项js文件-->

<script

src="{{url_for('static',filename='echarts.min.js')}}"></script>

<script

src="{{url_for('static',filename='map.js')}}"></script>

<script

src="{{url_for('static',filename='tagcanvas.min.js')}}"></script>

<script

src="{{url_for('static',filename='d3.layout.cloud.js')}}"></script>

<script

src="{{url_for('static',filename='d3.v3.min.js')}}"></script>

<!--词云部分页面设置-->

<link

rel="shortcuticon"

href="#"

/>

<meta

charset="UTF-8"

/>

<meta

name="viewport"

content="width=device-width,initial-scale=1"

/>

<title>wordcloud_generate</title>

<style>

.text{

display:block;

width:100%;

height:140px;

margin-top:10px;

margin-bottom:20px;

}

</style></head>任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用<!--词云部分body--><body

style="padding:020px020px">

<h2

align="center"

style="color:darkslateblue">对电影豆瓣影评的词云分析</h2>

<div

style="display:flex;justify-content:space-between"

>

<div

style="width:45%">

<div>

Step1

<input

id="file"

name="file"

type="file"

accept="text/plain"

onchange="upload(this)"

/>

<button

onclick="get_text()">获取爬虫内容</button>

<textarea

id="txt"

class="text"></textarea>

</div>

<div>

Step2

<button

onclick="cut()">Jieba分词</button>

<textarea

id="jieba"

class="text"></textarea>

</div>

<div>

Step3

<button

onclick="remove()">去除停用词</button>

<textarea

id="stopwords"

class="text"></textarea>

</div>

</div>

<div

style="width:45%">

<div>

Step4

<button

onclick="generate()">生成词云图</button>

<button

onclick="download()">下载词云图</button>

<div

style="width:100%;min-height:500px;border:1pxsolidgray;margin-top:10px">继续编写前端页面,代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

<img

src="../static/background.png"

id="img"

alt="词云图展示区"

width="100%"/>

</div>

</div>

</div>

<script

src="/ajax/jquery/jquery-3.5.1.min.js"></script>

<script>

//上传txt文件

functionupload(obj){

letfile=obj.files[0];

letformFile=newFormData();

formFile.append("file",file);//加入文件对象

$.ajax({

url:"/upload/file",

data:formFile,

type:"POST",

dataType:"json",

cache:false,

processData:false,

contentType:false,

success:function(res){

document.getElementById('txt').value=res.data;

},

error:function(err){

alert('error:文件上传失败!');

throw

newError();

}

})

}继续编写前端页面,代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

//获取爬虫内容

functionget_text(){

$.ajax({

url:"/get/douban",

type:"POST",

headers:{

'Content-Type':'application/json',

},

success:function(res){

document.getElementById('txt').value=res.data;

},

error:function(err){

alert('error:爬虫文本获取失败!');

throw

newError();

}

})

}

//Jieba分词

functioncut(){

constcontent=document.getElementById('txt').value

$.ajax({

url:"/cut/jieba",

data:JSON.stringify({'content':content}),

type:"POST",

headers:{

'Content-Type':'application/json',

},

success:function(res){

document.getElementById('jieba').value=res.data;

},

error:function(err){

alert('error:Jieba分词失败!');

throw

newError();

}

})

}继续编写前端页面,代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

//去除停用词

functionremove(){

constcontent=document.getElementById('jieba').value.split(',')

$.ajax({

url:"/remove/stopwords",

data:JSON.stringify({'segment':content}),

type:"POST",

headers:{

'Content-Type':'application/json',

},

success:function(res){

document.getElementById('stopwords').value=JSON.stringify(res.data);

},

error:function(err){

alert('error:去除停用词失败!');

throw

newError();

}

})

}继续编写前端页面,代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

//去除停用词

functionremove(){

constcontent=document.getElementById('jieba').value.split(',')

$.ajax({

url:"/remove/stopwords",

data:JSON.stringify({'segment':content}),

type:"POST",

headers:{

'Content-Type':'application/json',

},

success:function(res){

document.getElementById('stopwords').value=JSON.stringify(res.data);

},

error:function(err){

alert('error:去除停用词失败!');

throw

newError();

}

})

}继续编写前端页面,代码如下:任务实施2.2.5基于Matplotlib库的wordcloud

库编写高票房电影影评词云图网页应用

//生成词云图

functiongenerate(){

constcontent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论