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

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")

从词云图中可以看出,剧情、爱情、戏剧、犯罪、家庭、冒险的频率比较高

豆瓣高分电影信息分析(数据分析)相关推荐

  1. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  2. 003.[python学习] 简单抓取豆瓣网电影信息程序

    003.[python学习] 简单抓取豆瓣网电影信息程序 声明:本程序仅用于学习爬网页数据,不可用于其它用途. 本程序仍有很多不足之处,请读者不吝赐教. 依赖:本程序依赖BeautifulSoup4和 ...

  3. 爬取豆瓣top250电影并分析

    爬取豆瓣top250电影,提取评论关键词,然后将同一国家的关键词做成一个词云,轮廓是每个国家的地图轮廓 爬取数据 需要爬取电影名称.导演.年份.地区和前10个评论除了地区,其他的都没什么问题,我们来研 ...

  4. 豆瓣Top250电影信息海报爬虫

    前些时候老师布置了一个小作业,让爬取豆瓣top250电影的相关信息,把每一部电影的信息以txt文本保存,并下载电影海报图片,一部电影创建一个文件夹. 代码编写分为如下几步 1.创建文件夹(我是在D盘先 ...

  5. python采用requests+bs4爬取豆瓣top250电影信息

    爬取豆瓣top250电影说明 (链接:https://movie.douban.com/top250,可爬取一页或者多页(输出电影的正标题(肖申克的救赎),副标题( The Shawshank Red ...

  6. scrapy爬取豆瓣所有电影信息(新手入门超详细版)

    本次小实验目标就是爬取豆瓣所有的电影,我们以豆瓣的分类页(https://movie.douban.com/tag/#/)作为start_urls,首要任务就是分析当前页面是否为动态加载,何为js动态 ...

  7. python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息

    前言: 在掌握一些基础的爬虫知识后,就可以尝试做一些简单的爬虫来练一练手.今天要做的是利用xpath库来进行简单的数据的爬取.我们爬取的目标是电影的名字.导演和演员的信息.评分和url地址. 准备环境 ...

  8. Python|简单爬取豆瓣网电影信息

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 前言: 在掌握一些 ...

  9. 豆瓣网电影信息的抓取

    分析 通过上面两张图片可以发现 第一页url:https://movie.douban.com/top250?start=0&filter= 第二页url:https://movie.doub ...

  10. python爬取豆瓣高分书籍信息(request+xpath)

    复习了xpath,感觉还是熟悉的感觉.上次爬了微博爬了贴吧,这次就用xpath爬个豆瓣图书数据,作为学习时间序列的数据吧! 面向对象编程爬取 1.把自己要做的事情分类 #获取url的规律组成url_l ...

最新文章

  1. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)
  2. struts中如何查看配置文件中是否存在某个返回值
  3. 数据挖掘中聚类算法概述
  4. 写在前面,白话 Yaf 探秘与深入
  5. 关于TCP的粘包问题
  6. 扫地机器人水箱背景_水箱尘盒组件及扫地机器人的制作方法
  7. 利用TICK搭建Docker容器可视化监控中心
  8. 搭建测试环境_当面试时被问到“搭建过测试环境吗”, 身为小白要怎么回答?...
  9. java setter与getter方法
  10. python模块之logging
  11. 连接mysql数据库格式_MySQL_Mysql数据库命令大全,一、连接Mysql格式: mysql -h - phpStudy...
  12. cmp linux 命令,比较文件Linux基本命令:cmp
  13. 最容易被你忽略的Mac神级功能!Mac访达里一切皆可标记
  14. Istio 东西向流量管理
  15. Activemq优点和缺点
  16. html编辑器如何设置滚动字幕,使用Axure RP为网页添加滚动字幕的具体操作步骤
  17. NLPcc2013-2014微博文本情感分类数据集
  18. 【基于python+Django的物品协同过滤音乐推荐系统-哔哩哔哩】 https://b23.tv/V2zN54R
  19. ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes
  20. MTK平台MT6765 LCM屏调试步骤

热门文章

  1. 太阳方位角/天顶角名词解释及计算方法
  2. 高光谱图像异常探测导读
  3. Git修改用户名和密码
  4. android app隐藏图标不见了,Android 10如何隐藏应用图标
  5. npm 清理缓存命令 【最新的】
  6. 在上海创业的日子之注册公司的详细流程
  7. 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
  8. HTTP状态码404、413、500
  9. 高手实战!Windows 7开机加速完全攻略
  10. 数据库学生学籍管理系统