数据分析作业(一)利用Python分析学生成绩

本文利用Python读取CSV文件中的学生成绩数据,计算每门课程的总分、平均分、最高分和最低分,并通过直方图、折线图、散点图和箱线图展示成绩分布。同时,设置了中文标题和标签,确保了在图表中正确显示中文。此外,介绍了如何处理Excel文件和设置字体以支持中文显示。

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

一、题目描述

个人构造一个30名学生的班级,每名学生有三门课程,学生的学号和各门成绩形如:

学号 高数 英语 Python
1001 85 90 96
1002 96 92 95
1003 78 87 83
为了输入数据方便,请保存在如student_score.csv文件中。
(1)请计算三门课程的总分,此班级每门课程的平均分和最高分及最低分,并绘制相应的图形来统计三门课程的成绩分布。
(2)各图形自拟。
(3)坐标轴标签,图例等属性设置完整。
(4)使用中文标题及标签。

二、解题步骤

运行环境

Anconda3.X Spyder(Python 3.7)

题目分析

步骤一:创建csv文件以保存实验所需数据。
本文使用使用Excel创建CSV文件。操作步骤如下:
1)新建一个Excel表,(使用WPS和Microsoft都是一样的)
2)打开Excel进行编辑。
3)生成.csv文件。
方式一:WPS表格-另存为-其它格式-选择文件类型-命名文件名,最后保存。
方式二:保存文档后直接修改“新建 Microsoft Excel 工作表.xlsx”为“使用Excel创建CSV文件.csv”。
4)点击保存后有相应警告提醒,则选“确定”或“是”即可

本文使用到的资源(百度网盘)
链接:https://pan.baidu.com/s/1gKDtK2yNfPgj_2OIzWI0TA
提取码:8vnx

步骤二:导入所需要的库

import pandas as pd	#进行文件读取
import matplotlib.pyplot as plt #绘图

步骤三:读取csv文件
在Spyder中读取student_score.csv为DataFrame字符流,并且赋值给df,需要设置编码格式为GBK格式。本文将数据文件放置在同一目录下。作者在使用UFT-8编码会无法正确读出数据。

score = pd.read_csv('./student_score.csv',encoding = 'gbk')#这里使用的是相对路径
#获取文件绝对路径
#import os
#file_path = os.path.abspath('students_score.csv')
#print(file_path)

步骤四:提取所需数据
此步骤中涉及到DataFrame的一些操作。本文在提取相关数据时使用访问属性的方式访问DataFrame单列数据。在附录B中有使用字典访问内部数据的方式访问DataFrame单列数据。

score = pd.read_csv('./student_score.csv',encoding = 'gbk')
#最高分
Math_Max = score.高数.max()
English_Max = score.英语.max()
Python_Max = score.Python.max()
#最低分
Math_Min = score.高数.min()
English_Min = score.英语.min()
Python_Min = score.Python.min()
#成绩方差
Math_Var = score.高数.var()
English_Var = score.英语.var()
Python_Var = score.Python.var()
#成绩均值
Math_Avg = score.高数.mean()
English_Avg = score.英语.mean()
Python_Avg = score.Python.mean()
#学生总成绩
Total_Score = score.高数 + score.英语 + score.Python

步骤五:设置字体
由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数来改变绘图时的字体,使得可以正常显示中文。同时,由于更改字体后会导致坐标轴中的字体无法显示,因此要同时更改axes.unicode_minus参数

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

步骤六:数据可视化
本文只列出了所有学生总成绩的直方图,折线图,散点图和每门课程的箱线图,其他部分的图形数据较少只给出直方图。其他的绘图在附录B中有相关代码参考。

plt.title('学生总成绩分布直方图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.bar(score.学号,Total_Score)
plt.show()

plt.title('学生总成绩分布折线图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.plot(score.学号,Total_Score)
plt.show()

plt.title('学生总成绩分布散点图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.scatter(score.学号,Total_Score)
plt.show()

plt.title('每门课程箱线图')
plt.xlabel('课程名')
plt.ylabel('分数')
label = ['高数','英语','Python']
s = (score.高数,score.英语,score.Python)
plt.boxplot(s,labels = label)
plt.show()

plt.title('每门课程平均分直方图'
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值