【python数据分析实战】国产烂片深度揭秘(3)——和什么国家更容易产生烂片?

1 数据筛选

1)首先完成的是选取字段中包含‘中国大陆’的电影,这样自然就只剩下了中国大陆自己拍摄的电影以及合拍的电影

df_loc = df[['电影名称','制片国家/地区','豆瓣评分']][df['制片国家/地区'].notnull()]
df_loc = df_loc[df_loc['制片国家/地区'].str.contains('中国大陆')]

2)筛选出电影合作的不同国家,去重

loclst = []
for i in df_loc['制片国家/地区'].str.replace(' ','').str.split('/'):
    #print(i)
    loclst.extend(i)
    loclst = list(set(loclst))
print(loclst)

–> 输出结果为:(这一步和上一篇选择不同题材的电影字段的处理是一致的)

['南非', '法国', '英国', '中国', '马来西亚', '中国大陆', '澳大利亚', '比利时', '朝鲜', '台湾', '韩国',
 '新加坡', '美国', '俄罗斯', '泰国', '加拿大', '日本', '西班牙', 'Malaysia', '蒙古国', '印度', '新西兰',
  '香港', '以色列', '卢森堡', '德国', '丹麦']

3) 对于上述列表中的数据需要进行处理

比如,这里首先要去掉的是‘中国大陆’和‘中国’两个内容,其次由于研究的是和什么国家的合作,就要去掉的‘台湾’和‘香港’两个数据,最后要处理的就是‘马来西亚’‘Malaysia’两个数据,这两个本身就是一个国家,只是表述的方式不一样,这里需要将两个数据合并成为一个数据

loclst.remove('中国')
loclst.remove('中国大陆')
loclst.remove('台湾')
loclst.remove('Malaysia')#注意这里删除的数据,因为马来西亚和这个英文名重名了,而且还需要对这里的数据再进行清洗
loclst.remove('香港')
print(loclst)

–> 输出结果为:(去除噪音数据)

['南非', '法国', '英国', '马来西亚', '澳大利亚', '比利时', '朝鲜', '韩国', '新加坡', '美国', '俄罗斯', 
'泰国', '加拿大', '日本', '西班牙', '蒙古国', '印度', '新西兰', '以色列', '卢森堡', '德国', '丹麦']

既然上面是把'Malaysia'数据给删除了,那么在原始数据上就应该把这个数据给合并到'马来西亚'对应的数据上

print(df_loc[df_loc['制片国家/地区'].str.contains('Malaysia')],'\n')
#输出包含'Malaysia'的电影数据
print(df_loc[df_loc['制片国家/地区'].str.contains('马来西亚')],'\n')
#输出包含'马来西亚'的电影数据
df_loc['制片国家/地区'] = list(map(lambda x:x.replace('Malaysia','马来西亚'),df_loc['制片国家/地区'] ))
#将'Malaysia'的数据转换为'马来西亚'数据
print(df_loc[df_loc['制片国家/地区'].str.contains('马来西亚')])
#最后汇总输出

–> 输出结果为:(这一步完成的就是特殊数据的处理,也是这部分最重要的环节)

    		  电影名称       制片国家/地区 	    豆瓣评分
1738 	 		夜·明   		中国大陆 / Malaysia  7.3 

              电影名称       制片国家/地区  		豆瓣评分
547           后备空姐   	中国大陆 / 马来西亚   2.9
944  	海鲜陆战队 SeeFood   中国大陆 / 马来西亚   5.8 

               电影名称       制片国家/地区 		 豆瓣评分
547            后备空姐     中国大陆 / 马来西亚    2.9
944   海鲜陆战队 SeeFood    中国大陆 / 马来西亚    5.8
1738            夜·明       中国大陆 / 马来西亚    7.3

2 封装函数生成DataFrame数据

1) 这里的操作可以直接将f1函数中的代码复制过来,将里面的type修改为loc即可,如下

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['loc_name'] = loci
    dic_loc_lp['loc_count'] = len(datai)
    dic_loc_lp['loc_lp_pre'] = lp_pre_i
    return dic_loc_lp

2) 接着就是遍历循环处理后的列表数据,然后调用函数,并对合作的单个国家的相关情况进行输出,并保存到新的列表中以便后面生成DataFrame

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

–> 输出结果为:

{'loc_name': '南非', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '法国', 'loc_count': 10, 'loc_lp_pre': 0.1}
{'loc_name': '英国', 'loc_count': 4, 'loc_lp_pre': 0.75}
{'loc_name': '马来西亚', 'loc_count': 3, 'loc_lp_pre': 0.3333333333333333}
{'loc_name': '澳大利亚', 'loc_count': 3, 'loc_lp_pre': 0.0}
{'loc_name': '比利时', 'loc_count': 2, 'loc_lp_pre': 0.5}
{'loc_name': '朝鲜', 'loc_count': 1, 'loc_lp_pre': 1.0}
{'loc_name': '韩国', 'loc_count': 19, 'loc_lp_pre': 0.15789473684210525}
{'loc_name': '新加坡', 'loc_count': 3, 'loc_lp_pre': 0.3333333333333333}
{'loc_name': '美国', 'loc_count': 21, 'loc_lp_pre': 0.3333333333333333}
{'loc_name': '俄罗斯', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '泰国', 'loc_count': 2, 'loc_lp_pre': 0.5}
{'loc_name': '加拿大', 'loc_count': 6, 'loc_lp_pre': 0.0}
{'loc_name': '日本', 'loc_count': 14, 'loc_lp_pre': 0.07142857142857142}
{'loc_name': '西班牙', 'loc_count': 1, 'loc_lp_pre': 1.0}
{'loc_name': '蒙古国', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '印度', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '新西兰', 'loc_count': 1, 'loc_lp_pre': 1.0}
{'loc_name': '以色列', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '卢森堡', 'loc_count': 1, 'loc_lp_pre': 0.0}
{'loc_name': '德国', 'loc_count': 4, 'loc_lp_pre': 0.25}
{'loc_name': '丹麦', 'loc_count': 1, 'loc_lp_pre': 0.0}

3) 生成DataFrame数据,然后取合作次数大于3次的烂片排行前20的数据

df_loc_lp = pd.DataFrame(lst_loc_lp)
df_loc_lp = df_loc_lp[df_loc_lp['loc_count']>=3]
loc_lp_top20 = df_loc_lp.sort_values(by = 'loc_lp_pre',ascending = False).set_index(np.arange(len(df_loc_lp)))
print(loc_lp_top20)

–> 输出结果为:(实际上只有十条满足的数据)
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值