python柱状图、直方图和饼状图统计学生成绩

Python的matplotlib库具有很强大的绘图功能,可以利用这个库函数来进行学生成绩统计。假如有一个班的某科学生成绩如表1所示,可以用柱状图、直方图和饼状图三种方式来进行统计分析。下边介绍一下操作步骤。

表1 学生成绩表

学号

分数

20221001

61

20221002

68

20221003

74

20221004

70

20221005

53

20221006

66

20221007

66

20221008

71

20221009

67

20221010

84

20221011

79

20221012

73

20221013

64

20221014

90

20221015

81

20221016

82

20221017

77

20221018

51

20221019

78

20221020

75

20221021

69

20221022

83

20221023

56

20221024

73

20221025

93

20221026

63

20221027

80

20221028

76

20221029

80

20221030

74

20221031

72

20221032

88

20221033

62

20221034

85

20221035

86

20221036

58

20221037

72

20221038

72

20221039

70

20221040

91

目录

一、把成绩表转成csv格式

二、统计分析的方法

1、柱状图

2、直方图

3、饼状图

三、实现代码

四、实现效果


一、把成绩表转成csv格式

学号用字段“No.”表示,成绩用“score”,表格名称为“score”。

表2 成绩表转化为csv格式
No. score
20221001 61
20221002 68
20221003 74
20221004 70
20221005 53
20221006 66
20221007 66
20221008 71
20221009 67
20221010 84
20221011 79
20221012 73
20221013 64
20221014 90
20221015 81
20221016 82
20221017 77
20221018 51
20221019 78
20221020 75
20221021 69
20221022 83
20221023 56
20221024 73
20221025 93
20221026 63
20221027 80
20221028 76
20221029 80
20221030 74
20221031 72
20221032 88
20221033 62
20221034 85
20221035 86
20221036 58
20221037 72
20221038 72
20221039 70
20221040 91

二、统计分析的方法

在课程成绩情况统计分析时,可以选则柱状图、直方图和饼状图三种图形。

1、柱状图

使用柱状图分析全班平均分数、最高分数和最低分数。

2、直方图

使用直方图和正态分布曲线分析全班成绩的正态分布情况。

3、饼状图

使用饼状图分析60分以下、60-70分、70-80分、80-90分和90分以上几个分数区间的人数所占比例。

三、实现代码

import pandas as pd  # 引入panda工具集
import numpy as np  # 引入numpy核心库
import matplotlib.pyplot as plt  #引入matplotlib数据可视化库

#声明变量
a=0     #90分以上数量
b=0     #80-90分以上数量
c=0     #70-80分以上数量
d=0     #60-70分以上数量
e=0     #60分以下数量
score_max=0
score_min=100
score_avg=0
score_sum=0

# 正态分布的概率密度函数
#   x      数据集中的某一具体测量值
#   mu     数据集的平均值,反映测量值分布的集中趋势
#   sigma  数据集的标准差,反映测量值分布的分散程度
def normfun(x, mu, sigma):
    pdf = np.exp(-((x - mu) ** 2) / (2 * sigma ** 2)) / (sigma * np.sqrt(2 * np.pi))
    return pdf

if __name__ == '__main__':
    
    data = pd.read_csv('score.csv') # 载入分数数据文件
    score = data['score'] # 获得分数数据集
    student_no = data['No.'] # 获得学号数据集
    mean = score.mean() # 获得分数数据集的平均值
    std = score.std()   # 获得分数数据集的标准差

   #计算分数总和、各分数区间数量统计
    for i in range(0,len(score)):
        score0=int(score[i])
                
        #print(student_no[i],score0)
        score_sum=score_sum+score0  #计算分数之和,为求平均数做准备

        #计算最大值
        if score0>score_max:
            score_max=score0

        #计算最小值
        if score0=90:              #统计90分以上数量
            a=a+1
        elif score0>=80:            #统计80分以上数量
            b=b+1
        elif score0>=70:            #统计70分以上数量
            c=c+1
        elif score0>=60:            #统计60分以上数量
            d=d+1
        else:                       #统计60分以下数量
            e=e+1

    score_avg=score_sum/len(score)  #平均分
    scores=[a,b,c,d,e]              #分数区间统计
    
    

    # 柱形图柱形的宽度
    bar_width = 0.3
    

    # 设定X轴:前两个数字是x轴的起止范围,第三个数字表示步长,步长设定得越小,画出来的正态分布曲线越平滑
    x = np.arange(0, 100, 1)

    # 设定Y轴,正态分布函数
    y = normfun(x, mean, std)

    # 设定柱状图x轴、Y轴数组
    x3 = np.arange(3)
    y3 = np.array([score_avg,score_max,score_min])
    

    # 绘制分数数据集的正态分布曲线和直方图(5分档)
    plt.subplot(221)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title('分数分布(5档)')
    plt.plot(x, y)
    plt.hist(score, bins=5, rwidth=0.9, density=True)
    plt.xlabel('分数')
    plt.ylabel('概率')
    

    # 绘制分数数据集的正态分布曲线和直方图(10分档)
    plt.subplot(222)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title('分数分布(10档)')
    plt.plot(x, y)   
    plt.hist(score, bins=10, rwidth=0.9, density=True)
    plt.xlabel('分数')
    plt.ylabel('概论')


    # 绘制柱形图
    plt.subplot(223)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title('分数统计')
    plt.bar(x3, y3, tick_label=['平均分', '最高分', '最低分'], width=bar_width)

    # 绘制饼状图
    plt.subplot(224)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title('分数段饼图')
    plt.pie(scores,labels=['90分以上','80-90分','70-80分','60-70分','60分以下'])
    # 输出四幅图
plt.show()

四、实现效果

python柱状图、直方图和饼状图统计学生成绩_第1张图片

(全文结束)

 

你可能感兴趣的:(Python,程序与算法,python,matplotlib,开发语言)