• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

Pandas-09-综合案例

开发技术 开发技术 2周前 (05-02) 5次浏览

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()

Pandas-09-综合案例

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)

Pandas-09-综合案例

这样画出的图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()

Pandas-09-综合案例

3.3 问题3

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

思路分析

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

    • 获取分类类别

      # 将"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)
      

      Pandas-09-综合案例

    • 遍历每一部电影,把分类出现的列的值置为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()
      

      Pandas-09-综合案例

  2. 方法二

    • 获取分类类别并用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)
      

      Pandas-09-综合案例

    • 循环遍历未去重前的分类列表genre_list_all,将出现的分类数量加1

      for 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))
      

      Pandas-09-综合案例


程序员灯塔
转载请注明原文链接:Pandas-09-综合案例
喜欢 (0)