8周课后 2000-2016年期间三家影视公司每制作的电影数量

为更好地提供数据支持的电影制作依据,要求大家以TMDB 5000 Movie Dataset数据集为研究对象,完成以下数据可视化任务:2000-2016年期间Twentieth Century Fox Film Corporation、Universal Pictures和Paramount Pictures三家影视公司每年制作的电影数量

import json
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt             # 导入绘图库

plt.rcParams['font.family']='SimHei'        # 设置黑体字体以正常显示中文
plt.rcParams['axes.unicode_minus']=False   # 正常显示负号
plt.rcParams['font.size'] = 13

import warnings
# 忽略警告。pandas很多时候会弹出警告,说某条命令即将在新版本中过期,建议换用新命令。如不想看到警告信息,可用此设置忽略
warnings.filterwarnings('ignore') 

 (1)预处理数据阶段

df = pd.read_csv('tmdb_5000_movies.csv')
df1 = df[['original_title','genres','release_date','runtime','production_companies']]
#修改特定列的值
df1.loc[2656,'runtime'] = 98.0
df1.loc[4140,'runtime'] = 81.0
df1.loc[4553,'release_date'] = '2014-06-01'

#查看df1的内容

df1['genres'] = df1['genres'].apply(json.loads)
df1['production_companies'] = df1['production_companies'].apply(json.loads)

def decode(col):
    genre = []
    for item in col:
        genre.append(item['name'])
    return '/'.join(genre)
df1['genres'] = df1['genres'].apply(decode)
df1['production_companies'] = df1['production_companies'].apply(decode)

#提取release_date的年份
df1['release_date'] = pd.to_datetime(df1['release_date']).dt.year

#修改列的名称
col = {'release_date':'year'}
df1.rename(columns = col,inplace=True)
df1['year'].apply(int).head() #转为整数

df1.to_excel('8周课后预处理数据.xlsx')

(2)利用预处理好的数据进一步处理并绘图

df = pd.read_excel('8周课后预处理数据.xlsx')

#有个别行数据处理时不是nan但为空列表,提取后为nan
df.dropna(inplace=True) 
#筛选出2000年到2016年的数据
df = df[(df['year'] >= 2000)&(df['year'] <= 2016)]
df.reset_index(inplace=True)

#查看此时df数据内容

three_companies = ['Twentieth Century Fox Film Corporation',
                  'Universal Pictures','Paramount Pictures']

for company in three_companies:
    #判断每行 有这个公司 对应公司的列下添个1
    df[company] = df['production_companies'].str.contains(company).apply(lambda x:1 if x else 0)

company_year = df.loc[:,three_companies]
#将年份作为索引标签
company_year.index = df['year']
#将数据集按年份分组并求和,得出每个年份,各电影类型的电影总数
three_companies_df = company_year.groupby('year').sum()
three_companies_df.columns = ['T','U','P']

#绘图
x = range(0,17)
fig,ax = plt.subplots(1,1,figsize=(14,8))
ax.plot(x,three_companies_df['T'],marker='^',linewidth=1.5,label='Twentieth Century Fox Film Corporation')
ax.plot(x,three_companies_df['U'],marker='o',linewidth=1.5,label='Universal Pictures')
ax.plot(x,three_companies_df['P'],marker='s',linewidth=1.5,label='Paramount Pictures')

a = 0
for y_h,y_l,y_k in zip(three_companies_df['T'],three_companies_df['U'],three_companies_df['P']):
    plt.text(a,y_h + 0.1,y_h,family='SimHei',fontsize=12,fontstyle='normal')
    plt.text(a,y_l + 0.1,y_l,family='SimHei',fontsize=12,fontstyle='normal')
    plt.text(a,y_k + 0.1,y_k,family='SimHei',fontsize=12,fontstyle='normal')
    a += 1

ax.set_title('8周课后2000-2016年期间三家公司制作电影的数量')
ax.set_xlabel('年份')
ax.set_ylabel('电影数量')
ax.tick_params(direction='in',length=6,width=2,labelsize=12)
ax.set_xticks(x)
ax.set_xticklabels(three_companies_df.index,rotation=20,fontsize=14)

plt.legend()
plt.savefig('8周课后2000-2016年期间三家公司制作电影的数量.png')
plt.show()

#折线图效果

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值