Pandas-09-综合案例
1. 需求分析
现在有一组从2006年到2016年1000部最流行的电影数据
数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data
- 问题1:我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
- 问题2:对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?
- 问题3:对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
2. 实现
首先导入数据:
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
movie.head()

2.1 问题1
我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
-
获取评分的平均分
movie["Rating"].mean() 6.723199999999999 -
获取导演人数
np.unique(movie["Director"]).shape[0] 644
2.2 问题2
对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?
想直接呈现,以直方图的形式
对 Rating 列进行画图展示:
movie["Rating"].plot(kind="hist", bins=20)

这样画出的图x轴刻度会有问题(刻度不齐等),这是就要进行手动调整。
对x轴刻度进行调整
plt.figure(figsize=(20, 8), dpi=60)
plt.hist(movie["Rating"].values, bins=20)
# 求出最大最小值
max_ = movie["Rating"].max()
min_ = movie["Rating"].min()
# 注意要生成 21 个刻度值
t1 = np.linspace(min_, max_, num=21)
# 修改刻度
plt.xticks(t1)
plt.grid()
plt.show()

3.3 问题3
对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
思路分析
- 思路
- 1、创建一个全为0的
dataframe,列索引置为电影的分类,temp_df - 2、遍历每一部电影,
temp_df中把分类出现的列的值置为1 - 3、求和
- 1、创建一个全为0的
-
方法一
-
获取分类类别
# 将"Genre"列的分类放在列表中 genre_list = [j for i in movie["Genre"] for j in i.split(",")] # 去除重复的分类 genre_list = np.unique(genre_list) genre_list array(['Action', 'Adventure', 'Animation', 'Biography', 'Comedy', 'Crime', 'Drama', 'Family', 'Fantasy', 'History', 'Horror', 'Music', 'Musical', 'Mystery', 'Romance', 'Sci-Fi', 'Sport', 'Thriller', 'War', 'Western'], dtype='<U9') -
创建一个全为0的dataframe,列索引置为电影的分类
# 行数为电影行数,列数为类别数量 genre_df = np.zeros([movie.shape[0], genre_list.shape[0]]) genre_df = pd.DataFrame(genre_df, columns=genre_list, index=movie.index)
-
遍历每一部电影,把分类出现的列的值置为1
genre_tmp = [i.split(",") for i in movie["Genre"]] for i in range(movie.shape[0]): genre_df.loc[i, genre_tmp[i]] = 1 # 排序 genre_statistics = genre_df.sum().sort_values(ascending=False) -
画出图像
plt.figure(figsize=(20, 8), dpi=60) genre_statistics.plot.bar()
-
-
方法二
-
获取分类类别并用set方法去重
genre_list_all = [j for i in movie["Genre"] for j in i.split(",")] genre_list = set(genre_list_all) -
创建一个全为0的dataframe,列索引为每种类别出现的次数
genre_df = pd.DataFrame(np.zeros(len(genre_list)), index=genre_list, dtype=np.int32)
-
循环遍历未去重前的分类列表
genre_list_all,将出现的分类数量加1for i in genre_list_all: genre_df.loc[i, 0] += 1 -
按降序排序后将列名命名为数量
genre_df = genre_df.sort_values(by=0, ascending=False) genre_df.rename(columns={0: "数量"}, inplace=True) -
画图
genre_df.plot.bar(figsize=(20, 8))
-

浙公网安备 33010602011771号