fishhh03 发表于 2022-12-26 11:00:10

有没有大佬哇救救孩子的python作业吧

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')#打开预处理后的数据文件
## 请在下面补充代码,实现:增加年代列,分组统计不同年代电影数量并输出,绘制图形


## 补充代码结束
plt.show()
plt.savefig('step8/不同年代电影数量图.png')

本关任务:编写一个程序,统计不同年代优质电影发行的数量并绘制不同年代发行的电影数量柱状图。

任务分析:
1.每十年为一个年代,数据表中电影共分'30年代','40年代','50年代','60年代','70年代','80年代','90年代','21世纪00年代','21世纪10年代'九个年代。

在数据表中增加“年代”列,用cut()进行年代划分,根据每部电影的发行年代填充“年代”数据项的值。
df['发行时间'].astype(int) 可以将“发行时间”列的数据类型由str转为int。
2.用“年代”列进行分组统计,组内计算电影数量。

3.绘制年代电影数量饼图,保存在'step8/不同年代电影数量图.png'文件。图形设置如下:

标题为“不同年代电影发行数量图”
在左上角显示图例
需要在饼图外显示标签,饼图内显示占比,占比保留一位小数。

Mike_python小 发表于 2022-12-26 20:20:32

来论坛就是抄作业来了?

不二猫猫 发表于 2023-3-11 16:56:21

根据任务分析,下面是实现代码:

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 =
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() 方法显示图形。
页: [1]
查看完整版本: 有没有大佬哇救救孩子的python作业吧