import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sys
from xlrd import open_workbook # xlrd用于读取xld
from texttable import Texttable
import seaborn as sns
import re
#票房Top 10
def office_top_10(df):
data1=pd.DataFrame(df,columns=['名称','上映时间', '类型','评分','累计票房'])
data1['累计票房'] = data1['累计票房'].apply(int)
data1 = data1.sort_values(by='累计票房', ascending=False)[0:10]
tb=Texttable() #表格展示
tb.header(data1.columns.to_numpy())
tb.add_rows(data1.values,header=False)
print(tb.draw())
#票房影响因素
def office_influence(df):
data2 = pd.DataFrame(df,columns = ['评分','首周票房','时长','评分人数','累计票房'])
data2['评分人数'] = data2['评分人数'].str.replace('万元',' ')
data2['评分人数'] = data2['评分人数'].str.replace('万',' ')
data2['时长'] = data2['时长'].str.replace('分钟',' ')
data2.dropna(axis=0, how='any', inplace=True)#去掉含空值的行
data2 = data2.astype(float)
ax = sns.heatmap(data2.corr(), annot=True, vmax=1, square=True, cmap="Blues")
ax.set_ylim(5.0, 0)
#电影总类型统计
def countN(column):
count = dict()
for row in column:
row = row.split(',')
row = row[:len(row)-1]
for ele in row:
if ele in count:
count[ele] += 1
else:
count[ele] = 1
return count
def movie_type(df):
data3 = pd.DataFrame(df,columns = ['名称', '类型','年份'])
#每种类型出现的次数除以总的影片数,以此作为该种类型的频数百分比
genres = pd.Series(countN(data3['类型'])).sort_values()
genres_avg = genres / len(data3)
genres_avg.plot(kind = 'barh', title = '类型频率')
#选取前5种类型,观察它们在这15年间每年的数量与当年影片总数之比的变化
genres_by_year = data3.groupby('年份')['类型'].sum()
genres_count = pd.DataFrame([], index = genres_by_year.index, columns = genres.index[len(genres)-5:])
print(len(genres))
for g in genres_count.columns:
for y in genres_count.index:
genres_count.loc[y,g] = genres_by_year[y].count(g) / len(genres_by_year[y])
genres_count.plot(figsize = (10,6), title = 'Evolution of Movies in 5 Genres')
#不同类型影片的票房
#对于某种类型,计算所有该类影片的票房,再除以该类影片的数量
def differ_type(df):
data3 = pd.DataFrame(df,columns = ['名称', '类型','年份'])
genres = pd.Series(countN(data3['类型'])).sort_values()
movies_by_genres = pd.DataFrame(0, index = genres.index, columns = ['累计票房', '评分'])
for i in range(len(df)):
row = df['类型'][i].split(',')
row = row[:len(row)-1]
for g in row:
movies_by_genres.loc[g, '累计票房'] += df['累计票房'][i] #该类影片的总票房
movies_by_genres.loc[g, '评分'] += df['评分'][i] #该类型影片的总评分
movies_by_genres = movies_by_genres.div(genres.values, axis=0)
movies_by_genres.sort_values('累计票房', ascending=False)[['累计票房']].plot( kind = 'bar', title='Average Revenue in Different Genres')
return movies_by_genres
#导演的票房分布
def director_office(df):
df['累计票房'] = df['累计票房'].astype(float)
revenue_of_director = df.groupby('演职人员1').累计票房.mean() #平均票房
return revenue_of_director
#主演的票房分布
def count_actor(column):
count = dict()
for row in column:
row = row.split(',')
for ele in row:
if ele in count:
count[ele] += 1
else:
count[ele] = 1
return count
def score_actor(df):
# movies_noani = df[~df['类型'].str.contains('动画', regex=False)].reset_index(drop = 'True')
movies_noani = df
movies_noani['演职人员2'] = movies_noani['演职人员2'].replace(' ',' ')+','+movies_noani['演职人员3'].replace(' ',' ')
actors = pd.Series(count_actor(movies_noani['演职人员2'])).sort_values()
movies_by_actors = pd.DataFrame(0, index = actors.index, columns = ['累计票房', '评分'])
#按不同权重统计演员的票房:
r4 = [0.4, 0.3, 0.2, 0.1] #如果有4位主演,按此加权,以下类似
r3 = [0.4, 0.3, 0.3]
r2 = [0.6, 0.4]
r1 = [1]
r = [r1, r2, r3, r4]
for i in range(len(movies_noani)):
actorlist = movies_noani['演职人员2'][i].split(',')[0:2]
for j in range(len(actorlist)):
movies_by_actors.loc[actorlist[j], '累计票房'] += movies_noani['累计票房'][i] * r[len(actorlist)-1][j] #一个演员的总票房
movies_by_actors.loc[actorlist[j], '评分'] += movies_noani['评分'][i] * r[len(actorlist)-1][j] #一个演员的总评分
movies_by_actors = movies_by_actors.div(actors.values, axis=0) #求平均值
return movies_by_actors
#档期分布
def month_movie(df):
df['month'] = pd.to_datetime(df['上映时间']).apply(lambda x: x.month)
revenue_month = df.groupby('month')['累计票房'].sum() / df.groupby('month').size()
revenue_month.plot(kind='bar', title='Average Revenue per Month')
return revenue_month
##main函数
# if __name__ == "__main__":
# #数据读取并预处理
# data = pd.read_excel(file)
# df = pd.DataFrame(data)
# df = df[(df.累计票房!='暂无')]
# df['年份'] = pd.to_datetime(df['上映时间']).apply(lambda x: x.year)
# df.dropna(axis=0, how='any', inplace=True)#去掉含空值的行
# df = df[~df.isin(['暂无'])]
# df.reset_index(drop=True, inplace=True)#重新排序
# file = 'd:\\movie.xls'
# office_top_10(df)
# office_influence(df)
# movie_type(df)
# differ_type(df)
# revenue_of_director = director_office(df)
# revenue_of_director.sort_values().tail(10).plot(kind = 'barh', title = 'Directors with Top Revenue')
# actor = score_actor(df)
# actor['累计票房'].sort_values().tail(10).plot(kind = 'barh')
# month_movie(df)
# plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
# plt.rcParams['font.serif'] = ['KaiTi']
# plt.rcParams['axes.unicode_minus'] = False
# plt.show()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
<项目介绍> 基于猫眼电影数据和SVR回归器的电影票房预测系统, 包括数据爬取, 特征分析以及数据预测 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
基于猫眼电影数据和SVR回归器的电影票房预测系统, 包括数据爬取, 特征分析以及数据预测.zip (18个子文件)
基于猫眼电影数据和SVR回归器的电影票房预测系统, 包括数据爬取, 特征分析以及数据预测
svm_movie.py 5KB
movie_detail.py 4KB
font.py 3KB
findIP.py 2KB
cache
1588316706.069114.woff 2KB
1588248077.992224.woff 2KB
1588316144.8282652.woff 2KB
test.woff 2KB
data_feature.py 6KB
movie.xls 437KB
catch_movie_data.py 3KB
data_preprocess.py 2KB
__pycache__
requests.cpython-36.pyc 2KB
movie_detail.cpython-36.pyc 3KB
data_feature.cpython-36.pyc 4KB
data_preprocess.cpython-36.pyc 2KB
test.cpython-36.pyc 3KB
font.cpython-36.pyc 3KB
共 18 条
- 1
资源评论
- weixin_515879372024-03-29终于找到了超赞的宝藏资源,果断冲冲冲,支持!
- tuyihan2024-06-12终于找到了超赞的宝藏资源,果断冲冲冲,支持!
程序员无锋
- 粉丝: 3678
- 资源: 2181
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 分布式编程作业1的源代码
- 该库为 ASR 提供了常见的语音特征,包括 MFCC 和滤波器组能量 .zip
- 该存储库将包含基本的 Python 编程问题及其解决方案 .zip
- 该存储库包含 100 多个 Python 编程练习问题,以不同的方式进行讨论、解释和解决.zip
- 虚拟 Python 环境构建器.zip
- 洪涝灾害应急信息-JAVA-基于springBoot洪涝灾害应急信息管理系统设计与实现(毕业论文+PPT)
- 嗨玩旅游网站-JAVA-基于springboot嗨玩旅游网站设计与实现(毕业论文+PPT)
- 艰难学习 Python3 的代码.zip
- 个性化旅游推荐-JAVA-基于springboot个性化旅游推荐系统的设计与实现(毕业论文+PPT)
- 腾讯云 API 3.0 SDK for Python.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功