电影数据分析——国产烂片深度揭秘

1 读取数据,以”豆瓣评分”为标准,看看电影评分分布,及烂片情况

要求:

① 读取数据”moviedata.xlsx”,去除缺失值

② 查看”豆瓣评分”数据分布,绘制直方图、箱型图

③ 判断”烂片标准” → 这里以上四分位数(该样本中所有数值由小到大排列后第25%的数字)评分为”烂片标准”

④ 筛选出烂片数据,并做排名,找到TOP20

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore')
不发出警告

from bokeh.io import output_notebook
output_notebook()
导入notebook绘图模块

from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource,HoverTool
导入图表绘制、图标展示模块
导入ColumnDataSource模块

查看数据,数据清洗
import os
os.chdir(r'E:\Python数据分析\项目\国产烂片深度揭秘')
创建工作路径

df = pd.read_excel('moviedata.xlsx')
df = df[df['豆瓣评分'] > 0]
print('初步清洗后数据量为%i条' % len(df))
读取数据
删除"豆瓣评分"小于等于0的值

查看豆瓣评分情况
fig = plt.figure(figsize = (10,6))
plt.subplots_adjust(hspace=0.2)
创建绘图空间

ax1 = fig.add_subplot(2,1,1)
df['豆瓣评分'].plot.hist(stacked=True,bins=50,color = 'green',alpha=0.5,grid=True)
plt.ylim([0,150])
plt.title('豆瓣评分数据分布-直方图')
绘制直方图

ax2 = fig.add_subplot(2,1,2)
color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
df['豆瓣评分'].plot.box(vert=False, grid = True,color = color)
plt.title('豆瓣评分数据分布-箱型图')
绘制箱型图

df['豆瓣评分'].describe()

电影数据分析——国产烂片深度揭秘
判断是否符合正态分布
from scipy import stats
导入相关模块

u = df['豆瓣评分'].mean()  # 计算均值
std = df['豆瓣评分'].std()  # 计算标准差
stats.kstest(df['豆瓣评分'], 'norm', (u, std))
这里p值大于0.05,为正态分布

结论:以样本数据上四分位数为烂片评判标准 → 4.3分

