对于以下数据进行处理,索取genres字段的分类情况.
原始数据为csv格式,部分数据如图所示:
导入有关模块
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import json
导入数据,对整体数据有个概览
dn = pd.read_csv('D:/data/tmdb_5000_movies.csv')
print(dn.info())
从图中可以得知genres字段没有缺失,也就不需要对NaN值进行处理
获取genres字段,输出查看结果
dn = dn["genres"]
print(dn)
通过type()方法查看每行的类型,可以得知数据为json格式,接下来就要取所有不重复的类型
genres_list = list(set([i["name"] for j in dn for i in json.loads(j)]))
print(genres_list)
接下来对所有数据进行统计,统计的思路:
构造一个行数为所有数据个数,列数为类型数,字段名为类型的全为0的矩阵,其中每行数据(电影)包含的类型的那一列为1.
取出每部电影的genres
genres_list = []
for i in dn:
genres = []
for j in json.loads(i):
genres.append(j["name"])
genres_list.append(genres)
print(genres_list)
for i in range(len(dn)):
zero_list.loc[i, genres_list[i]] = 1
print(zero_list)
对列求和,排序
zero_list = zero_list.sum(axis=0)
zero_list = zero_list.sort_values()
print(zero_list)
用matplotlib作图
my_font = font_manager.FontProperties(fname='C:/WINDOWS/FONTS/SIMKAI.TTF')
plt.figure(figsize=(20, 8), dpi=80)
# plt.bar(z)
plt.bar(range(zero_list.shape[0]), zero_list.values)
plt.xticks(range(zero_list.shape[0]), zero_list.index)
plt.xlabel("电影类别", fontproperties=my_font)
plt.ylabel("个数", fontproperties=my_font)
plt.title("5000部电影中每个类别下的电影数", fontproperties=my_font)
plt.show()
plt.savefig('./work.png')