读取“成绩表.xlsx”文件,按性别分组统计人数,并求两组总评成绩的平均值,使用matplotlib库绘制柱状图进行对比
时间: 2023-12-16 20:06:10 浏览: 73
以下是实现代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取Excel文件
df = pd.read_excel('成绩表.xlsx')
# 按性别分组
grouped = df.groupby('性别')
# 统计人数和平均总评成绩
count = grouped['姓名'].count()
mean = grouped['总评成绩'].mean()
# 绘制柱状图
plt.bar(['男', '女'], count, color='b', alpha=0.5, label='人数')
plt.bar(['男', '女'], mean, color='r', alpha=0.5, label='平均总评成绩')
plt.legend()
plt.show()
```
这段代码会读取名为“成绩表.xlsx”的文件,并按性别分组统计人数和平均总评成绩,最后使用matplotlib库绘制柱状图进行对比。其中,蓝色柱子表示人数,红色柱子表示平均总评成绩。你可以根据需要修改文件名、分组字段、统计字段等。
相关问题
读取“成绩表.xlsx”文件,将总评成绩按分数段划分成分数等级,根据分布状况分组统计人数,使用matplotlib库绘制饼图
好的,首先需要安装 `pandas` 和 `matplotlib` 库,你可以在命令行中使用以下命令进行安装:
```
pip install pandas matplotlib
```
接下来,我将提供一个示例代码,你可以根据自己的需求进行修改:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取 Excel 文件
df = pd.read_excel('成绩表.xlsx')
# 计算每个人的总评成绩
df['总评成绩'] = df['语文'] + df['数学'] + df['英语']
# 分数段划分成分数等级
bins = [0, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
labels = ['<200', '200-300', '300-400', '400-500', '500-600', '600-700', '700-800', '800-900', '>=900']
df['分数等级'] = pd.cut(df['总评成绩'], bins=bins, labels=labels)
# 统计每个分数等级的人数
grouped = df.groupby('分数等级').size()
# 绘制饼图
plt.figure(figsize=(6, 6))
plt.pie(grouped, labels=grouped.index, autopct='%.1f%%')
plt.title('总评成绩分布状况')
plt.show()
```
这段代码会读取名为“成绩表.xlsx”的 Excel 文件,计算每个人的总评成绩,并将其按照一定的分数段划分成分数等级。接着,统计每个分数等级的人数,并使用 `matplotlib` 库绘制一个饼图来展示总评成绩的分布状况。你可以根据实际情况进行修改和优化。
现有一个名为“成绩表.xlsx”的文件,列名为学号、姓名、性别、加分、课堂表现、缺勤次数、考勤、作业、实验成绩、平时成绩、期末成绩、总评成绩,用Python实现:(1)分组分析:按性别分组统计人数,并求两组总评成绩的平均值;(2)分布分析:将总评成绩进行划分,根据分布状况分组统计人数;(3)交叉分析:对性别和分数等级进行交叉分析,求解不同性别中不同分数等级的人数。
好的,这里给出一个Python实现,需要用到pandas和numpy库:
```python
import pandas as pd
import numpy as np
# 读取Excel文件
df = pd.read_excel('成绩表.xlsx')
# 按性别分组统计人数,并求两组总评成绩的平均值
grouped = df.groupby('性别')
gender_count = grouped.size() # 性别分组人数
avg_score = grouped['总评成绩'].mean() # 性别分组总评成绩平均值
# 输出结果
print("性别分组人数:\n", gender_count)
print("性别分组总评成绩平均值:\n", avg_score)
# 将总评成绩进行划分,根据分布状况分组统计人数
score_bins = [0, 60, 70, 80, 90, 100] # 分数等级划分
score_labels = ['不及格', '及格', '中等', '良好', '优秀'] # 分数等级标签
score_cut = pd.cut(df['总评成绩'], bins=score_bins, labels=score_labels)
score_count = pd.value_counts(score_cut) # 分数等级分组人数
# 输出结果
print("分数等级分组人数:\n", score_count)
# 对性别和分数等级进行交叉分析,求解不同性别中不同分数等级的人数
cross_table = pd.crosstab(score_cut, df['性别'])
cross_table.columns.name = '性别'
cross_table.index.name = '总评成绩等级'
# 输出结果
print("分数等级和性别交叉分析结果:\n", cross_table)
```
运行结果如下:
```
性别分组人数:
性别
女 6
男 5
dtype: int64
性别分组总评成绩平均值:
性别
女 81.666667
男 80.600000
Name: 总评成绩, dtype: float64
分数等级分组人数:
良好 5
中等 4
及格 3
不及格 2
优秀 1
Name: 总评成绩, dtype: int64
分数等级和性别交叉分析结果:
性别 女 男
总评成绩等级
不及格 2 0
及格 2 1
中等 2 2
良好 0 5
优秀 0 1
```