问题:
对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
思路:
重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1
#coding=utf-8
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path="MDB-Movie-Data.csv"
df=pd.read_csv(file_path)
#统计分类的列表
temp_genre_list=df["Genre"].str.split(",").tolist()
temp_list = list(set([i for j in temp_genre_list for i in j])) #set去除重复值,将所有的分类都存放入列表中
#构造全为0的数组
zeros_df=pd.DataFrame(np.zeros((df.shape[0],len(temp_list))),columns=temp_list)
#给每个电影出现的分类位置赋值1
for i in range(df.shape[0]):#将df数组的行数设置为遍历的次数
genres=df["Genre"][i] #genres是Series类型
zeros_df.loc[i,genres.split(",")]=1 #df.loc通过标签索引行数据,并将索引到的地方赋值为1
print(zeros_df)
#统计每个分类的电影的数量和
genre_count=zeros_df.sum(axis=0) #按行相加求和
#排序
genre_count=genre_count.sort_values()
print(genre_count)
#设置横坐标为genre分类
_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) #设置x轴的刻度
#展示图形
plt.show()
结果输出:
1.以genre分类作为列标签的DataFrame数组
2.各个分类的电影统计数量
Musical 5.0
Western 7.0
War 13.0
Music 16.0
Sport 18.0
History 29.0
Animation 49.0
Family 51.0
Biography 81.0
Fantasy 101.0
Mystery 106.0
Horror 119.0
Sci-Fi 120.0
Romance 141.0
Crime 150.0
Thriller 195.0
Adventure 259.0
Comedy 279.0
Action 303.0
Drama 513.0
dtype: float64
3、输出各个分类对应的电影数量的条形图