数据可视化——基于matplotlib画图

注:所有需求数据都来源于student_grade.npz文件

需求一:(1)使用pandas读取学生考试成绩数据

代码:

#导入所需的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data_1 = np.load('D:/sjfx/student_grade.npz', allow_pickle=True)
print(data_1.files)
s_t = data_1['arr_0']
s_d = data_1['arr_1']
print(s_t)
print(s_d)

运行结果: 

需求二: (2)将学生考试总成绩分为4个区间,计算每个区间下的学生人数,绘制学生考试总成绩分布饼图。

饼图(Pie Graph)将各项数据的大小与各项数据总和的比例显示在一张“饼”中,以“饼块”的大小来确定每一项数据的占比。饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的比例,而且显示方式直观。
pyplot中绘制饼图的函数为pie

 

代码:

score_0_150 = 0
score_150_200 = 0
score_200_250 = 0
score_250_300 = 0
for i in range(len(s_d)):
    if 0 < s_d[i, -1] <= 150:
        score_0_150 += 1
    elif 150 < s_d[i, -1] <= 200:
        score_150_200 += 1
    elif 200 < s_d[i, -1] <= 250:
        score_200_250 += 1
    elif 250 < s_d[i, -1] <= 300:
        score_250_300 += 1
all_stu_score = [score_0_150, score_150_200, score_200_250, score_250_300] 
p = plt.figure(figsize=(5, 5))
label= ['不及格', '及格', '良好', '优秀']
explode = [0.01,0.01,0.01,0.01] 
plt.pie(all_stu_score, explode=explode, labels=label, 
        autopct='%1.1f%%', textprops={'fontsize': 15}) 
plt.title('学生考试总成绩的总体分布情况饼图', fontsize=20)
plt.show()

运行效果图:

需求三:(3)提取学生3项单科成绩的数据,绘制学生各项考试成绩箱型图。

箱线图(Boxplot)也称箱须图,其绘制时,需使用常用的统计量,便能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,可表现出这些特征的分散程度差异。
图5-2标出了箱线图中每条线表示的含义。

 

代码:

label= ['总成绩']
sum_score = s_d[:, -1]
gdp = (list(sum_score))
plt.boxplot(gdp,notch=True,labels=label, meanline=True)  # 绘制箱线图
plt.xlabel('学生考试科目')
plt.ylabel('学生考试总分数')
plt.title('学生考试总成绩的总体分散情况箱线图', fontsize=18)
plt.show()

运行效果图:

需求四:(4)分析学生考试总成绩的分布情况和3项单科成绩的分散情况。 

代码:

math_grade = s_d[:, -4]
reading_grade = s_d[:, -3]
writing_grade = s_d[:, -2]
label= ['数学成绩','阅读成绩','写作成绩']
gdp = (list(math_grade), list(reading_grade), list(writing_grade))
plt.boxplot(gdp,notch=True,labels=label, meanline=True)  # 绘制箱线图
plt.xlabel('学生考试科目')
plt.ylabel('学生考试分数')
plt.title('学生各项考试成绩的总体分散情况箱线图', fontsize=20)
plt.show()

 运行效果图:

需求五:(5)求学生自我效能感、考试课程准备两个特征下对学生总成绩的平均值。

代码:

mean_nation_a = round(np.mean(nation_a), 2)
mean_nation_b = round(np.mean(nation_b), 2)
mean_nation_c = round(np.mean(nation_c), 2)
mean_nation_d = round(np.mean(nation_d), 2)
mean_nation_e = round(np.mean(nation_e), 2)
mean_nation = [mean_nation_a, mean_nation_b, mean_nation_c, mean_nation_d, mean_nation_e] 
plt.subplot(121)   
label = ['A', 'B', 'C', 'D', 'E']
plt.bar(range(5), mean_nation, width=0.4)  # 绘制直方图
plt.xlabel('学生自我效能感')
plt.ylabel('学生平均考试总成绩')
plt.xticks(range(5), label)
plt.title('学生平均考试总成绩与自我效能感关系直方图')
plt.show()
completed = []
uncompleted = []
for i in range(len(s_d)):
    if student_data[i, 4] == '完成':
        completed.append(s_d[i, -1])
    else:
        uncompleted.append(s_d[i, -1])

运行效果图:

需求六: (6)在子图上分别绘制学生自我效能感、考试课程准备与总成绩的关系对应内容的柱形图。

代码:

mean_completed = round(np.mean(completed), 2)
mean_uncompleted = round(np.mean(uncompleted), 2)
mean_prepartion_score = [mean_completed, mean_uncompleted]
plt.subplot(122)   
label = ['已完成', '未完成']
plt.bar(range(2), mean_prepartion_score, width=0.4)  # 绘制直方图
plt.xlabel('考试课程准备情况')
plt.ylabel('学生平均考试总成绩')
plt.xticks(range(2), label)
plt.title('学生平均考试总成绩与考试课程准备情况关系直方图')
plt.show()

运行效果图:

需求七: (7)分析两个特征与考试总成绩的关系。

代码:

plt.subplot(121)   
label = ['A', 'B', 'C', 'D', 'E']
plt.bar(range(5), mean_nation, width=0.4)  # 绘制直方图
plt.xlabel('学生自我效能感')
plt.ylabel('学生平均考试总成绩')
plt.xticks(range(5), label)
plt.title('学生平均考试总成绩与自我效能感关系直方图')
plt.show()
plt.subplot(122)   
label = ['已完成', '未完成']
plt.bar(range(2), mean_prepartion_score, width=0.4)  # 绘制直方图
plt.xlabel('考试课程准备情况')
plt.ylabel('学生平均考试总成绩')
plt.xticks(range(2), label)
plt.title('学生平均考试总成绩与考试课程准备情况关系直方图')
plt.show()

运行效果图:

      (5)(6)的结合 。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值