Python案例 --电影数据分析
Python案例 --电影数据分析
一、课前准备
二、课堂主题
三、课堂目标
四、案例-----电影数据分析
1、项目背景
2、概览数据
3、分析过程,拆解项目
3.1、读取数据
3.2、数据清洗
3.3、数据分析
1. 电影发展趋势
2. 电影情况分析
3. 盈利问题
4.电影评分及票房因素
五、总结
一、课前准备
1. 复习之前知识点,特别是Pandas;
2. 熟悉数据表;
二、课堂主题
本小节主要通过前面阶段知识内容, 完成Python案例分析。
三、课堂目标
1. 掌握解决项目问题的能力;
2. 掌握Python及科学计算的知识点;
四、案例-----电影数据分析
1、项目背景
互联网电影资料库(Internet Movie Database,简称IMDb)是一个关于电影演员、电影、电视节目、电视明星和电影制作的在线数据库。IMDb的资料中包括了影片的众多信息、演员、片长、内容介绍、分级、评论等。对于电影的评分目前使用最多的就是IMDb评分。
数据源:movie_metadata.csv
字段解释:
-----------------------------------------电影描述字段------------------------------------------
movie_title 电影题目language 语言country 国家 content_rating 电影分级 title_year 电影年份
color 彩 duration 片长genres 电影体裁/类型 plot_keywords:剧情关键字
-----------------------------------------电影描述字段------------------------------------------
-----------------------------------------电影制作字段------------------------------------------
budget:制作成本gross 总收入 aspect_ratio :画布比例
-----------------------------------------电影制作字段------------------------------------------
-----------------------------------------电影阵容字段-----------------------------------------
facenumber_in_poster海报中的人脸数量
director_name 导演director_facebook_likes 导演faceboo丝数
actor_1_name 主演1姓名actor_1_facebook_likes 主演1Faceboo丝数
actor_2_name 主演2姓名actor_2_facebook_likes 演员2 的faceboo丝数
actor_3_name 演员3名字actor_3_facebook_likes 主演3Faceboo丝数
-----------------------------------------电影阵容字段-----------------------------------------
-----------------------------------------电影评论字段-----------------------------------------
num_voted_users 投票人数
num_user_for_reviews 用户的评论数量num_critic_for_reviews 评论家评论数
movie_facebook_likes脸书上被点赞的数量cast_total_facebook_likes Facebook上投喜爱的总数
movie_imdb_link 电影数据链接imdb_score:imdb上的评分
-
----------------------------------------电影评论字段-----------------------------------------
2、概览数据
查看概览数据,熟悉字段,以及相应格式。
3、分析过程,拆解项目
这个项目可以分三步走:
第一步:读取数据。
第二步:清洗数据
第三步:数据分析
3.1、读取数据
读取文件数据。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#加载文件
df = pd.read_csv('movie_metadata.csv')
df
3.2、数据清洗
1. 浏览大概数据
# 查看行列数量
df.shape
# 查看各个列的非空数据量
#NAN统计
df.isna().sum()
#数据整体描述
df.describe()
#数据信息
df.info()
# 简单浏览下数据
df.head()
2. 数据清洗
暴力操作,丢弃所有异常值
data = df.dropna(how='any')
data
3.3、数据分析
1. 电影发展趋势
历年来电影数量走势
#历年来电影数量
data['year'] = data['title_year'].apply(lambda x:x[:4]) data['month'] = data['title_year'].apply(lambda x:x[5:]) data
#历年来电影数量
# 根据年份分组,统计每年上映电影个数
movie_years_count = upby('year')['movie_title'].count() plt.figure()
movie_years_count.plot()
plt.savefig('movie_years_count.png')
plt.show()
历年来电影票房走势
#历年来电影票房走势
movie_years_gross = upby('year')['gross'].sum()/10000
plt.figure()
movie_years_gross.plot()
plt.savefig('movie_years_gross.png')
plt.show()
月份对电影数量影响
#月份电影数量走势
movie_month_count = upby('month')['movie_title'].count() plt.figure()
movie_month_count.plot()genre
plt.savefig('movie_month_count.png')
plt.show()
月份对电影票房影响
#月份票房走势
movie_month_gross = upby('month')['gross'].sum()/10000
plt.figure()
movie_month_gross.plot()
plt.savefig('movie_years_gross.png')
plt.show()
各国家电影数量
#各国家电影数量
country_years_count = upby('country')['movie_title'].count() country_years_count
2. 电影情况分析
电影时长分布
#电影时长分布
movie_duration = data.duration
movie_duration
# 2)创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 3)绘制直方图
# 设置组距
distance = 5
# 计算组数
group_num = int((max(movie_duration ) -min(movie_duration )) /distance)
# 绘制直方图
# time X轴坐标, bins就是组值也就是标签
plt.hist(movie_duration , bins=group_num)
print(int(min(movie_duration)))
print(int(max(movie_duration)))
# 修改x轴刻度显示
# icks(range(37,330)[::5])
# 添加网格显示
# 添加x, y轴描述信息
plt.xlabel("电影时长大小")
plt.ylabel("电影的数据量")
# 4)显示图像
plt.show()
电影类型分析
从数据中看出,每个电影可以对应好几种题材,需要先将数据处理为一个电影对应一个类型,否则直接按照genres分组,得出的是同时对应这几个类型的数据
例如:movie1对应 Action|Adventure|Fantasy|Sci-Fi 这四个类型,需要将它处理为四条数据,分别对应一个类型,如movie1—>Action, movie1—>Adventure, movie1—>Fantasy, movie1—> Sci-Fi
# 构建一个新的dataframe,只需要类别和票房这两个特征
genre_data = pd.DataFrame(columns = ['genre','gross'])
# data.iterrows:使用迭代器的方式读取数据,返回数字索引(int)和每一行的数据(series)
for i, row_data in data.iterrows():
# 使用split将genres分割
genres = row_data['genres'].split('|')
n_genres = len(genres)
# 构建一个空字典,用以保存genre和gross的值
dict_obj = {}
dict_obj['gross'] = [row_data['gross']] *n_genres
print(dict_obj['gross'])
dict_obj['genre'] = genres
# 将字典转为dataframe类型
genre_df = pd.DataFrame(dict_obj)
# DataFrame的append将genre_df的数据添加进genre_data
genre_data = genre_data.append(genre_df)
# 将最终的数据写入csv保存
_csv('genre_data.csv',index=None)
按题材分类,统计个数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论