国产烂片深度揭秘

一、项目背景:

本文以豆瓣电影评分的情况进行分析,揭秘国产烂片。从五个方面入手分析,首先是从整体分析,对电影评分分布及烂片情况有个整体的把握,接着从电影题材入手,分析最不受欢迎的电影题材,其次从电影出品国入手,研究与哪个国家合拍电影最容易产出烂片,再次分析烂片的比例是否与演员有关,最后分析不同导演每年产出电影数量的情况。

二、电影评分分布及烂片情况


豆瓣评分总体分布情况

从频率分布直方图及箱型图看出,豆瓣电影评分总体分布在4-8分的范围,总体评价均值约为5.7分,说明观众对电影的好评率较低。

附代码如下:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import os

os.chdir('C:\\***\\国产烂片深度揭秘')

data=pd.read_excel('moviedata.xlsx')

data=data[data['豆瓣评分']>0]

fig=plt.figure(figsize=(10,6))

plt.subplots_adjust(hspace=0.3)

ax1=fig.add_subplot(2,1,1)

data['豆瓣评分'].plot.hist(stacked=True,bins=50,color='green',alpha=0.5)

plt.title('豆瓣评分数据分布直方图')

ax2=fig.add_subplot(2,1,2)

color=dict(boxes='DarkGreen',whiskers='DarkOrange',medians='DarkBlue',caps='Gray')

data['豆瓣评分'].plot.box(color=color,vert=False)

plt.title('豆瓣评分数据分布箱线图')

三、最不受欢迎的电影题材


不同题材电影烂片比例

图中点的大小代表样本数量,点越大代表该题材的电影样本数量越大,纵轴表示烂片比例。从图中可看出情色,恐怖及惊悚的题材烂片比例居高,拍电影进行选题材的时候需慎重;从样本数量可以看出,以喜剧及爱情为题材的电影数量居多,随着生活水平的提高,人们越来越追求高水平的生活,在工作压力及其他压力下,看喜剧也是一种较好的解压方式。喜剧及爱情为题材的电影数量虽较受欢迎,但总体来看烂片占30%多,在电影投入的时候需要了解观众的需求,从观众的角度出发。

附代码如下:

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

#由描述性数据统计可以看出,处于25%分位数的评分数为4.3,由‘烂片标准'可得低于4.3分的都被评为烂片

from scipy import stats

u=data['豆瓣评分'].mean()

std=data['豆瓣评分'].std()

stats.kstest(data['豆瓣评分'],'norm',(u,std))

data_bad=data[data['豆瓣评分']<4.3]

data_bad.sort_values(by='豆瓣评分',ascending=True,inplace=True)

#烂片top20

data_bad[:20]

data_q2=data[data['类型'].notnull()]

type=[]

for i in data_q2['类型'].str.replace(' ',''):

    a=i.split('/')

    type.extend(a)

types=list(set(type))

lst_type_lp=[]

df_type=data[data['类型'].notnull()][['电影名称','豆瓣评分','类型']]       

def frames(data,typei):

    data_typelp={}

    datai=data[data['类型'].str.contains(typei)]

    prec=len(datai[datai['豆瓣评分']<4.3])/len(datai)

    data_typelp['typename']=typei

    data_typelp['typecount']=len(datai)

    data_typelp['type_lp_pre']=prec

    return (data_typelp)

for i in types:

    dici=frames(df_type,i)

    lst_type_lp.append(dici)

df_type_lp=pd.DataFrame(lst_type_lp)

df_type_lp20=df_type_lp.sort_values(by='type_lp_pre',ascending=False).iloc[:20]

from bokeh.plotting import figure,show,output_file

from bokeh.models import HoverTool

from bokeh.models import ColumnDataSource

source=ColumnDataSource(df_type_lp20)

hover=HoverTool(tooltips=[('数据量:','@typecount'),('烂片比例:','@type_lp_pre')])

df_type_lp20['size']=df_type_lp20['typecount']**0.5*2

p=figure(plot_height=400,plot_width=600,x_range=df_type_lp20['typename'].tolist(),tools=[hover,'reset,xwheel_zoom,pan,box_select'],title='不同电影题材烂片比例')

p.circle(x=df_type_lp20['typename'],y=df_type_lp20['type_lp_pre'],size=df_type_lp20['size'],fill_color='red',line_dash=[6,4],

        source=source,fill_alpha=0.6)

show(p)


四、和什么国家合拍更可能产生烂片


合作电影大于等于3的国家

从上表可以看出与英国,新加坡,美国合拍产出的电影烂片比例最高,尤其是英国,烂片比例高达75%.

附代码:

data_q3=data[data['制片国家/地区'].notnull()][['制片国家/地区','类型','豆瓣评分']]

data_q3=data[data['制片国家/地区'].str.replace(' ','').str.contains('中国大陆')]

country=[]

for i in data_q3['制片国家/地区'].str.replace(' ','').str.split('/'):

    country.extend(i)

countrys=list(set(country))

countrys.remove('中国大陆')

countrys.remove('香港')

countrys.remove('台湾')

countrys.remove('中国')

lst_data=[]     

def country_frame(data,country):

    q3={}

    datai=data[data['制片国家/地区'].str.contains(country)]

    q3['loc_lp_pre']=len(datai[datai['豆瓣评分']<4.3])/len(datai)

    q3['loccount']=len(datai)

    q3['loc']=country

    return (q3)

for i in countrys:

    data3=country_frame(data_q3,i)

    lst_data.append(data3)

dataq3=pd.DataFrame(lst_data)

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

q_3=dataq3[dataq3['loccount']>3]

q_3.sort_values(by='loc_lp_pre',ascending=False)

