IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【python数据可视化】成绩分析及可视化实例 -> 正文阅读

[数据结构与算法]【python数据可视化】成绩分析及可视化实例

题目要求

综合项目设计2:成绩分析及可视化实例
【已有功能】某班有30名学生的3门课程成绩,请统计每个学生课程的总分、平均分,每门课程的最高分、最低分,并绘制图形,对比各成绩段的成绩人数分布。
【教学目标】强化numpy和matplotlib的应用能力,numpy读取csv。
【已有代码】
#成绩分析及可视化实例
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family'] = 'SimHei'
stuScore = np.loadtxt('student_score.csv',delimiter = ',')#读入成绩文件,返回数组
sumEach = np.sum(stuScore[:,1:],axis = 1)#返回每个学生3门课程总分
avgEach = np.average(stuScore[:,1:],axis = 0)#返回每个学生每门课程平均分
#返回最高分和最低分
maxMath = np.max(stuScore[:,1])
maxEng = np.max(stuScore[:,2])
maxPython = np.max(stuScore[:,3])
minMath = np.min(stuScore[:,1])
minEng = np.min(stuScore[:,2])
minPython = np.min(stuScore[:,3])

print("个人总分情况是:")
print(sumEach)
print("个人平均分情况是:")
print(avgEach)
print("班级每门课程最高分:")
print(maxMath,maxEng,maxPython)
print("班级每门课程最低分:")
print(minMath,minEng,minPython)
#取出各科成绩
mathScore = stuScore[:,1]   
engScore = stuScore[:,2]
pythonScore = stuScore[:,3]
#绘制高数直方图
plt.suptitle("成绩分布直方图")
plt.subplot(3,1,1)
plt.hist(mathScore,bins=10,range=(0,100),color='red')# 0-100分,分成10段
plt.xlabel("高数成绩分数段")#设置x轴标签
plt.ylabel("人数")#设置y轴标签
plt.xlim(0,100)#设置x轴区间
plt.ylim(0,20)#设置y轴区间
plt.xticks([0,10,20,30,40,50,60,70,80,90,100])#设置x轴刻度
plt.yticks([0,5,10,15,20]) #设置y轴刻度
plt.grid()
#绘制英语直方图
plt.subplot(3,1,2)
plt.hist(engScore,bins=10,range=(0,100),color='blue')#0-100分,分成10段
plt.xlabel("英语成绩分数段")#设置x轴标签
plt.ylabel("人数")#设置y轴标签
plt.xlim(0,100)#设置x轴区间
plt.ylim(0,20)#设置y轴区间
plt.xticks([0,10,20,30,40,50,60,70,80,90,100])#设置x轴刻度
plt.yticks([0,5,10,15,20]) #设置y轴刻度
plt.grid()
#绘制python直方图
plt.suptitle("成绩分布直方图")
plt.subplot(3,1,3)
plt.hist(pythonScore,bins=10,range=(0,100),color='green')#0-100分,分成10段
plt.xlabel("Python成绩分数段")#设置x轴标签
plt.ylabel("人数")#设置y轴标签
plt.xlim(50,100)#设置x轴区间
plt.ylim(0,20)#设置y轴区间
plt.xticks([50,60,70,80,90,100])#设置x轴刻度
plt.yticks([0,5,10,15,20]) #设置y轴刻度
plt.grid()
plt.show()        

项目修改与设计说明:
(1)绘制三门课程平均分的柱状图对比;(2)绘制python课程各成绩段人数的饼图;

实现代码

#成绩分析及可视化实例
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family'] = 'SimHei'
stuScore = np.loadtxt('student_score.csv',delimiter = ',')#读入成绩文件,返回数组
sumEach = np.sum(stuScore[:,1:],axis = 1)#返回每个学生3门课程总分
avgEach = np.average(stuScore[:,1:],axis = 0)#返回每个学生每门课程平均分
#返回最高分和最低分
maxMath = np.max(stuScore[:,1])
maxEng = np.max(stuScore[:,2])
maxPython = np.max(stuScore[:,3])
minMath = np.min(stuScore[:,1])
minEng = np.min(stuScore[:,2])
minPython = np.min(stuScore[:,3])
print(avgEach)
print("个人总分情况是:")
print(sumEach)
print("个人平均分情况是:")
print(avgEach)
print("班级每门课程最高分:")
print(maxMath,maxEng,maxPython)
print("班级每门课程最低分:")
print(minMath,minEng,minPython)
#取出各科成绩
mathScore = stuScore[:,1]
engScore = stuScore[:,2]
pythonScore = stuScore[:,3]

bar = plt.subplot(1,2,1)
x=['高数','英语','python']
plt.bar(x,avgEach)
plt.yticks([10,20,30,40,50,60,70,80,90,100]) #设置y轴刻度
#plt.show()


##
a=0
b=0
c=0
d=0
e=0
list1=[]
for row in stuScore:
    list1.append(row[3])
    if(row[3]<60):
        e=e+1
    if(60<=row[3]and row[3]<70):
        d=d+1
    if(70<=row[3]and row[3]<80):
        c=c+1
    if(80<=row[3]and row[3]<90):
        b=b+1
    if(90<=row[3]):
        a=a+1
# 构造数据
edu = [a/30,b/30,c/30,d/30,e/30]
labels = ['优秀','良', '中','及格','不及格']

explode = [0.1,0,0,0,0]  
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色

# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')

# 控制x轴和y轴的范围
plt.xlim(0,4)
plt.ylim(0,4)
pei = plt.subplot(1,2,2)
# 绘制饼图
plt.pie(x = edu, # 绘图数据
        explode=explode, 
        labels=labels, # 添加教育水平标签
        colors=colors, # 设置饼图的自定义填充色
        autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
        pctdistance=0.8,  # 设置百分比标签与圆心的距离
        labeldistance = 1.15, # 设置教育水平标签与圆心的距离
        startangle = 180, # 设置饼图的初始角度
        radius = 1.5, # 设置饼图的半径
        counterclock = False, # 是否逆时针,这里设置为顺时针方向
        wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        center = (1.8,1.8), # 设置饼图的原点
        frame = 0 )# 是否显示饼图的图框,这里设置显示

# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())
# 添加图标题

#plt.subplots_adjust(left=0.1, top=0.88, right=0.2, bottom=0.08, wspace=0.02, hspace=0.02)
plt.show()
# 显示图形

代码运行截图:

在这里插入图片描述
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:33:00  更:2021-12-15 18:33:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:41:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码