Pandas综合案例

现在我们有一组从2006年到2016年1000部最流行的电影数据
数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data

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

运行结果



import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]

# 问题1:我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
movie = pd.read_csv("../data/IMDB-Movie-Data.csv")
# 平均分
pjf = movie["Rating"].mean()
print('电影评分的平均分:')
print(pjf)
# 导演的人数去重
# df["Director"].unique().shape[0]
num = np.unique(movie["Director"]).shape[0]
print('导演人数:')
print(num)


# 问题2:对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?
movie["Rating"].plot(kind='hist', figsize=(20, 8))
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(movie["Rating"].values, bins=20)
# 求出最大最小值
max_ = movie["Rating"].max()
min_ = movie["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()
plt.savefig("../img/pandas_case_1.png")
plt.show()


plt.figure(figsize=(20,8),dpi=80)
plt.hist(movie["Runtime (Minutes)"].values, bins=20)
# 求出最大最小值
max_ = movie["Runtime (Minutes)"].max()
min_ = movie["Runtime (Minutes)"].min()
#  生成刻度列表
t1 = np.linspace(min_, max_, num=21)
# 修改刻度
plt.xticks(np.linspace(min_,max_,num=21))
# 添加网格
plt.grid()
plt.savefig("../img/pandas_case_2.png")
plt.show()


# 问题3:对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
# 1、创建一个全为0的dataframe,列索引置为电影的分类,temp_df
# 进行字符串分割
temp_list = [i.split(",") for i in movie["Genre"]]
# 获取电影的分类
genre_list = np.unique([i for j in temp_list for i in j])

# 增加新的列
temp_df = pd.DataFrame(np.zeros([movie.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())
# 3、求和,绘图
sum = temp_df.sum().sort_values(ascending=False).plot(kind="bar", figsize=(20, 8), fontsize=20, colormap="cool")
sum.plot()
plt.savefig("../img/pandas_case_3.png")
plt.show()

原文地址:https://www.cnblogs.com/yeyueweiliang/p/14300263.html