使用Python语言对班级学生成绩进行数据可视化——pandas,matplotlib和numpy库的应用,条形图,直方图,饼图,热力图,箱形图的可视化
1.首先,导入所需要的库,并且读取csv数据文件
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('stu_scores.csv')
print(df)
2.设置中文显示,没画一个图都要设置,在这里提前设置最好,这样就没有那么繁杂,不用重复书写
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
3.绘制直方图:
#直方图
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(df['Chinese'],bins=30)
plt.title('Chinese score')
plt.xlabel('score')
plt.ylabel('Total number')
plt.show()
运行结果:
x轴表示分数,y轴表示该分数的总人数
4.绘制箱形图:
#箱形图
fig = plt.figure()
plt.title('Math score')
ax = fig.add_subplot(1,1,1)
ax.boxplot(df['Math'])
plt.show()
可以看出30个数据中有9个异常值
5.条形图——男生和女生各英语总成绩
#条形图——男生和女生各英语总成绩
var = df.groupby('Gender').Engish.sum()
fig = plt.figure()
ax1=fig.add_subplot(1,1,1)
ax1.set_xlabel('Gender')
ax1.set_ylabel('Sum')
ax1.set_title('男生和女生各英语总成绩条形图')
var.plot(kind='bar')
plt.show()
运行结果:
可以看出,男生的英语总成绩高于女生
6.绘制散点图,英语成绩和数学成绩的相关性:
#散点图
fig = plt.figure()
ax=fig.add_subplot(1,1,1)
ax.scatter(df['Chinese'],df['Math'])
plt.xlabel('Chinese')
plt.ylabel('Math')
plt.title('语文和数学成绩散点图')
plt.show()
呈现正相关关系
7.绘制饼状图——男生和女生语文总成绩饼图分布:
#饼状图
var = df.groupby(['Gender']).sum().stack()
temp = var.unstack()
type(temp)
x_list = temp['Chinese']
label_list = temp.index
#pyplot.axis('equal')
plt.pie(x_list,labels=label_list,autopct="%1.1f%%")
plt.title('男生和女生语文总成绩饼图分布')
plt.show()
8.热度图即热力图的绘制:各科成绩和性别
#热度图
import numpy as np
data = np.random.rand(5,2)
rows = list(['Chinese','Math','Engish','Physics','Chemistry'])
columns = list('MF')
fig,ax = plt.subplots()
ax.pcolor(data,cmap=plt.cm.Reds,edgecolors='k')
ax.set_xticks(np.arange(0,2)+0.5)
ax.set_yticks(np.arange(0,5)+0.5)
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()
ax.set_title('各科目成绩和性别热力图')
ax.set_xticklabels(columns,minor=False,fontsize=20)
ax.set_yticklabels(rows,minor=False,fontSize=20)
plt.show()