题目:和什么国家合拍更可能产生烂片?

要求:

① 按照“制片国家/地区”字段分类,筛选不同电影的制片地
② 整理数据,按照“题材”汇总,查看不同题材的烂片比例

提示:

① 删除“制片国家/地区”字段空值的数据
② 删除“制片国家/地区”中不包括“中国大陆”的数据
③ 制片地删除“中国大陆”、“中国”、“台湾”、“香港”等噪音数据
④ 筛选合作电影大于等于3部以上的国家


筛选分析所需的目标数据

根据题目要求,需要从总的数据‘df’中筛选出‘电影名称’、‘制片国家/地区’和‘豆瓣评分’三个字段的数据进行分析,并且‘制片国家/地区’字段内的值不允许为空值,将其存储在‘df_loc’变量中,代码和结果如下:

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import warnings
  5. warnings.filterwarnings('ignore')
  6. from bokeh.plotting import figure,show, output_file
  7. from bokeh.models import ColumnDataSource()
  8. '''
  9. (1)与什么国家合拍更可能产生烂片
  10. '''
  11. df_loc = df[['电影名称', '制片国家/地区', '豆瓣评分']][df['制片国家/地区'].notnull()]

图片.png


数据清洗,去除噪音数据

根据题目要求,需要筛选出‘制片国家/地区’字段中包含‘中国大陆’的电影进行分析,在这里使用contains()函数进行筛选,在下方代码中,contains()函数的作用是,将‘制片国家/地区’字段中,有字符‘中国大陆’的数据保留下来,其他的去除,代码结果如下:

  1. df_loc = df_loc[df_loc['制片国家/地区'].str.contains('中国大陆')]

图片.png


筛选出制片地

按照题目要求,需要分析中国与其他国家合作产生的烂片比例,因此在得到数据中所有的合作国家后,需要将中国相关的数据全部删除,代码、结果如下:

  1. loclst = [] #存储电影拍摄合作国家
  2. for i in df_loc['制片国家/地区'].str.replace(' ','').str.split('/'):
  3. loclst.extend(i)
  4. loclst = list(set(loclst))
  5. #筛选出所有的制片地
  6. loclst.remove('中国')
  7. loclst.remove('中国大陆')
  8. loclst.remove('香港')
  9. loclst.remove('台湾')
  10. #主要是分析中国与其他国家合作产生的烂片,需要去除中国相关的字符

图片.png


计算各个国家的烂片比例

希望能够计算得到和每一个国家合作的烂片比例,需要获得与该国家合作的电影数目,合作的电影数目中豆瓣评分小于4.3的电影数据,步骤、代码、结果如下:

  1. 创建函数‘f2()’用于计算与每一个国家合作的烂片比例
    1. 设置函数需要的参数为data和loci,分别代表事前准备好的数据和国家
    2. 定义一个字典,存放电影合作的国家名车、电影数量、以及烂片比例
    3. 筛选data中字段‘制片国家/地区’数据中包含‘制片国家’loci的数据,将其存储给变量datai
    4. 通过筛选该国家‘豆瓣评分’<4.3的数据,与该国家参拍的总电影数据进行比较,得到烂片比例
    5. 将‘制片国家’、该国参拍的‘电影数量’与‘烂片比例’写入字典中,并返回
  2. 创建一个列表,用于存储函数‘f2()’返回的信息
  3. 循环取出列表‘loclst’中每一个国家,调用函数‘f2()’,将结果存储在列表中
  4. 将结果转化为DataFrame数据格式,并按照要求筛选出合作影片数量大于等于3部以上的影片,然后将其排序,筛选出前20名
    ```python def f2(data, loci): dic_loc_lp = {} datai = data[data[‘制片国家/地区’].str.contains(loci)]

    创建字典,筛选该题材的数据

    lp_pre_i = len(datai[datai[‘豆瓣评分’]<4.3])/len(datai)

    dic_loc_lp[‘locname’] = loci dic_loc_lp[‘loccount’] = len(datai) dic_loc_lp[‘loc_lp_pre’] = lp_pre_i return dic_loc_lp

    创建函数

lst_loc_lp = [] for i in loclst: dici = f2(df_loc, i) lst_loc_lp.append(dici)

df_loc_lp = pd.DataFrame(lst_loc_lp) #将其转换为Datafarme数据格式

df_loc_lp = df_loc_lp[df_loc_lp[‘loccount’]>=3] loc_lp_top20 = df_loc_lp.sort_values(by = ‘loc_lp_pre’, ascending = False).iloc[:20] ```

图片.png