豆瓣高分电影信息分析(数据分析)

豆瓣高分电影信息分析(数据分析)

1、数据抓取

数据集的获取是我们进行数据分析的第一步。现在获取数据的主要途径一般为:现成数据;自己写爬虫去爬取数据;使用现有的爬虫工具爬取所需内容,保存到数据库,或以文件的形式保存到本地。
博主是用python软件爬取的豆瓣高分电影信息,用以获取其中的数据。

1.1网页分析

1.网页URL地址:https://www.douban.com/doulist/240962/
2.根据URL在浏览器打开网页的首页:
在这里插入图片描述

3.检查网页:
右击选中检查或按F12,在该窗口中找到存放电影信息的代码
在这里插入图片描述从检查得到的源代码可以看到:
class=‘title’的div标签文本中存放着电影名称
class=‘rating’的div标签中存放着星级,评分和评价人数
class=‘abstract’的div标签中存放着导演,主演,类型,制片国家/地区和年份的信息

1.2获取信息

通过网页分析可知,我们所需要的信息都在HTML页面里,所以我们只需要获取HTML页面相应class类div中的信息就可以了
1.获得网页所有数据:

r=requests.get(link,headers=headers,timeout=10)
soup=BeautifulSoup(r.text,"lxml")

2.获取电影名称:

div_list=soup.find_all('div',class_='title')for each in div_list:# 在div中,a标签的text的内容就是中文电影名称movie_name=each.a.text.strip() movie_names.append(movie_name)

3.获取电影评分和评价人数:

for each in soup.find_all('div',class_='rating'):#在div中,第二个span的text内容为评分,第三个span的text的内容为评价人数a=each.text.split('\n') #获取字符串中的数字x=''.join(re.findall(r'[0-9]',str(a[3])))movie_dis.append(x)movie_grade.append(float(a[2]))

4.获取电影导演,主演,类型,制片国家/地区和年份的信息:

for each in soup.find_all('div',class_='abstract'):a=each.text#.匹配任意字符,除了换行符tp = re.search(r'类型: (.*)',a)#对空值和字符进行处理if tp==None:movie_types.append(" ")else:movie_types.append(tp.group(1))actor = re.search(r'主演: (.*)',a)if actor==None:movie_actor.append(" ")else:movie_actor.append(actor.group(1))director = re.search(r'导演: (.*)',a)if director==None:movie_director.append(" ")else:movie_director.append(director.group(1))addr = re.search(r'制片国家/地区: (.*)',a)if addr==None:movie_addr.append(" ")else:movie_addr.append(addr.group(1))year=re.search(r'年份: (.*)',a)if year==None:movie_year.append(" ")else:year_str=year.group(1)sj=int(year_str[:2])+1nd=year_str[2]+'0'movie_year.append(str(sj)+'世纪'+nd+'年代')

2.数据清洗

数据得到手,我们就需要对我们爬取的数据进行清洗工作,为之后的数据分析做铺垫,如果清洗的不到位势必会对之后的数据分析造成影响。

2.1空值处理

对于数据中存在的空值,直接用空字符代替空值数据

        #对空值和字符进行处理if tp==None:movie_types.append(" ")else:movie_types.append(tp.group(1))actor = re.search(r'主演: (.*)',a)if actor==None:movie_actor.append(" ")else:movie_actor.append(actor.group(1))director = re.search(r'导演: (.*)',a)if director==None:movie_director.append(" ")else:movie_director.append(director.group(1))addr = re.search(r'制片国家/地区: (.*)',a)if addr==None:movie_addr.append(" ")else:movie_addr.append(addr.group(1))year=re.search(r'年份: (.*)',a)if year==None:movie_year.append(" ")else:year_str=year.group(1)sj=int(year_str[:2])+1nd=year_str[2]+'0'movie_year.append(str(sj)+'世纪'+nd+'年代')

2.2格式统一

由于每个电影年分不同,不便于后面分析,故需将年份替换为世纪、年代

year=re.search(r'年份: (.*)',a)if year==None:movie_year.append(" ")else:year_str=year.group(1)sj=int(year_str[:2])+1nd=year_str[2]+'0'movie_year.append(str(sj)+'世纪'+nd+'年代')

3.数据存取

本博客将数据存储到CSV中

3.1存储到CSV文件中

