当前位置:Gxlcms > 数据库问题 > keggle项目 之 TMDb电影最赚钱电影有那特征

keggle项目 之 TMDb电影最赚钱电影有那特征

时间:2021-07-01 10:21:17 帮助过:23人阅读

2)

技术图片

# 把年份作为索引标签
genre_year.index = moviesdf[year]
# 将数据集按年份分组并求和,得出每个年份,各电影类型的电影总数
genresdf = genre_year.groupby(year).sum()
# 查看数据集,tail默认查看后5行的数据
genresdf.tail() 

技术图片

# 汇总电影类型的数量
# axis=0 列求和
genresdfSum = genresdf.sum(axis=0).sort_values(ascending=False)
genresdfSum

技术图片

#数据可视化
#绘制柱状图
# 设置画板大小
plt.figure(figsize=(12,8))
#创建画纸
plt.subplot(111)
#绘图
genresdfSum.sort_values().plot(kind=barh,label=genres)
plt.title("电影类型数量排名统计图")
plt.xlabel(movies number)
plt.ylabel("movies type")
plt.show()

技术图片

#计算百分比
genres_pie = genresdfSum / genresdfSum.sum()

# 设置other类,当电影类型所占比例小于%1时,全部归到other类中
others = 0.01
genres_pie_otr = genres_pie[genres_pie >= others]
genres_pie_otr[Other] = genres_pie[genres_pie < others].sum()

# 所占比例小于或等于%2时,对应的饼状图往外长高一截
explode = (genres_pie_otr <= 0.02) / 10 + 0.04

# 设置饼状图的参数
genres_pie_otr.plot(kind=pie,label=‘‘,startangle=50,shadow=False,figsize=(10,10),autopct=%1.1f%%,explode=explode)

plt.title(各种电影类型所占的比例pie)

技术图片

# 电影类型随时间变化的趋势分析
#绘图
plt.figure(figsize=(12,8))
plt.plot(genresdf,label=genresdf.columns)
#横轴绘制, 格式
plt.xticks(range(1910,2020,5))
#图例
plt.legend(genresdf)
#标签标题
plt.title(电影类型随时间的变化趋势,fontsize=15)
plt.xlabel(year,fontsize=15)
plt.ylabel(movies number,fontsize=15)
#设置格子
plt.grid(True)
plt.show()

技术图片

# 电影类型与利润的关系?
#先求出各个电影的类型的平均利润
# 把电影类型作为索引
mean_genre_profit = pd.DataFrame(index=genres_list)
mean_genre_profit.head(2)
# 求出各种电影类型的平均值
#  mean() 求均值
#groupby   依据某个columns对整个DataFrame对象分组
# 这里 依据某个columns(genre)对另一个columns(profit)数据分组
# 然后取出需要的列 profit
newarray = []
for genre in genres_list:
    newarray.append(moviesdf.groupby(genre,as_index=True)[profit].mean())
#     a=moviesdf.groupby(genre,as_index=True)[‘profit‘]
# newarray    #查看一下
# type(a)
newarray2 = []
for i in range(len(genres_list)):
    newarray2.append(newarray[i][1])
mean_genre_profit[mean_profit] = newarray2
mean_genre_profit.head()

# 绘制电影类型与平均利润关系图
plt.figure(figsize=(12,8))
mean_genre_profit.sort_values(by=mean_profit).plot(kind=barh)
plt.xlabel("avg_profit")
plt.ylabel("movies_type")
plt.title("type & avg_profit")

技术图片

# Universal Pictures(环球影业)和Paramount Pictures(派拉蒙影业)是美国两家电影巨头公司。
# Universal Pictures和Paramount Pictures两家影视公司发行电影的对比情况如何?从数量
# 先解析 production_companies  格式化
moviesdf[production_companies] = moviesdf["production_companies"].apply(json.loads)
#调用刚才自定义函数, 解析
moviesdf[production_companies] = moviesdf["production_companies"].apply(decode)
moviesdf.head(2)

#查询两家公司数据列中是否含有并标记, 发行一部记1
moviesdf[Universal Pictures] = moviesdf["production_companies"].str.contains(Universal Pictures).apply(lambda x:1 if x else 0)
moviesdf[Paramount Pictures] = moviesdf["production_companies"].str.contains(Paramount Pictures).apply(lambda x:1 if x else 0)
moviesdf.head(1)

#统计两家公司数据
a=moviesdf["Paramount Pictures"].sum()
b=moviesdf["Universal Pictures"].sum()
# 转化为一维数组
dict_companies = {"Universal Pictures": b,Paramount Pictures:a}
companies_number = pd.Series(dict_companies)
companies_number
# 可视化 饼图 比较两家公司发行的电影占比
companies_number.plot(kind=pie,label=‘‘,autopct=%11.1f%%)

