数据介绍
数据为2011-2021电影数据
可视化分析
首先导入本次项目需要的包和数据
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from pyecharts.charts import Pie from pyecharts import options as opts from pyecharts.globals import ThemeType sns.set_style('ticks') import warnings warnings.filterwarnings('ignore') # 忽略警告 plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示 plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示 data = pd.read_excel('data.xlsx') data.head()
data.dropna(inplace=True) data.reset_index(drop=True,inplace=True) data.drop_duplicates(['电影名称'],inplace=True) data['年份'] = data['上映时间'].apply(lambda x:x.split('-')[0]) # 将首周票房中的--数据删除 data[data['首周票房']=='--'].index data.drop(index=data[data['首周票房']=='--'].index,inplace=True) data.reset_index(drop=True,inplace=True) # 将首周票房亿单位转化为万,且只保留数字 data['首周票房'] = data['首周票房'].apply(lambda x: float(x[:-1])*1000 if x[-1] == '亿' else float(x[:-1])) # 将累计票房亿单位转化为万,且只保留数字 data['累计票房'] = data['累计票房'].apply(lambda x: float(x[:-1])*1000 if x[-1] == '亿' else float(x[:-1]))
可视化
# 分析各个年份的总票房 df1 = data.groupby('年份').sum()['累计票房'] plt.figure(figsize=(10,8)) plt.title('各个年份的总票房',fontsize=14) plt.xlabel('年份',fontsize=14) plt.ylabel('总票房(万元)',fontsize=14) plt.bar(x=df1.index,height=df1.values) plt.show()
# 分析各个年份的电影比例 result_list = [(i,j) for i,j in zip(df1.index.to_list(),df1.values.tolist())] a = Pie(init_opts=opts.InitOpts(theme = ThemeType.DARK)) a.add(series_name='年份', data_pair=result_list, rosetype='radius', radius='70%', ) a.set_global_opts(title_opts=opts.TitleOpts(title="各个年份的电影比例", pos_top=50)) a.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a.render_notebook()
# 分析各个年份的平均票价 df2 = data.groupby('年份').mean()['平均票价'] plt.figure(figsize=(10,8)) plt.title('各个年份的平均票价',fontsize=14) plt.xlabel('年份',fontsize=14) plt.ylabel('平均票价(元)',fontsize=14) plt.plot(df2.index,df2.values) plt.show()
# 分析电影片长的分布 sns.displot(data['片长'],bins=30,kde=True)
# 分析电影平均票价的分布 sns.displot(data['平均票价'],kde=True)
# 分析导演喜爱度的分布 sns.displot(data['导演喜爱度'],kde=True)
df3 = data['来源'].apply(lambda x:x.split(',')[0]).value_counts().head() # 各个地区的电影比例 a1 = Pie(init_opts=opts.InitOpts(theme = ThemeType.CHALK)) a1.add(series_name='地区', data_pair=[list(z) for z in zip(df3.index.to_list(),df3.values.tolist())], rosetype='radius', radius='60%', ) a1.set_global_opts(title_opts=opts.TitleOpts(title="各个地区的电影比例", pos_left='center', pos_top=30)) a1.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a1.render_notebook()
# 分析拍电影数前五的发行公司 df4 = data['发行公司'].value_counts().head().plot(kind='barh')
# 分析片长和评分的关系 plt.figure(figsize=(10,8)) plt.scatter(data['片长'],data['评分']) plt.title('片长和评分的关系',fontsize=15) plt.xlabel('片长',fontsize=15) plt.ylabel('评分',fontsize=15) plt.show()
# 分析各个特征之间的相关系数 fig = plt.figure(figsize=(18,18)) sns.heatmap(data.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':25}) plt.xticks(fontsize=20) plt.yticks(fontsize=20) plt.title('各个特征之间的相关系数',fontsize=20) plt.show()
# 分析年度总票房走势 df1 = data.groupby('年份').sum()['累计票房'] plt.figure(figsize=(10,8)) plt.title('年度总票房走势',fontsize=14) plt.xlabel('年份',fontsize=14) plt.ylabel('总票房(万元)',fontsize=14) plt.plot(df1.index,df1.values) plt.show()
# 分析哪种制片制式最受欢迎 from pyecharts.charts import WordCloud import collections result_list = [] for i in data['制片制式'].values: word_list = str(i).split('/') for j in word_list: result_list.append(j) result_list word_counts = collections.Counter(result_list) word_counts_top = word_counts.most_common(50) print(word_counts_top) wc = WordCloud() wc.add('',word_counts_top) wc.render_notebook()
# 分析各种制式制片的比例 a2 = Pie(init_opts=opts.InitOpts(theme = ThemeType.CHALK)) a2.add(series_name='类型', data_pair=word_counts_top, radius='60%', ) a2.set_global_opts(title_opts=opts.TitleOpts(title="各种制式制片的比例", pos_top=50)) a2.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a2.render_notebook()
# 分析各种类型的电影出现的次数 from pyecharts.charts import WordCloud import collections result_list = [] for i in data['电影类型'].values: word_list = str(i).split(' / ') for j in word_list: result_list.append(j) result_list word_counts = collections.Counter(result_list) # 词频统计:获取前100最高频的词 word_counts_top = word_counts.most_common(100) print(word_counts_top) wc = WordCloud() wc.add('',word_counts_top) wc.render_notebook()
# 分析各种类型电影的比例 word_counts_top = word_counts.most_common(10) a3 = Pie(init_opts=opts.InitOpts(theme = ThemeType.MACARONS)) a3.add(series_name='类型', data_pair=word_counts_top, rosetype='radius', radius='60%', ) a3.set_global_opts(title_opts=opts.TitleOpts(title="各种类型电影的比例", pos_left='center', pos_top=50)) a3.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a3.render_notebook()