需要源码和数据集请点赞关注收藏后评论区留言私信~~~

下面对学生成句和表现等数据可视化分析

1:导入模块

import pandas as pdimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simhei']plt.rcParams['font.serif'] = ['simhei']import warningswarnings.filterwarnings('ignore')

2:获取数据 并打印前四行

from matplotlib.font_manager import FontPropertiesmyfont=FontProperties(fname=r'C:\Windows\Fonts\SimHei.ttf',size=12)sns.set(font=myfont.get_name())df = pd.read_csv('.\data\StudentPerformance.csv')df.head(4)

属性列表对应含义如下

Gender 性别

Nationality 国籍

PlaceofBirth 出生地

Stageid 学校级别

Gradeid 年级

Sectionid 班级

Topic 科目

semester 学期

ralation 孩子家庭教育负责人

raisedhands 学生上课举手的次数

announcementviews 学生浏览在线课件的次数

discussion 学生参与课堂讨论的次数

parentanswersurvey 家长是否填了学校的问卷

parentschoolsatisfaction 家长对于学校的满意度

studentabsencedays学生缺勤天数

3:数据可视化分析

接下来线修改表列名 换成中文

df.rename(columns={'gender':'性别','NationalITy':'国籍','PlaceofBirth':'出生地', 'StageID':'学段','GradeID':'年级','SectionID':'班级','Topic':'科目','Semester':'学期','Relation':'监管人','raisedhands':'举手次数','VisITedResources':'浏览课件次数','AnnouncementsView':'浏览公告次数','Discussion':'讨论次数','ParentAnsweringSurvey':'父母问卷','ParentschoolSatisfaction':'家长满意度','StudentAbsenceDays':'缺勤次数', 'Class':'成绩'},inplace=True)df.replace({'lowerlevel':'小学','MiddleSchool':'中学','HighSchool':'高中'},inplace=True)df.columns

显示学期和学段的取值

然后修改数据

df.replace({'lowerlevel':'小学','MiddleSchool':'中学','HighSchool':'高中'},inplace=True)df['性别'].replace({'M':'男','F':'女'},inplace=True)df['学期'].replace({'S':'春季','F':'秋季'},inplace=True)df.head(4)

查看空缺数据情况

df.isnull().sum()

查看数据统计情况

然后按成绩绘制计数柱状图

sns.countplot(x = '成绩', order = ['L', 'M', 'H'], data = df, linewidth=2,edgecolor=sns.color_palette("dark",4))

接着按性别绘制计数柱状图

sns.countplot(x = '性别', order = ['女', '男'],data = df)

按科目绘制计数柱状图

sns.set_style('whitegrid')sns.set(rc={'figure.figsize':(16,8)},font=myfont.get_name(),font_scale=1.5)sns.countplot(x = '科目', data = df)

按科目绘制不同成绩的计数柱状图

按性别和成绩绘制计数柱状图

sns.countplot(x = '性别', hue = '成绩',data = df, order = ['女', '男'], hue_order = ['L', 'M', 'H'])

按班级查看成绩分布比例

sns.countplot(x = '班级', hue='成绩', data=df, hue_order = ['L','M','H'])# 从这里可以看出虽然每个班人数较少,但是没有那个班优秀的人数的比例比较突出,这个特征可以删除

分析4个表现和成绩的相关性

# 了解四个课堂和课后表现与成绩的相关性fig, axes = plt.subplots(2,2,figsize=(14,10))sns.barplot(x='成绩', y='浏览课件次数',data=df,order=['L','M','H'],ax=axes[0,0])sns.barplot(x='成绩', y='浏览公告次数',data=df,order=['L','M','H'],ax=axes[0,1])sns.barplot(x='成绩', y='举手次数',data=df,order=['L','M','H'],ax=axes[1,0])sns.barplot(x='成绩', y='讨论次数',data=df,order=['L','M','H'],ax=axes[1,1])# 在sns.barplot中,默认的计算方式为计算平均值

分析不同成绩学生的讨论情况

# 了解举手次数与成绩之间的相关性sns.set(rc={'figure.figsize':(8,6)},font=myfont.get_name(),font_scale=1.5)sns.boxplot(x='成绩',y='讨论次数',data=df,order=['L','M','H'])

分析举手次数和参加讨论次数的相关性

# 了解四个课堂后量化表现之间的相关性# fig,axes = plt.subplots(2,1,figsize=(10,10))sns.regplot(x='举手次数',y='讨论次数',order =4,data=df)# sns.regplot(x='浏览公告次数',y='浏览课件次数',order=4,data=df,ax=axes[1]) ,ax=axes[0]

分析浏览课件次数 举手次数 浏览公告次数 讨论次数之间的相关性

# Correlation Matrix 相关性矩阵corr = df[['浏览课件次数','举手次数','浏览公告次数','讨论次数']].corr()corr 

最后将相关矩阵用热力图可视化显示

# Correlation Matrix Visualization 相关性可视化sns.heatmap(corr,xticklabels=corr.columns,yticklabels=corr.columns)

创作不易 觉得有帮助请点赞关注收藏~~~