美文网首页
国产烂片深度揭秘

国产烂片深度揭秘

作者: xl_07 | 来源:发表于2018-08-20 12:03 被阅读0次

    一、项目背景:

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

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

    豆瓣评分总体分布情况

    从频率分布直方图及箱型图看出,豆瓣电影评分总体分布在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,本文在可视化方面的工作做的相对不足,对于更深入的信息还有待进一步去挖掘分析。

    相关文章

      网友评论

          本文标题:国产烂片深度揭秘

          本文链接:https://www.haomeiwen.com/subject/qvykiftx.html