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

您所在的位置:网站首页 学生成绩问题分析 数据分析作业(一)利用Python分析学生成绩

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

2024-06-26 19:59:09| 来源: 网络整理| 查看: 265

利用Python分析学生成绩 一、题目描述二、解题步骤运行环境题目分析 三、完整代码四、运行结果五、参考文献附录附录A更新记录 附录B 相关练习题目练习一:读取Excel文件数据表分别存入DataFrame对象Score和Duty练习二:自定义数据,完成直方图,折线图,散点图,饼图等

一、题目描述

个人构造一个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('每门课程平均分直方图') plt.xlabel('课程名') plt.ylabel('平均分') plt.bar('Python',Python_Avg) plt.bar('高数',Math_Avg) plt.bar('英语',English_Avg) plt.show() plt.title('每门课程最高分直方图') plt.xlabel('课程名') plt.ylabel('最高分') plt.bar('Python',Python_Max) plt.bar('高数',Math_Max) plt.bar('英语',English_Max) plt.show() plt.title('每门课程最低分直方图') plt.xlabel('课程名') plt.ylabel('最低分') plt.bar('Python',Python_Min) plt.bar('高数',Math_Min) plt.bar('英语',English_Min) plt.show()

也可以通过创建子图的方式显示,此时需要创建画布。

p1=plt.figure()#创建画布 a1=p1.add_subplot(2,2,1)#绘制第一幅子图 plt.title('学生总成绩分布直方图') plt.xlabel('学号') plt.ylabel('总分') plt.bar(score.学号,Total_Score) a2=p1.add_subplot(2,2,2)#绘制第二幅子图 plt.title('学生总成绩分布折线图') plt.xlabel('学号') plt.ylabel('总分') plt.plot(score.学号,Total_Score) a3=p1.add_subplot(2,2,3)#绘制第三幅子图 plt.title('学生总成绩分布散点图') plt.xlabel('学号') plt.ylabel('总分') plt.scatter(score.学号,Total_Score) a4=p1.add_subplot(2,2,4)#绘制第四幅子图 plt.title('每门课程箱线图') plt.xlabel('课程名') plt.ylabel('分数') label = ['高数','英语','Python'] s = (score.高数,score.英语,score.Python) plt.boxplot(s,labels = label) plt.show() 三、完整代码 import pandas as pd import matplotlib.pyplot as plt #读取文件 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 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False 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('每门课程平均分直方图') plt.xlabel('课程名') plt.ylabel('平均分') plt.bar('Python',Python_Avg) plt.bar('高数',Math_Avg) plt.bar('英语',English_Avg) plt.show() plt.title('每门课程最高分直方图') plt.xlabel('课程名') plt.ylabel('最高分') plt.bar('Python',Python_Max) plt.bar('高数',Math_Max) plt.bar('英语',English_Max) plt.show() plt.title('每门课程最低分直方图') plt.xlabel('课程名') plt.ylabel('最低分') plt.bar('Python',Python_Min) plt.bar('高数',Math_Min) plt.bar('英语',English_Min) plt.show() 四、运行结果

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 通过创建子图的方式显示: 在这里插入图片描述

五、参考文献

黄红梅,张良均.Python数据分析与应用[M].北京:人民邮电出版社,2018(4):52-89 python 计算均值、方差、标准差 Numpy,Pandas

附录 附录A 更新记录 2021-05-04 新增:自定义数据,完成直方图,折线图,散点图,饼图等。 使用字典访问内部数据的方式访问DataFrame单列数据。 读取Excel文件数据表。请参考附录B 相关练习题目 2021-05-24 新增:附录B运行截图。 更改:文中部分描述错误。 2021-06-18 新增:文中正文与附录中的测试代码文件,正文文件为网盘连接。 附录B 相关练习题目 练习一:读取Excel文件数据表分别存入DataFrame对象Score和Duty

题目描述 1.练习pandas统计分析基础,数据读取、分析、输出。 2.自建EXCEL文件,分为2个工作区,分别存放学生信息表(不少于30人)和班级职务表(不少于4种职务)。

如信息表: 学号 姓名 性别 数学 英语 Python 通信技术 1001 张三 男 95 86 87 90 1002 李四 女 98 84 88 89 如班级职务表: 学号 职务 1001 班长 1002 学习委员 读取Excel文件数据表分别存入DataFrame对象Score和Duty。要求如下:

1)Score对象新增一列“总分”为前四列成绩之和。 2)Score对象依据“总分”列的值从高到低进行排序。 3)Score对象根据性别列进行分组,输出男女生各自的平均分。 4)输出男女生的最高分。 5)Score对象新增一列“等级”,总分大于360的等级为A,总分小于270的等级为C,介于270到360之间为B。 6)以“学号”列为关联关键,将Score对象和Duty对象合并,保留所有Score对象的数据行,合并声称新的DataFrame对象Students。 7)把Students对象数据存入新的Excel文件students.xlsx中。

本文用到的数据class.xlsx

参考代码 请注意在#Anaconda 3.7版本中 ‘sheetname’ 命令,已更新为 ‘sheet_name’ 如果有报错:TypeError: read_excel() got an unexpected keyword argument 'sheetname'请尝试将’sheetname‘改为’sheet_name’

import pandas as pd Score = pd.read_excel('./class.xlsx') #TypeError: read_excel() got an unexpected keyword argument `sheetname` #Anaconda 3.7版本中 'sheetname' 命令,已更新为 'sheet_name' Duty = pd.read_excel('./class.xlsx',sheet_name=1) Score['总分'] = Score['数学'] + Score['英语'] + Score['Python'] + Score['通信技术'] Score = Score.sort_values(by='总分',ascending=False) newgroup = Score[['性别','数学','英语','Python','通信技术','总分']].groupby( by ='性别') print(newgroup.mean()) print(newgroup.max()) Score['等级'] = Score['总分'].apply(lambda x: 'A' if x>=360 else('C' if x


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