将爬取的信息以列表的形式保存到all_movies_message中,并存储到豆瓣.csv文件中,用以后面的数据分析

movies=get_movies("https://www.douban.com/doulist/240962/")
movies_1=pd.DataFrame({'movie_names':movies[0],'movie_types':movies[1],'movie_director':movies[6],'movie_actor':movies[5],'movie_dis':movies[2],'movie_grade':movies[3],'movie_addr':movies[4],'movie_year':movies[7]})
for i in range(1,4):#总共3页,一页25个link="https://www.douban.com/doulist/240962/?start="+str(i*25)movies=get_movies(link)movies_1=movies_1.append(pd.DataFrame({'movie_names':movies[0],'movie_types':movies[1],'movie_director':movies[6],'movie_actor':movies[5],'movie_dis':movies[2],'movie_grade':movies[3],'movie_addr':movies[4],'movie_year':movies[7]}),ignore_index=True)
all_movies_message=movies_1
#将数据写入豆瓣.csv文件中
all_movies_message.to_csv('豆瓣.csv',index=False)
print(all_movies_message)

存储数据截图:
在这里插入图片描述

4.数据分析及可视化

数据表格的参数信息
在这里插入图片描述

4.1对每个年代电影上榜数量进行分析

对豆瓣高分电影每个年代上榜电影数量进行分析,可对年代划分为10个等级:
分别为20世纪20年代,20世纪30年代,20世纪40年代,20世纪50年代,20世纪60年代,20世纪70年代,20世纪80年代,20世纪90年代,21世纪00年代,21世纪10年代

y1=len(data[data['movie_year']=='20世纪20年代'])
y2=len(data[data['movie_year']=='20世纪30年代'])
y3=len(data[data['movie_year']=='20世纪40年代'])
y4=len(data[data['movie_year']=='20世纪50年代'])
y5=len(data[data['movie_year']=='20世纪60年代'])
y6=len(data[data['movie_year']=='20世纪70年代'])
y7=len(data[data['movie_year']=='20世纪80年代'])
y8=len(data[data['movie_year']=='20世纪90年代'])
y9=len(data[data['movie_year']=='21世纪00年代'])
y10=len(data[data['movie_year']=='21世纪10年代'])

再通过matplotlib数据库进行数据的可视化得到下图:

# 坐标轴上能显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 调节图形大小
plt.rcParams['figure.figsize']=[13,8]
#定义标签
labels=['20世纪20年代','20世纪30年代','20世纪40年代','20世纪50年代','20世纪60年代','20世纪70年代','20世纪80年代','20世纪90年代','21世纪00年代','21世纪10年代']
# 每一小块的值
sizes=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]
explode=(0,0,0,0,0,0,0,0,0,0)
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%'#数据保留固定小数位
)
# x,y轴刻度设置一致
plt.axis('equal')
plt.title('电影年代上榜数量分布图')
# 右上角显示
plt.legend()
plt.show()

在这里插入图片描述通过图可以很清晰的看到,20世纪70年代高分电影最少,20世纪90年代和21世纪00年代高分电影最多

4.2对每个年代电影评分分析

对豆瓣高分电影的电影评分进行分析,我们可以求出每个年代的电影平均分,进而进行分析:

import matplotlib.pyplot as plt
# 调节图形大小
plt.rcParams['figure.figsize']=[12,8]
grouped=data.groupby(data['movie_year'])['movie_grade'].mean()
grouped.plot()
plt.xticks(rotation=60)#夹角旋转60度
plt.xlabel('The movie year',fontsize=15)#x轴及字号
plt.ylabel('The movie grade',fontsize=15)#y轴及字号

对数据通过matplotlib数据库进行数据的可视化:
在这里插入图片描述从折线图中,我们可以看出每个年代的平均评分都在9.0分以上

4.3对电影评论数前十分析

豆瓣高分电影中,评论越多说明该电影观众越活跃,以电影评论人数进行查找

d1=data.nlargest(10,columns='movie_dis')
d1

在这里插入图片描述对数据通过matplotlib数据库进行数据的可视化:

# 调节图形大小
plt.rcParams['figure.figsize']=[12,8]
grouped=d1.groupby(d1['movie_names']).mean()
grouped.plot.bar()
plt.xticks(rotation=60)#夹角旋转60度
plt.xlabel('The movie of number',fontsize=15)#x轴及字号
plt.ylabel('The movie of names',fontsize=15)#y轴及字号
plt.title('The movies of top 10')
plt.show()

