数据可视化豆瓣电影 TOP250
我平时喜欢看电影,也会习惯性参考豆瓣电影评分,而豆瓣对于爬虫爱好者是很友好的,没有太多反爬措施,对新手是很友好的。
本文将爬取豆瓣电影 TOP 250榜单的数据进行可视化,主要用了 BeautifulSoup
, pandas
, Matplotlib
等数据分析常用的库。
数据爬取
首先打开页面,进入调试模式,我们会看到如下页面:
如图所示,我们可以很直观的看到数据,图示信息就是我们本次要爬取的信息。
接下来,点击页面最下面的翻页,我们注意到第 2 页的地址为:movie.douban.com/top250?star… 第 3 页的地址为:movie.douban.com/top250?star…
不难发现其规律,那就开始写代码吧。
import osimport matplotlib.pyplot as pltimport pandas as pdimport requestsfrom bs4 import BeautifulSoupdef movies_spider():records = []for start in (range(250)[::25]):url = f"https://movie.douban.com/top250?start={start}"response = requests.get(url).textsoup = BeautifulSoup(response, 'html.parser')movie_list = soup.find_all(class_='item')for item in movie_list:rank = int(item.find('em').string) # 排名pic = item.find(class_='pic')href = pic.find('a')['href'] # 链接info = item.find(class_='info')name = info.find(class_='title').string # 电影名称rating_num = info.find(class_='rating_num').string # 评分total = info.find(class_='rating_num').find_next_sibling().find_next_sibling().string[:-3] # 评价人数inq = info.find(class_='inq') # 简评try:quote = inq.get_text()except AttributeError:quote = Noneprint("Type error")bd_div = item.find(class_='bd')infos = bd_div.find('p').get_text().strip().split('\n')# infos = ['导演: 弗兰克·德拉邦特 Frank Darabont\xa0\xa0\xa0主演: 蒂姆·罗宾斯 Tim Robbins /...',# ' 1994\xa0/\xa0美国\xa0/\xa0犯罪 剧情']info1 = infos[0].split('\xa0\xa0\xa0')director = info1[0][4:] # 导演info2 = infos[1].lstrip().split('\xa0/\xa0')year = info2[0][:4]area = info2[1]movie_type = info2[2]movie = {'rank': rank,'name': name,'director': director,'year': year,'area': area,'type': movie_type,'rating_num': rating_num,'comment_num': total,'quote': quote,'url': href}records.append(movie)return records
复制代码
代码配合前面的源代码,还是很好理解的,接下来先将数据保存为 csv 文件,然后再利用 pandas 分析处理
headers = ['rank', 'name', 'director', 'year', 'area', 'type', 'rating_num', 'comment_num','quote', 'url']
df = pd.DataFrame(rows, columns=headers)
df.to_csv('top250.csv')
复制代码
我们来看一下数据:
数据分析和可视化
国家地区
先分析制片的国家地区,可以看到,有的电影不止一个国家地区,比如霸王别姬的制片国家地区是:中国大陆 香港,因此我们可以用 split 进行处理
area_split = df['area'].str.split(' ').apply(pd.Series)
复制代码
可以看到电影最多有5个国家地区,我们进行统计,求和,最后绘图
a = area_split.apply(pd.value_counts)
area_count = a.sum(axis=1)
area_df = pd.DataFrame(area_count, columns=['count'], dtype=int).sort_values(by='count')
area_df.plot.barh()
复制代码
美国以 144 部遥遥领先,香港 25 部排名第 4,中国大陆 17 部位居第 7
美国:144
日本:34
英国:34
香港:25
法国:21
电影类型
我们以同样的方法分析分析电影类型
剧情片 191 部同样遥遥领先,爱情、冒险、喜剧和犯罪,也是大家喜欢的类型。
剧情:192
爱情:57
冒险:47
喜剧:47
犯罪:44
导演
前5的导演是:
克里斯托弗·诺兰:7
宫崎骏:6
王家卫:5
史蒂文·斯皮尔伯格:5
李安:5
这几位导演真是实至名归
评分
首先看一下排名前 10 的电影
排名 | 电影 | 评分 |
---|---|---|
1 | 肖申克的救赎 | 9.6 |
33 | 控方证人 | 9.6 |
2 | 霸王别姬 | 9.6 |
5 | 美丽人生 | 9.5 |
8 | 辛德勒的名单 | 9.5 |
3 | 这个杀手不太冷 | 9.4 |
4 | 阿甘正传 | 9.4 |
32 | 十二怒汉 | 9.4 |
14 | 放牛班的春天 | 9.3 |
217 | 城市之光 | 9.3 |
注意到《城市之光》以 9.3 分排名 217,那么我们就会有疑问,评分与排名之间有什么关系呢,我们通过绘制散点图和直方图来分析
df.plot.scatter(x='rating_num', y='rank')
plt.title('评分与排名关系')
plt.xlabel('评分')
plt.ylabel('排名')
plt.gca().invert_yaxis()df['rating_num'].plot.hist(bins=10, rwidth=0.9)
plt.title('评分分布')
复制代码
从上图分析,随着评分升高,排名也基本靠前,评分主要集中在 8.4~9.2
之间。同时可以通过 pandas 计算平均数,众数和相关系数,平均分为 8.83
分,众数为 8.7
分,而相关系数为 -0.6882
,评分与排名强相关。
评价人数
评价人数前 10 电影
用之前同样的方法,我们来分析评价人数的分布情况以及评价人数和排名之间的关系
与评分不同的是,随着评价人数的增多,电影排名有提前的趋势,评价人数主要分布在 10w-50w
之间,平均值为 34.36w
,相关系数为 -0.6865
,评价人数与排名强相关。
年份
电影主要集中在 1990 年以后,相关系数为 0.0173
,年份与排名没有相关性。
最早的电影是在 1931 年,卓别林的《城市之光》
最近的电影是在 2017 年,三部
《请以你的名字呼唤我》:117
《三块广告牌》:191
《寻梦环游记》:63
电影数量前三的年份分别是:
2010:14
2004:12
1994:11
没想到贡献了三部前 5 的电影大年 1994 也只能屈居第 3 位,最后我们来看看贡献数量最多的 2010 年都有哪些佳作
排名 | 电影 |
---|---|
9 | 盗梦空间 |
24 | 怦然心动 |
68 | 让子弹飞 |
86 | 禁闭岛 |
99 | 告白 |
118 | 驯龙高手 |
123 | 神偷奶爸 |
125 | 借东西的小人阿莉埃蒂 |
128 | 岁月神偷 |
142 | 黑天鹅 |
155 | 玩具总动员3 |
163 | 你看起来好像很好吃 |
214 | 初恋这件小事 |
237 | 国王的演讲 |
结语
本文仅对数据进行简单的爬取分析和可视化,目的在于学习这些库的基本使用,你还可以进行深度挖掘分析,比如可以进一步分析评价人数,评分,排名的关系,分析演员,语言以及时长等等,一个好的思路可能比技术更重要。
最后上一个 TOP250 全家福
愿你在电影中遇见另一个世界
愿你在编码中感受学习的快乐
如果你对 Python 开发以及全栈工程师感兴趣,欢迎关注微信公众号,这里不止 Python 哦
转载于:https://juejin.im/post/5c6f6c9d6fb9a049d975cfef
数据可视化豆瓣电影 TOP250相关推荐
- Python爬取、存储、分析、可视化豆瓣电影Top250
Python爬取.存储.分析.可视化豆瓣电影Top250 网站链接: https://movie.douban.com/top250 @文章目录 前言 一.python爬取目标数据,并写入csv文件 ...
- Python数据可视化:豆瓣电影TOP250
豆瓣电影TOP250,对于众多爬虫爱好者,应该并不陌生. 很多人都会以此作为第一个练手的小项目. 当然这也多亏了豆瓣的包容,没有加以太多的反爬措施,对新手比较友好. 本期通过Scrapy框架,对豆瓣电 ...
- Python爬虫实战,pyecharts模块,Python实现豆瓣电影TOP250数据可视化
前言 利用Python实现豆瓣电影TOP250数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pandas模块 pyecharts模块: 以及一些 ...
- python 豆瓣评论数据分析_Python数据可视化分析--豆瓣电影Top250
Python数据分析–豆瓣电影Top250 利用Python爬取豆瓣电影TOP250并进行数据分析,对于众多爬虫爱好者,应该并不陌生.很多人都会以此作为第一个练手的小项目.当然这也多亏了豆瓣的包容,没 ...
- 豆瓣电影TOP250爬虫及可视化分析笔记
人类社会已经进入大数据时代,大数据深刻改变着我们的工作和生活.随着互联网.移动互联网.社交网络等的迅猛发展,各种数量庞大.种类繁多.随时随地产生和更新的大数据,蕴含着前所未有的社会价值和商业价值! ...
- 豆瓣电影TOP250数据规律分析
1 概述 1.1 研究背景与目标 豆瓣电影网对世界知名电影都进行了排行,主要是根据观众们对这部电影的评价的高低来对电影进行等级排序,而我想观测电影的评价分数和评价人数两者那个对电影的等级影响更大.豆瓣 ...
- 爬取豆瓣电影Top250的全部数据并保存一下~
源代码: # 爬虫### 1) 定义一个列表存放分析好的数据```python datalist = [] ```### 2) 处理url因为豆瓣电影top250的URL要指定页面的参数baseURL ...
- 爬虫练习-爬取豆瓣电影TOP250的数据
前言: 爬取豆瓣电影TOP250的数据,并将爬取的数据存储于Mysql数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.4 环境: Python3(Anaconda3) PyChar ...
- python爬取豆瓣电影top250并保存为xlsx_python抓取豆瓣电影Top250数据并写入Excel
douban python抓取豆瓣电影Top250数据并写入Excel 1.将目标网站上的页面抓取下来 2.将抓取下来的数据根据一定的规则进行提取 create table `tb_movie`( i ...
最新文章
- cell 滑动实现旋转动画效果
- Java后台架构知识点(待补充)
- OpenCV加mySQL树莓派_树莓派3B/3B+和4B安装OpenCV教程 (详细教程)
- PHP__call __callStatic
- python 定义字符串变量_python 字符串(1)
- .git文件夹_Git幸存者指南
- android iphone对比度,对比度对比:显示器优势明显_苹果 MacBook Pro_液晶显示器评测-中关村在线...
- Daemon线程--《Java并发编程的艺术》学习笔记
- html对定位图片的某一部分_某系统存任意文件上传
- 太极图正确画法_太极图的三种画法你知道吗?
- 海康威视监控使用html播放
- python写通讯录_Python—— Django 通讯录制作(一)
- 跳转指定位置(HTML)
- 自动定量包装机机械及控制系统设计(PLC控制)
- 多元均值不等式的简单证明(调和平均数与算术平均数)
- 用计算机语言写祝福语,有关程序员节的祝福语
- Qt Creator 8.0.1 (Community)创建项目出现No valid kits found怎么办?
- 固态硬盘与机械硬盘数据迁移
- vue异常报错解决 Missing ref owner context. ref cannot be used on hois 或者是 Cannot read property ‘refs‘ of n
- thinkphp6 websocket-room的加入房间+离开房间+房间消息发送