根据任务分析,下面是实现代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei' # 显示汉字
plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('ans/豆瓣电影Top250_已预处理.xlsx') # 打开预处理后的数据文件
# 增加年代列,用cut()进行年代划分
bins = [1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020]
labels = ['30年代', '40年代', '50年代', '60年代', '70年代', '80年代', '90年代', '21世纪00年代', '21世纪10年代']
df['年代'] = pd.cut(df['发行时间'].astype(int), bins=bins, labels=labels)
# 分组统计不同年代电影数量并输出
grouped = df.groupby('年代')['电影名称'].count()
print(grouped)
# 绘制图形
fig, ax = plt.subplots()
ax.pie(grouped.values, labels=grouped.index, autopct='%1.1f%%', startangle=90)
ax.set_title('不同年代电影发行数量图')
ax.legend(loc='upper left')
plt.axis('equal')
# 保存图形
plt.savefig('step8/不同年代电影数量图.png')
plt.show()
解析如下:
使用 pd.cut() 方法将 “发行时间” 列的数据划分为不同年代,将结果保存在 “年代” 列中。 bins 参数指定每个年代的边界,labels 参数指定每个年代的标签。
使用 groupby() 方法对 “年代” 列进行分组,使用 count() 方法计算每个年代的电影数量。
使用 plt.subplots() 方法创建一个包含单个子图的图形,使用 ax.pie() 方法绘制饼图。 grouped.values 和 grouped.index 参数提供饼图的数据和标签,autopct 参数指定饼图内标签的格式,startangle 参数指定饼图的起始角度。
使用 ax.set_title() 方法设置图形标题,使用 ax.legend() 方法添加图例,使用 plt.axis('equal') 方法使饼图比例相等。
使用 plt.savefig() 方法保存图形,使用 plt.show() 方法显示图形。
|