中国电影票房排行数据爬取及分析可视化

      大家好,我是带我去滑雪!

      对中国电影票房排行数据的爬取和分析可视化具有多方面的用处:例如了解电影市场的历史趋势,包括不同类型电影的受欢迎程度、票房的季节性波动。识别观众对于不同类型电影的偏好,为电影制片方提供指导,以选择更有市场潜力的题材和类型。本期使用python爬取中国电影票房排行数据,并进行数据分析。

目录

一、爬取中国电影票房排行数据

(1) 传入网页和请求头

(2)解析网页和获取信息

(3)部分数据爬取结果展示

(4)数据清洗

二、数据分析

(1)绘制排行榜前10的柱状图

(2) 对平均票价和平均人次进行分析

(3) 绘制词云图


一、爬取中国电影票房排行数据

(1) 传入网页和请求头

import requests; import pandas as pd
from flask import request
from bs4 import BeautifulSoup
url = 'https://piaofang.maoyan.com/rankings/year'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62'}
response= requests.get(url,headers=headers)
response.status_code

(2)解析网页和获取信息

soup = BeautifulSoup(response.text, 'html.parser')
soup=soup.find('div', id='ranks-list')
movie_list = []for ul_tag in soup.find_all('ul', class_='row'):movie_info = {}li_tags = ul_tag.find_all('li')movie_info['序号'] = li_tags[0].textmovie_info['标题'] = li_tags[1].find('p', class_='first-line').textmovie_info['上映日期'] = li_tags[1].find('p', class_='second-line').textmovie_info['票房(亿)'] = f'{(float(li_tags[2].text)/10000):.2f}'movie_info['平均票价'] = li_tags[3].textmovie_info['平均人次'] = li_tags[4].textmovie_list.append(movie_info)movie_listmovies=pd.DataFrame(movie_list)
movies.head(10)

(3)部分数据爬取结果展示

序号标题上映日期票房(亿)平均票价
01长津湖2021-09-30 上映57.7546.38389622
12战狼22017-07-27 上映56.9535.59427337
23你好,李焕英2021-02-12 上映54.1344.75656524
34哪吒之魔童降世2019-07-26 上映50.3635.69246723
45流浪地球2019-02-05 上映46.8744.5969829
56满江红2023-01-22 上映45.4449.51214624
67唐人街探案32021-02-12 上映45.2447.6025729
78复仇者联盟4:终局之战2019-04-24 上映42.5048.95809623
89长津湖之水门桥2022-02-01 上映40.6749.28668219
910流浪地球22023-01-22 上映40.2950.79231621

(4)数据清洗

       数据清洗(Data Cleaning)是数据分析过程中至关重要的一步,其目的是确保数据的准确性、完整性和一致性。为了方便后续的数据分析,对爬取的数据进行清洗。

movies=movies.set_index('序号').loc[:'250',:]  
movies['上映日期']=pd.to_datetime(movies['上映日期'].str.replace('上映',''))
movies[['票房(亿)','平均票价','平均人次']]=movies.loc[:,['票房(亿)','平均票价','平均人次']].astype(float)
movies['年份']=movies['上映日期'].dt.year  ;   movies['月份']=movies['上映日期'].dt.month
movies.head(5)

       清洗后数据部分展示:

序号标题上映日期票房(亿)平均票价平均人次年份月份
1长津湖2021-09-3057.7546.38389622.020219
2战狼22017-07-2756.9535.59427337.020177
3你好,李焕英2021-02-1254.1344.75656524.020212
4哪吒之魔童降世2019-07-2650.3635.69246723.020197
5流浪地球2019-02-0546.8744.59698029.02019

二、数据分析

(1)绘制排行榜前10的柱状图

import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False  
top_movies = movies.nlargest(10, '票房(亿)')
plt.figure(figsize=(7, 4),dpi=128)
ax = sns.barplot(x='票房(亿)', y='标题', data=top_movies, orient='h',alpha=0.5)for p in ax.patches:ax.annotate(f'{p.get_width():.2f}', (p.get_width(), p.get_y() + p.get_height() / 2.),va='center', fontsize=8, color='gray', xytext=(5, 0),textcoords='offset points')plt.title('票房前10的电影')
plt.xlabel('票房数量(亿)')
plt.ylabel('电影名称')
plt.tight_layout()
plt.savefig("squares.png",bbox_inches ="tight",pad_inches = 1,transparent = True,facecolor ="w",edgecolor ='w',dpi=300,orientation ='landscape')

      输出结果:

(2) 对平均票价和平均人次进行分析

 

plt.figure(figsize=(7, 6),dpi=128)
plt.subplot(2, 2, 1)
sns.scatterplot(y='平均票价', x='年份', data=movies,c=movies['年份'],cmap='plasma')
plt.title('平均票价点图')
plt.ylabel('平均票价')
#plt.xticks([])plt.subplot(2, 2, 2)
sns.boxplot(y='平均票价', data=movies)
plt.title('平均票价箱线图')
plt.xlabel('平均票价')plt.subplot(2, 2, 3)
sns.scatterplot(y='平均人次', x='年份', data=movies,c=movies['年份'],cmap='plasma')
plt.title('平均人次点图')
plt.ylabel('平均人次')plt.subplot(2, 2, 4)
sns.boxplot(y='平均人次', data=movies)
plt.title('平均人次箱线图')
plt.xlabel('平均人次')
plt.tight_layout()
plt.savefig("squares1.png",bbox_inches ="tight",pad_inches = 1,transparent = True,facecolor ="w",edgecolor ='w',dpi=300,orientation ='landscape')

     输出结果:

