为更好地提供数据支持的电影制作依据,要求大家以TMDB 5000 Movie Dataset数据集为研究对象,完成以下数据可视化任务:2000-2016年期间产量最高五家电影公司出产电影的平均评分。
思路分析:
1.提取出年份
2.统计每家公司的电影产量,排序,取出最高的5家公司
3. 算排名最高的那5家公司的电影的 总评分
4.每一家公司的 总评
分/电影总数 = 平均评分
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.family']=['simHei']
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('第14周课后作业(预处理之后的数据).xlsx')
df.head()
#有个别行数数据处理时不是nan,但为空列表,提取后为nan
df.dropna(inplace=True)
df = df[(2000 <= df['year'])&(df['year'] <= 2016)]
df.reset_index(inplace = True)
df_org_col = df.columns
#查看df_org_col内容
df_org_col
Index(['index', 'Unnamed: 0', 'production_companies', 'title', 'vote_average',
'year'],
dtype='object')
#建立companies列表,提取公司名称
companies_set = set()
for company in df['production_companies'].str.split('|'):
for item in company:
companies_set.add(item)
companies_list = list(companies_set)
for company in companies_list:
#判断每行 有这个公司 对应类型的列下添个1
df[company] = df['production_companies'].str.contains(company).apply(lambda x: 1 if x else 0)
#计算每个公司在2000-2016期间产出电影总数量并排序
companies_count = df.loc[:,companies_list].sum().sort_values(ascending = False,inplace = False)
#查看companies_count内容
companies_count
Universal 214
Warner Bros. 213
Universal Pictures 202
Columbia Pictures 190
Paramount Pictures 150
...
InDigEnt (Independent Digital Entertainment) 0
Parkway Pictures (I) 0
Silver Bullet Productions (II) 0
Filmförderungsanstalt (FFA) 0
Norddeutscher Rundfunk (NDR) 0
Length: 4220, dtype: int64
df = df.loc[:,df_org_col]
top5_companies = companies_count.index[0:5]
for company in top5_companies:
for i in range(0,df.shape[0]):
if company in df.loc[i,'production_companies']:
df.loc[i,company] = df.loc[i,'vote_average']
df
#计算出平均分
s = round(df.loc[:,top5_companies].mean(),3).sort_values(ascending = False,inplace = False)
s
Warner Bros. 6.295
Universal Pictures 6.194
Universal 6.191
Columbia Pictures 6.066
Paramount Pictures 6.054
dtype: float64
#画图
colors = ['#FF0000','#FF1493','#00BFFF','#9932CC','#0000CD']
#设置大小 像素
plt.figure(figsize=(15,6),dpi=100)
#设置中文显示
mpl.rcParams['font.family'] = 'SimHei'
plt.style.use('ggplot')
#绘制柱形图 设置柱条的宽度和颜色
plt.barh(s.index,s.values,height=0.6,color=colors[::-1])
plt.xlabel('平均评分',fontsize=12)
plt.ylabel('电影公司',fontsize=12,color='red')
for i in range(0,5):
plt.text(s.values[i]+0.3,s.index[i],
'{}'.format(s.values[i]),ha='center',fontsize=12)
plt.title('2000-2016年期间产量最高的5家电影公司产出电影的平均评分',fontsize=18,x=0.5,y=1.05)
plt.savefig('14周产量前5公司平均评分.png')
plt.show()