筛选出烂片数据,并做排名,找到TOP20
data_lp = df[df['豆瓣评分']

烂片评价标准:4.3分,整理后烂片数据大概546条

2 什么题材的电影烂片最多?

要求:

① 按照”类型”字段分类,筛选不同电影属于什么题材

② 整理数据,按照”题材”汇总,查看不同题材的烂片比例,并选取TOP20

③ 将得到的题材烂片比例TOP20制作散点图 → 横坐标为”题材”类型,纵坐标为烂片比例,点大小为样本数量

提示:

① 删除”类型”字段空值的数据

② 由于一个电影”类型”会有多个,这里需要将一个电影每个”类型”都识别出来,在统计某个题材时都需要计算,例如:

如果一个电影的类型为:”喜剧/爱情”,则在计算”喜剧”、”爱情”题材的烂片比例时,都需要将该电影算上

③ 注意类型字段中,要删除空格字符

④ bokeh图设置点大小,这里通过 开方减小数据差距 → size = count*0.5系数

筛选出所有题材类型,查看不同题材烂片比例

typelst = []
for i in df[df['类型'].notnull()]['类型'].str.replace(' ','').str.split('/'):
    typelst.extend(i)
取出所有电影的"类型",并整理成列表
注意这里要删除"类型"中的空格字符

typelst = list(set(typelst))
print(typelst)
列表去重

创建函数,查看不同题材的烂片比例
这里要删除"类型"字段空值的数据

lst_type_lp = []
创建空字典、空列表

df_type = df[df['类型'].notnull()][['电影名称','豆瓣评分','类型']]
筛选数据

def f1(data,typei):
    dic_type_lp = {}
    datai = data[data['类型'].str.contains(typei)]
    # 筛选数据
    lp_pre_i = len(datai[datai['豆瓣评分']

电影数据分析——国产烂片深度揭秘

3 和什么国家合拍更可能产生烂片?

要求:

① 按照”制片国家/地区”字段分类,筛选不同电影的制片地

② 整理数据,按照”题材”汇总,查看不同题材的烂片比例

提示:

① 删除”制片国家/地区”字段空值的数据

② 删除”制片国家/地区”中不包括”中国大陆”的数据

③ 制片地删除”中国大陆”、”中国”、”台湾”、”香港”等噪音数据

④ 筛选合作电影大于等于3部以上的国家

筛选电影制片地;
和什么国家合拍更可能产品烂片
df_loc = df[['电影名称','制片国家/地区','豆瓣评分']][df['制片国家/地区'].notnull()]
df_loc = df_loc[df_loc['制片国家/地区'].str.contains('中国大陆')]
筛选数据

loclst = []
for i in df_loc['制片国家/地区'].str.replace(' ','').str.split('/'):
    loclst.extend(i)
取出所有电影的制片地,并整理成列表;
注意这里要删除"制片国家/地区"中的空格字符

loclst = list(set(loclst))
loclst.remove('中国大陆')
loclst.remove('中国')
loclst.remove('台湾')
loclst.remove('香港')
print(loclst)
列表去重

创建函数,查看不同制片地的烂片比例

lst_loc_lp = []
创建空列表

def f2(data,loci):
    dic_loc_lp = {}
    datai = data[data['制片国家/地区'].str.contains(loci)]
    # 筛选数据
    lp_pre_i = len(datai[datai['豆瓣评分']=3]   # 筛选合作电影大于等于3部以上的国家
loc_lp_top20 = df_loc_lp.sort_values(by = 'loc_lp_pre',ascending = False).iloc[:20]
loc_lp_top20
筛选出烂片比例TOP的制片地

结论:综合来看,居然和欧美合作更可能产生烂片

电影数据分析——国产烂片深度揭秘

4 卡司数量是否和烂片有关?

要求

① 计算每部电影的主演人数

② 按照主演人数分类,并统计烂片率( 分类:’1-2人’,’3-4人’,’5-6人’,’7-9人’,’10以上’)

③ 查看烂片比例最高的演员TOP20

提示:

① 通过”主演”字段内做分列来计算主演人数

② 需要分别统计不同主演人数的电影数量及烂片数量,再计算烂片比例

③ 这里可以按照明星再查看一下他们的烂片率,比如黄晓明、甄子丹、刘亦菲、范冰冰等

卡司数量与烂片的关系
计算每部电影的主演人数,并统计烂片率
分类:'1-2人','3-4人','5-6人','7-9人','10以上'
df['主演人数'] = df['主演'].str.split('/').str.len()
计算主演人数

df_leadrole1 = df[['主演人数','豆瓣评分']].groupby('主演人数').count()
df_leadrole2 = df[['主演人数','豆瓣评分']][df['豆瓣评分']2:
        dic_role_lp = {}
        lp_pre_i = len(datai[datai['豆瓣评分']

电影数据分析——国产烂片深度揭秘

5 不同导演每年电影产量情况如何

要求:

① 通过”上映日期”筛选出每个电影的上映年份

② 查看不同导演的烂片比例、这里去除掉拍过10次电影以下的导演

③ 查看不同导演每年的电影产量制作散点图 → 横坐标为年份,纵坐标为每年电影平均分,点大小该年电影数量

** 用bokeh制图

** 横坐标限定为2007-2017年

** 绘制散点图只需要用产出过烂片的导演数据

提示:

① 注意要删除”上映日期”中的空格字符

② 绘制图表时,分开建立数据绘制

电影上映时间整理
电影"上映日期"字段整理 → 时间序列
年份限定为2007-2017年

df_year = df[['电影名称','导演','豆瓣评分','上映日期']][df['导演'].notnull()]
df_year = df_year[df_year['上映日期'].notnull()]
df_year['上映日期'] = df_year['上映日期'].str.replace(' ','')  # 删除空格字符
df_year['year'] = df_year['上映日期'].str[:4]   # 识别年份
df_year = df_year[df_year['year'].str[0] == '2']  # 去除错误数据
df_year['year'] = df_year['year'].astype(np.int)   # 年份设置为整型

筛选导演
directorlst = []
for i in df_year['导演'].str.replace(' ','').str.split('/'):
    directorlst.extend(i)
取出所有电影的主演,并整理成列表;  注意这里要删除"主演"中的空格字符

directorlst = list(set(directorlst))
print('筛选后的导演人数为%i人' % len(directorlst))
print(directorlst)
列表去重

查看不同导演的烂片比例
这里去除掉拍过10次电影以下的导演
年份限定为2007-2017年

lst_dir_lp = []
创建空字典、空列表

for i in directorlst:
    datai = df_year[df_year['导演'].str.contains(i)]
    if len(datai) >10:
        dic_dir_lp = {}
        lp_pre_i = len(datai[datai['豆瓣评分']

电影数据分析——国产烂片深度揭秘

Original: https://blog.csdn.net/yangyuying_1219/article/details/114230063
Author: yangyuying_1219
Title: 电影数据分析——国产烂片深度揭秘

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/741644/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球