在这里插入图片描述从图中可以看出,肖申克的救赎评论的人最多,说明该电影观众最为活跃,电影感触最深

4.4对电影类型的分析

豆瓣高分电影类型有很多种,通过各个类型出现的次数,可以判断出那种类型最受欢迎
查找各个类型出现的次数

types='/'.join(data['movie_types'])#转化成以‘/’间隔的字符串
types=types.replace(' ','')#将空格值进行替换
typelist=types.split('/')#进行切割
t=list(set(typelist))#去除重复
count=[]
for i in t:count.append(typelist.count(i))#统计出现 次数
plt.bar(range(len(count)),count,width=0.5)

对数据通过matplotlib数据库进行数据的可视化:

# 坐标轴上能显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 调节图形大小
plt.rcParams['figure.figsize']=[12,8]
plt.xticks(rotation=60)#夹角旋转60度
plt.xlabel('电影类型',fontsize=15)#x轴及字号
plt.ylabel('数量',fontsize=15)#y轴及字号
plt.xticks(range(len(t)),t)
plt.title('电影类型分布情况')
plt.show()

在这里插入图片描述

由柱状图可知,剧情片最受欢迎,其次为喜剧、爱情、家庭片
用词云进行可视化:

# 解决中文乱码问题
font=r'C:\windows\Fonts\simfang.ttf'
string=' '.join(typelist)
w=wordcloud.WordCloud(background_color='white',font_path=font)
w.generate(string)
w.to_file(r"db.png")

在这里插入图片描述从词云图中可以看出,剧情、爱情、戏剧、犯罪、家庭、冒险的频率比较高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

豆瓣电影评分分析(数据分析)

本文主要通过对豆瓣电影爬取的数据进行的简要分析,观察得出各部分之间对应的关系影响。 一.数据抓取 我们要想进行数据分析,首先就要通过爬虫对分析对象网页的数据爬取保存,可以保存到数据库或者文件形式到本地,这里我是保存在表…

人类禁止进入的“微博”,我的AI机器人在那里吹牛,“勾搭”AI小姑娘

