第15周课堂小测 1. 2000-2016年产量前十电影类型的平均利润。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family']=['simHei']
plt.rcParams['axes.unicode_minus']=False
plt.style.use('ggplot')
df = pd.read_excel('第15周课堂作业(预处理之后的数据).xlsx')
df.head()
df.dropna(inplace=True)
df = df[(2000 <= df['year'])&(df['year'] <= 2016)]
df.reset_index(inplace=True)
#计算出利润 = 收入 - 预算
df['profit'] = df['revenue'] - df['budget']
#建立genres列表,提取电影的类型
genres_set = set()
for genre in df['genres']:
for item in genre.split('|'):
genres_set.add(item)
genres_list = list(genres_set)
for genre in genres_list:
#判断每行 有这个类型 对应类型的列下添个1,加在原df的基础上
df[genre] = df['genres'].str.contains(genre).apply(lambda x:1 if x else 0)
genre_year = df.loc[:,genres_list]
s0 = genre_year.sum().sort_values(ascending = False,inplace = False)
df.drop(genres_list,axis = 1,inplace = True)
n = []
for i in range(0,df.shape[0]):
n.append(len(df.loc[i,'genres'].split('|')))
#s0.index[0:10]为产量前10的电影类型
for genre in s0.index[0:10]:
for i in range(0,df.shape[0]):
if genre in df.loc[i,'genres']:
df.loc[i,genre] = df.loc[i,'profit']/n[i]
genre_top10 = df.loc[:,s0.index[0:10]]
s = round(genre_top10.mean()/10000,2).sort_values(ascending = True,inplace = False)
#画图
plt.figure(figsize=(15,6),dpi=100)
plt.barh(s.index,s.values)
plt.xlabel('平均利润(万元)',fontsize=12)
plt.ylabel('电影题材',fontsize=12)
for i in range(0,10):
plt.text(s.values[i] + 150,s.index[i],
'{}'.format(s.values[i]),ha = 'center',fontsize = 12)
plt.title('2000-2016年产量前十电影类型的平均利润',fontsize=18,x=0.5,y=1.05)
plt.savefig('产量前十电影类型的平均利润.png')
plt.show()