技术图片

# 分析Universal Pictures和Paramount Pictures两家影视公司电影发行数量的走势, 从时间上看公司发行电影数量
# 将date 作为行索引, 公司作为列索引, 记发行数量
company=moviesdf[[Universal Pictures,Paramount Pictures]]
company.index=moviesdf[year]

companydf=company.groupby(year).sum()
companydf.tail()

plt.figure(figsize=(14,8))
plt.plot(companydf,label = companydf.columns)

技术图片

# 改编电影和原创电影的对比情况如何?
#  keywords列数据格式化
moviesdf[keywords] = moviesdf[keywords].apply(json.loads)
# 调用自定义函数decode处理keywords列数据
moviesdf[keywords] = moviesdf[keywords].apply(decode)
moviesdf[keywords].tail()
# 提取关键字
# 是否基于小说
a = based on novel
moviesdf[if_original] = moviesdf[keywords].str.contains(a).apply(lambda x: no original if x else original)
moviesdf[if_original].value_counts()

original_profit = moviesdf[[if_original,budget,revenue,profit]]
original_profit = original_profit.groupby(by=if_original).mean()
original_profit

# 数据可视化
plt.figure(figsize=(12,8))
original_profit.plot(kind=bar)
plt.title(改编电影与原创电影在预算、收入和利润的比较)
plt.xlabel(original or no original)
plt.ylabel($)

技术图片

# 问题五:电影时长与电影票房及评分的关系
# 电影时长与电影票房的关系
# 绘制散点图
moviesdf.plot(kind=scatter, x=runtime, y=revenue, figsize=(8, 6))
plt.title(电影时长与电影票房的关系,fontsize=15)
plt.xlabel(minute,fontsize=15)
plt.ylabel($,fontsize=15)
plt.grid(True)

技术图片

# 电影时长与评分的关系
moviesdf.plot(kind=scatter, x=runtime, y=vote_average, figsize=(8, 6))
plt.title(电影时长与电影平均评分的关系,fontsize=15)
plt.xlabel(minute,fontsize=15)
plt.ylabel(avg_score,fontsize=15)
plt.grid(True)
plt.show()

技术图片

# 问题六:分析电影关键字

# 利用电影关键字制作词云图
# 建立keywords_list列表
keywords_list = []
for i in moviesdf[keywords]:
    keywords_list.append(i)
    keywords_list = list(keywords_list)

# 把字符串列表连接成一个长字符串
lis = ‘‘.join(keywords_list)
# 使用空格替换中间多余的字符串‘\‘s‘
lis.replace(\‘s,‘‘)

#制作图云

# 生成词云
wc = WordCloud( background_color="black", # 背景颜色
max_words=2000, # 词云显示的最大词数
max_font_size=100, # 字体最大值
random_state=12, # 设置一个随机种子,用于随机着色
)

# 根据字符串生成词云
wc.generate(lis)
plt.figure(figsize=(16, 8))

# 以下代码显示图片
plt.imshow(wc)
plt.axis("off")
plt.show()

技术图片

 四, 总结

  • 从上面的结果可以看出,在所有的电影类型中,Drama(戏剧)类型电影最多,占所有电影类型的18.9%,其次为Comedy(喜剧),占所有电影类型的14.2%。

  • 在所有电影类型中,电影数量排名前5的电影类型分别为:Drama(戏剧)、Comedy(喜剧)、Thriller(惊悚)、Action(动作)、Romance(冒险)。

  • 随着时间的推移,所有电影类型都呈现出增长趋势,尤其是1992年以后各个类型的电影均增长迅速,其中Drama(戏剧)和Comedy(喜剧)增长最快,目前仍是最热门的电影类型。
  • 拍摄Animation、Adventure、Fantasy这三类电影盈利最好,而拍摄Foreign、TV、Movie这三类电影会存在亏本的风险。
  • 随着时间的推移,Universal Pictures和Paramount Pictures公司的电影发行量呈现出增长趋势,尤其是在1995年后增长迅速,其中Universal Pictures公司比Paramount Pictures公司发行的电影数量更多。
  • 改编电影的预算略高于原创电影,但改编电影的票房收入和利润远远高于原创电影, 这可能是改编电影拥有一定的影迷基础。
  • 电影要想获得较高的票房及良好的口碑,电影的时长应保持在90~150分钟内。
  • 通过对电影关键字的分析,电影中经常被提及的词语是女性(woman)、独立(independent),其次是谋杀(murder)、爱情(love)、警察(police)、暴力(violence),可见观众对女性和独立方面题材的电影最感兴趣,其次是是犯罪类和爱情类电影。

keggle项目 之 TMDb电影最赚钱电影有那特征

标签:转换   问题   mil   制作   生成   返回   pandas   总数   汇总   

人气教程排行