微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Pandas实战】1000部流行电影数据分析

电影数据案例分析

需求

现在我们有一组从2006年到20161000部最流行的电影数据

数据来源https://www.kaggle.com/damianpanek/sunday-eda/data

  • 问题1:我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取
  • 问题2:对于这一组电影数据,如果我们想ratingruntime的分布情况,应该如何呈现数据?
  • 问题3:对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?

实现

首先获取导入包,获取数据

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline解决某些平台,matplotlib 不能使用的情况。

#文件的路径 
path = "./data/IMDB-Movie-Data.csv" 
#读取文件 
df = pd.read_csv(path)

在这里插入图片描述

在这里插入图片描述

问题一

我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取

  • 得出评分的平均分
    使用mean函数
df["rating"].mean()
  • 得出导演人数信息
    求出唯一值,然后进行形状获取
## 导演的人数 
# df["Director"].unique().shape[0] 
np.unique(df["Director"]).shape[0]

在这里插入图片描述

问题二

对于这一组电影数据,如果我们想ratingRuntime (Minutes)的分布情况,应该如何呈现数据?

  • 直接呈现,以直方图的形式

选择分数列数据,进行plot

# rating分布
movie['rating'].plot(kind='hist')

在这里插入图片描述

进行绘制直方图

plt.figure(figsize=(20,8),dpi=80) 
plt.hist(df["rating"].values,bins=20) 
plt.show()

修改刻度的间隔

# 求出最大最小值 
max_ = df["rating"].max() 
min_ = df["rating"].min() 
# 生成刻度列表 
t1 = np.linspace(min_,max_,num=21) 
# [ 1.9 2.255 2.61 2.965 3.32 3.675 4.03 4.385 4.74 5.095 5.45 5.805 6.16 6.515 6.87 7.225 7.58 7.935 8.29 8.645 9. ] 
# 修改刻度 
plt.xticks(t1) 
# 添加网格 
plt.grid()

在这里插入图片描述

  • Runtime (Minutes) 进行分布展示
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.hist(movie['Runtime (Minutes)'].values, bins=20)

# 2.1添加刻度
max_ = movie['Runtime (Minutes)'].max()
min_ = movie['Runtime (Minutes)'].min()

t1 = np.linspace(min_, max_, 21)

plt.xticks(t1, fontsize=15)

# 2.2添加网格
plt.grid(linestyle='--')

# 2.3添加x,y轴描述
plt.xlabel('Runtime (Minutes)', fontsize=20)
plt.ylabel('Count', fontsize=20)

# 3.显示图像
plt.show()

在这里插入图片描述

问题三

对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?

思路分析

  • 1、创建一个全为0dataframe,列索引置为电影的分类temp_df
  • 2、遍历每一部电影,temp_df中把分类出现的列的值置为1
  • 3、求和

1、创建一个全为0的dataframe,列索引置为电影的分类,temp_df

# 进行字符串分割 
temp_list = [i.split(",") for i in df["Genre"]] 
# 获取电影的分类 
genre_list = np.unique([i for j in temp_list for i in j]) 

# 增加新的列 
temp_df = pd.DataFrame(np.zeros([df.shape[0],genre_list.shape[0]]),columns=genre_list)

在这里插入图片描述


2、遍历每一部电影,temp_df中把分类出现的列的值置为1

for i in range(1000): 
	#temp_list[i] ['Action','Adventure','Animation'] 	
	temp_df.ix[i,temp_list[i]]=1 
print(temp_df.sum().sort_values())

DataFrame.ix[]:混合索引被淘汰可以使用loc,iloc进行替换实现相同效果

参考Pandas二次学习- 回炉重造(进阶)

在这里插入图片描述

for i in range(1000):
    temp_movie.iloc[i, temp_movie.columns.get_indexer(temp_list[i])] = 1

在这里插入图片描述


3、求和,绘图

# colormap:使显示颜色更好看
temp_df.sum().sort_values(ascending=False).plot(kind="bar",figsize=(20,8),fontsize=20,colormap="cool")

在这里插入图片描述


在这里插入图片描述


加油!

感谢!

努力!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