最近球友推荐了一个非常有趣的网站,叫“奇鸟”(https://chirper.ai/zh)。 简单来说,这是一个AI专属的微博,人类禁止发言,但是你可以创建一个叫“奇鸟”的机器人代理,让它在里边发帖,…

OpenAI 的嵌入 API太慢了吗?探索其他嵌入模型和服务的优势

这篇文章讨论了机器学习模型的延迟对聊天应用和代理的用户体验的影响,重点关注了生成语言模型(LLM)的提示生成过程中的语义搜索任务。文章比较了两种嵌入API 服务(OpenAI 和 Google)和几种开源嵌入模型(sen…

chatgpt赋能python:Python怎么Import自己写的SEO文章

Python怎么Import自己写的SEO文章 如果你是一位Python开发人员,并且正在为SEO优化而努力编写文章,那么你可能会想知道如何将自己编写的SEO文章导入您的程序中以便更好的利用。 在这篇文章中,我们将介绍如何使用Python中的import语句将自己编…

什么是全景地图?

如果问什么是全景图,那应该很多人都能回答上来。那么要是问什么是全景地图,估计很多人就不清楚了。然而我们在想要知道全景地图是怎么做的时候,就必须要知道什么是全景地图,那么这篇文章就告诉大家什么是全景地图。 全景地图也经…

全景图为何如此受欢迎/

为何全方位全景和720度全景这般受欢迎?今日我来给各位朋友科谱答疑解惑:说白了3d全景,便是运用全景和虚拟现实技术技术性,在互联网技术完成可720度无死角收看的呈现方式。从现阶段的实例来讲,3d全景除开在游戏娱乐行业得到巨大的…

教你一招,如何将vr网站中的360全景图图片和全景漫游文件下载到本地电脑

如果你打开vr全景平台,看到好的作品想将360全景图片下载保存到本地,直接右键另存是下载不下来的,因为上传的图片已经过服务器端碎片化处理,在浏览器端访问时通过js脚本动态的加载碎片组合成全景漫游的效果,那么将全景图…

【案例】VR全景图:效果+源码

狠人话不多说,直接放视频效果地址 一、效果 1.视频效果 视频效果地址:点击这里 2.图片效果 二、构思 该怎么实现?页面如何布局页面是否可随意控制显示1.功能 控制页面显示数量可放大控制全景图+自动播放左右按钮控制上一页或下一页(尾页:下一页按钮隐藏,首页:上一页按…

web实现全景图的交互展示

Web实现全景图的交互展示 不需要学习其他知识,小白也能实现全景图AR展示一、webVR全景图多种方案实现(aframe,Krpano,three,jquery-vrview等等)二、用krpano之前的一些知识准备三、krpano的购买、下载、注册四、做一个…

全景图的获取以及HTML页面显示全景图

目录 前言 1. 使用全景相机拍摄 2.手机app拍摄 3.使用爬虫爬取 二、全景图显示 总结 前言 随着前端技术的不断发展,图像的展示越来越重要,本文就介绍了全景图获取与显示的基础内容。 一、全景图片获取方法 1. 使用全景相机拍摄 拍摄的图片在2维显示下…

PTGui+PS生成全景图

1.打开PTGui,加载影响,拖入需要生成的全景图文件 2.点击对齐影像 3.点击创建全景图片 4.把生成的全景图导入到PS, 由于生成的全景图天空是空缺的,需要使用PS修复 套索选中黑色区域,右击填充即可。如遇到内存不足&#…

百度全景图/内景图切换示例

先看效果&#xff1a; 外景图 内景图&#xff1a; 具体代码&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content&qu…

什么是全景图?如何进行vr全景图拍摄

照片可以记录生活中的精彩的片段&#xff0c;而且照片的种类也分为很多&#xff0c;比如人像图&#xff0c;美食图&#xff0c;风景图等&#xff0c;其中有一种照片称为大像素全景图&#xff0c;大像素是全景的一种比较超高清的全景图&#xff0c;他不仅可以保留vr全景技术的所…

自己制作并发布720°VR全景图

大疆内置的全景图不好用&#xff0c;导出就成了平面图了&#xff0c;只能在他的“天空之城”上看&#xff0c;很不方便&#xff0c;而且他的全景图像素降低了&#xff0c;所以我们要自己制作。 1、先用大疆或者其它设备拍一组全景照。 2、然后下载并安装“PTGui”软件&#xff…

浪潮信息Inspur KOS性能及稳定性位列前茅 与万里安全数据库GreatDB高效兼容

为满足企业在数据安全、产品可控等数字化转型中的多样化需求&#xff0c;浪潮信息正基于技术与应用的深厚积累&#xff0c;持续优化创新产品及服务能力&#xff0c;助力企业在数智化时代下构筑黑心竞争力。日前&#xff0c;浪潮信息打造的Inspur KOS V5与万里安全数据库软件Gre…

随便聊聊浪潮开务数据库

今天这个话题挺随意&#xff0c;我们来聊聊浪潮开务数据库&#xff0c;原因主要是我的微信朋友圈被这个数据库刷屏了。当然我对这款号称多模数据库的非开源数据库也很感兴趣&#xff0c;也有很多疑问&#xff0c;希望各位专家能帮忙答疑解惑&#xff0c;揭开这款即将发布的 Kai…

浪潮信息推出服务器操作系统Inspur KOS的底气与豪气

近日&#xff0c;浪潮信息正式发布了其基于Linux内核、OpenAnolis等开源成果自主研发的服务器操作系统Inspur KOS&#xff0c;这为本就热闹非凡的自主操作系统市场再次带来涟漪。 何以推出Inspur KOS&#xff1f; 浪潮信息副总裁张东表示&#xff0c;“智慧时代&#xff0c;计…

20220624使用python3通过近6期的号码生成双色球红球

20220624使用python3通过近6期的号码生成双色球红球 2022/6/24 18:33 https://zst.cjcp.com.cn/shdd/ssq-hq.html 双色球红球杀号 首先获取近100期的双色球的红球号码。 【本例子以2022-06-21号算号为例子】 获取最近的6期的号码&#xff1a; 04 06 12 13 17 31 09 14 18 23…

php双色球(完整)

显示效果&#xff1a; 代码&#xff1a; <?php // 红色球号码区$red range(1, 33);// 随机选出6位数字for ($i0; $i < 6; $i) { $num array_rand($red); $redArr[] $red[$num];unset($red[$num]);}// 将选出来的6位数字小于10的补零foreach ($redArr as $v) {$red_b…