(3) 绘制词云图

import numpy as np
def randomcolor():colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color ="#"+''.join([np.random.choice(colorArr) for i in range(6)])return color
[randomcolor() for i in range(3)]
from wordcloud import WordCloud
from matplotlib import colors
from imageio.v2 import imread 
mask = imread('底板.png')  
word_freq = dict(zip(movies['标题'], movies['票房(亿)']))
color_list=[randomcolor() for i in range(20)]wordcloud = WordCloud(width=500, height=500, background_color='white',font_path='simhei.ttf',max_words=250, max_font_size=250,random_state=42,mask = mask,colormap=colors.ListedColormap(color_list)).generate_from_frequencies(word_freq)plt.figure(figsize=(10, 5),dpi=300)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.savefig("squares1.png",bbox_inches ="tight",pad_inches = 1,transparent = True,facecolor ="w",edgecolor ='w',dpi=300,orientation ='landscape')

       输出结果: 


更多优质内容持续发布中,请移步主页查看。

若有问题可邮箱联系:1736732074@qq.com 

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

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

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

相关文章

Java Swing商品信息查询系统

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 2)本次程序设计涉及到 Java 的基本语法,即课堂上所…

【STM32】ADC(模拟/数字转换)

一、ADC的简介 1.什么是ADC 1)将【电信号】-->【电压】-->【数字量】 2)ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字量,建立模拟电路到数字电路的桥梁。 3)12位逐次逼近型ADC,1us转换时间&#xf…

宠物信息服务预约小程序的效果如何

宠物的作用越来越重要,因此铲屎官们对自己爱宠的照顾也是加倍提升,而市场围绕宠物展开的细分服务近些年来逐渐增多,且市场规模快速增长。涉及之广,涵盖宠物衣食住行、医疗、美容、婚丧嫁娶等,各品牌争相抢夺客户及抢占…

支持4KHz回报还能无线充电,简约不简单的雷柏VT3S游戏鼠标上手

这两年国产鼠标的表现很让人惊喜,不仅外观做工越来越精细,配置也越来越强大,当然价格依然亲民。现在很容易找到一款搭载高端传感器、响应速度快、电池续航时间长,并且还支持无线充电的全能型鼠标。 我之前用雷柏的鼠标比较多&…

AUTODL云服务器使用大致步骤(适合本人版)

(一)在官网上创建一个服务器 (二)远程连接指令: 改为: (三)连接后,可在中进行代码运行 输入一些指令 python ......

Nodejs中net模块多次Socket.setTimeout无法覆盖之前函数,导致叠加执行问题解决

Hi, I’m Shendi Nodejs中net模块多次Socket.setTimeout无法覆盖之前函数,导致叠加执行问题解决 问题描述 在 Nodejs 中,net 模块的 Socket 的 setTimeout 函数是设置超时时间,如果多次设置,超时时间会是最后一次的时间&#xff…

038、语义分割

之——介绍与数据集 杂谈 语义分割,语义分割(Semantic Segmentation)方法-CSDN博客: 语义分割是计算机视觉领域的一项重要任务,旨在将图像中的每个像素分配到其对应的语义类别中。与物体检测或图像分类不同,语义分割不仅要识别图像…

QGroundControl源码编译的三种方法

1.使用QtCreator编译: 下载qgroundcontrol源码 https://github.com/mavlink/qgroundcontrol.git 克隆 同步子模块 使用打开qgroundcontrol.pro 打开前要求先安装qt 5.15.2

Mysql之单行函数

Mysql之单行函数 单行函数数值类型函数字符串类型的函数日期和时间函数加密与解密函数信息函数 单行函数 函数的定义 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来, 需要的时候直接调用即可。这…

nacos网关

目录 拉取docker镜像 环境配置 网关搭建架构 wemedia-gateway网关配置 依赖 启动类配置 网关yml配置 nacos配置中心配置网关 wdmedia服务配置 依赖 启动类配置 yml配置 nacos配置 nacos中的配置共享 nacos配置 wmedia模块中yml的配置 参考:https://blog.csdn.net/…

Spark 平障录

Profile Profile 是最重要的第一环。 利用好 spark UI 和 yarn container log分析业务代码,对其计算代价进行预判建设基准,进行对比,比如application id 进行对比,精确到 job DAG 环节 充分利用 UI Stage 页面 页头 summary&…

element-plus 表格-合并单元格

利用表格:span-method"" 方法实现合并单元格 合并前 合并后 重点代码generateIndexGroups &#xff0c;找到合并的单元格的index号 代码实现如下 <template><h2>实现表格的合并</h2><div><!-- :span-method"arraySpanMethod&quo…