使用python可视化学生分数

该博客文章展示了如何使用Python3,结合pandas、numpy和matplotlib库,在GoogleColab环境中对考研分数进行统计分析和可视化,包括计算分数的平均值、最大值、最小值,以及绘制不同分段人数的柱形图和正态分布曲线,同时制作了分数分布的直方图和饼状图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:https://blog.youkuaiyun.com/m0_72963799/article/details/127141536

在本篇博客中,笔者使用colab + python3的环境将考研分数进行可视化。

学生的成绩表格score.csv的格式如下:
请添加图片描述
其中No.代表学生编号,score代表考研分数。
具体的python代码实现如下:

import pandas as pd  # 引入panda工具集
import numpy as np  # 引入numpy核心库
import matplotlib.pyplot as plt  #引入matplotlib数据可视化库
 
#声明变量
a=0     #400分以上数量
b=0     #390-400分以上数量
c=0     #380-390分以上数量
d=0     #370-380分以上数量
e=0     #370分以下数量
score_max=300
score_min=450
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<score_min:
            score_min=score0
 
        
        if score0>=400:              #统计400分以上数量
            a=a+1
        elif score0>=390:            #统计390分以上数量
            b=b+1
        elif score0>=380:            #统计380分以上数量
            c=c+1
        elif score0>=370:            #统计379分以上数量
            d=d+1
        else:                       #统计360分以下数量
            e=e+1
 
    score_avg=score_sum/len(score)  #平均分
    scores=[a,b,c,d,e]              #分数区间统计
    
    
 
    # 柱形图柱形的宽度
    bar_width = 0.3
    
 
    # 设定X轴:前两个数字是x轴的起止范围,第三个数字表示步长,步长设定得越小,画出来的正态分布曲线越平滑
    x = np.arange(370, 400, 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.title('score(5)')
    plt.plot(x, y)
    plt.hist(score, bins=5, rwidth=0.9, density=True)
    plt.xlabel('score')
    plt.ylabel('possibiliity')
    
 
    # 绘制分数数据集的正态分布曲线和直方图(10分档)
    plt.subplot(222)
    plt.title('score(10)')
    plt.plot(x, y)   
    plt.hist(score, bins=10, rwidth=0.9, density=True)
    plt.xlabel('score')
    plt.ylabel('possibility')
 
 
    # 绘制柱形图
    plt.subplot(223)
    plt.title('score')
    plt.bar(x3, y3, tick_label=['average', 'highest', 'lowest'], width=bar_width)
 
    # 绘制饼状图
    plt.subplot(224)
    plt.title('pie chart')
    plt.pie(scores,labels=['400+','390-400','380-390','370-380','370-'])
    # 输出四幅图
plt.show()


最终实现的效果如图所示
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew_Chao

谢谢打赏喵

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值