一、项目背景
本数据报告以IMDB-Movie为数据集,通过相关的指标对电影进行分析,具体指标包括:电影时长和评分分布,评分平均数,导演人数,演员人数等,本例主要围绕pandas在实际中的应用为主(字符串离散化、数据合并、数据分组聚合,数据索引)。
二、数据来源
链接:https://pan.baidu.com/s/1P6MF3JEMJdC1I-sg5bCsAw
提取码:enz7
三、提出问题
1.电影时长分布
2.评分分布
3.评分平均数
4.导演人数
5.演员人数
四、理解数据
# coding:utf-8
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
file_path = r'.\IMDB-Movie-Data.csv'
df = pd.read_csv(file_path)
# 查看数据
df.head(5)
df.info()
image.png
五、电影时长分布
# 查看电影时长
runtime_data = df["Runtime (Minutes)"]
# 创建画布
plt.figure(figsize=(20,8),dpi=80)
# 最大值 最小值
max_ = runtime_data.max()
min_ = runtime_data.min()
num_bin = (max_-min_)//5
num_bin
# 绘制图像
plt.hist(runtime_data,num_bin)
# 添加刻度
plt.xticks(range(min_,max_+5,5))
# 添加网格
plt.grid()
plt.show()
image.png
六 、评分分布
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.hist(df["Rating"].values, bins=20)
# 2.1 添加刻度
max_ = df["Rating"].max()
min_ = df["Rating"].min()
t1 = np.linspace(min_, max_, num=21)
plt.xticks(t1)
# 2.2 添加网格
plt.grid()
# 3.显示
plt.show()
image.png
七、评分平均数、导演人数、演员人数
# 查看评分平均数
df["Rating"].mean()
# 查看导演人数
np.unique(df["Director"]).shape[0]
len(set(df["Director"].tolist()))
# 查看演员人数
num = df["Actors"].str.split(',').tolist()
actor_nums = [j for i in num for j in i]
len(set(actor_nums))
结果再次不显示了
八、统计电影分类情况
一部电影多个分类,要统计电影分类情况
df["Genre"]
image.png
思路:取每一个分类名为列名,行填充为0,当属于分类时,替换成1,如下:
image.png# 统计分类的列表
temp_list = df["Genre"].str.split(',').tolist()
temp_list = [j for i in temp_list for j in i]
genre_list = list(set(temp_list))
# 构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)
zeros_df
image.png
# 给每个电影出现的分类的位置赋值1
for i in range(df.shape[0]):
zeros_df.loc[i,temp_lists[i]] = 1
zeros_df.head(5)
image.png
# 每个分类电影的和
new_zeros = zeros_df.sum(axis=0)
new_zeros
image.png
# 每个分类电影的和
new_zeros = zeros_df.sum(axis=0)
# 排序 画图
genre_count = new_zeros.sort_values(ascending=False)
x_ = genre_count.index
y_ = genre_count.values
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(x_)),y_,width=0.4,color="orange")
plt.xticks(range(len(x_)),x_)
plt.show()
image.png
网友评论