五、卡司数量是否和烂片有关


卡司数量与烂片比例

从上表可看出主演人数在1-2的电影烂片比例最低,其次是3-4人,说明一部电影的好评率还与电影主角人数有关,主演越多,关系越复杂,突显不了重点,显得杂乱。

代码如下:

d4=data[data['主演'].notnull()][['电影名称','主演','豆瓣评分']]

lt=[]

for i in d4['主演']:

    a=len(i.replace(' ','').split('/'))

    lt.append(a)

d4['主演人数']=lt

ranges=[]

for i in d4['主演人数']:

    if i<3:

        a='1-2人'

    elif i<5:

        a='3-4人'

    elif i<7:

        a='5-6人'

    elif i<10:

        a='7-9人'

    else:

        a='10人以上'

    ranges.append(a)

d4['主演人数范围']=ranges

def data4_frame(data,zyrs):

    q_4={}

    data4=data[data['主演人数范围'].str.contains(zyrs)]

    q_4['主演人数分布']=zyrs

    q_4['烂片数量']=len(data4[data4['豆瓣评分']<4.3])

    q_4['烂片比例']=(len(data4[data4['豆瓣评分']<4.3]))/len(data4)

    q_4['电影数量']=len(data4)

    return (q_4)

q4_lp=[]

for i in d4['主演人数范围'].unique().tolist():

    lp=data4_frame(d4,i)

    q4_lp.append(lp)

q4_end=pd.DataFrame(q4_lp)

data_rolelp=data[(data['主演'].notnull())&(data['豆瓣评分']<4.3)]

role=[]

for i in data_rolelp['主演'][data_rolelp['主演'].notnull()].str.replace(' ','').str.split('/'):

    role.extend(i)

roles=list(set(role))

data_roles=data[data['主演'].notnull()]

data_q42=[]

for i in roles:

    datai=data_roles[data_roles['主演'].str.contains(i)]

    if len(datai)>2:

        data_role_lp={}

        data_role_lp['role']=i

        data_role_lp['rolecount']=len(datai)

        data_role_lp['lppre']=len(datai[datai['豆瓣评分']<4.3])/len(datai)

        data_q42.append(data_role_lp)

role_lp=pd.DataFrame(data_q42)

role_lptop20=role_lp.sort_values(by=['lppre'],ascending=False)[:20]

六、不同导演每年电影产量情况


不同导演每年的电影产量及电影均分

邓衍成出品的电影数量在2006年期间最多,其次是2009年和2010年期间,在09年产出的电影好评均分达7.7分,然后是06年产出的电影均分达7分。10年之后出品的电影数量越来越少,评分也越来越低,这里需要进一步分析原因。

不同导演的烂片比例

上表得出的数据已排除电影产量在10次以下的导演,由表得出王晶导演的烂片比例最高,高达21.05%。

附代码:

data51=data[data['上映日期'].notnull()][['电影名称','导演','豆瓣评分','上映日期']]

data51=data51[data51['导演'].notnull()]

data51['年份']=data51['上映日期'].str.replace(' ','').str[:4]

data51=data51.drop(data51['年份']=='不详')

data51=data51.drop(data51['年份']=='暂无')

data51['年份']=data51['年份'].astype(int)

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

lst_director=[]

for i in data51['导演'].str.replace(' ','').str.split('/'):

    lst_director.extend(i)

director=list(set(lst_director))

direct_lp=data51[data51['豆瓣评分']<4.3]

l_p=[]

for i in director:

    datai=data51[data51['导演'].str.contains(i)]

    if len(datai)>10:

        dirlp={}

        dirlp['导演']=i

        dirlp['count']=len(datai)

        dirlp['lp_pre']=len(datai[datai['豆瓣评分']<4.3])/len(datai)

        l_p.append(dirlp)

data52=pd.DataFrame(l_p)

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

def dirt(data,direct):

    datai=data[data['导演'].str.contains(direct)]

    group1=datai[['年份','电影名称']].groupby(by=['年份']).count()

    group2=datai[['年份','豆瓣评分']].groupby(by=['年份']).mean()

    data53=pd.merge(group1,group2,left_index=True,right_index=True)

    data53.columns=['count','score']

    data53['size']=data53['count']*5

    return(data53)

dirt1=dirt(data51,'王晶')

dirt2=dirt(data51,'周伟')

dirt3=dirt(data51,'徐克')

dirt4=dirt(data51,'邓衍成')

from bokeh.plotting import figure,show,output_file

from bokeh.models import HoverTool

from bokeh.models import ColumnDataSource

hover=HoverTool(tooltips=[('该年电影均分','@score'),

                          ('该年电影产量','@count')])

p=figure(plot_width=600,plot_height=400,tools=[hover,'reset,xwheel_zoom,pan'])

source=ColumnDataSource(dirt1)

p.circle(x='年份',y='score',source=source,color='red',legend='王晶',size='size',fill_alpha=0.5)

source1=ColumnDataSource(dirt2)

p.circle(x='年份',y='score',source=source1,color='blue',legend='周伟',size='size',fill_alpha=0.5)

source2=ColumnDataSource(dirt3)

p.circle(x='年份',y='score',source=source2,color='gray',legend='徐克',size='size',fill_alpha=0.5)

source3=ColumnDataSource(dirt4)

p.circle(x='年份',y='score',source=source3,color='green',legend='邓衍成',size='size',fill_alpha=0.5)

show(p)

本文纯属练手文章,旨在通过项目的练习提高数据分析的技能,更熟练的掌握Python,本文在可视化方面的工作做的相对不足,对于更深入的信息还有待进一步去挖掘分析。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容