【Python】数据分析优秀案例&项目经历-用数据分析能力构建高分学生人群画像_学生画像 数据分析(2)

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

据此,我们可以认为,如果从男女比例出发,这份数据为随机抽取。

至此,数据整理结束,我们再次查看此时的数据情况。

data.sample(n=5)

race/ethnicityparental level of educationlunchtest preparation coursemath percentagereading score percentagewriting score percentageaverage scoreperformance levelsex
801group Csome high schoolstandardcompleted0.760.800.730.76CM
200group Cassociate’s degreestandardcompleted0.670.840.860.79CF
417group Cassociate’s degreestandardnone0.740.730.670.71CM
629group Csome high schoolstandardcompleted0.440.510.550.50FF
944group Bhigh schoolstandardnone0.580.680.610.62DF

3. 学生成绩分析

3.1 学生整体成绩分布

fig = plt.figure(figsize=(5,10))
sns.set_style(‘darkgrid’)
subjects = [‘math percentage’, ‘reading score percentage’, ‘writing score percentage’, ‘average score’]
color = [‘green’, ‘blue’, ‘orange’, ‘purple’]
column = 1
for subject in subjects:
plt.subplot(len(subjects), 1, column)
sns.kdeplot(data=data, x=subject, color=color[column - 1])
column = column + 1
plt.tight_layout()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWSG3rHk-1639906825714)(output_26_0.png)]

整体来看,各学科成绩与平均成绩都符合正态分布,我们以样本均值加减两个标准差,可以得到约95%的学生成绩分区间:

lower_bound = data[‘average score’].mean() - data[‘average score’].std()*2
upper_bound = data[‘average score’].mean() + data[‘average score’].std()*2
print(f’95%的学生成绩分布下限:{lower_bound}‘)
print(f’95%的学生成绩分布上限:{upper_bound}’)

95%的学生成绩分布下限:0.3924529214957264
95%的学生成绩分布上限:0.9627870785042743

即约有95%的学生成绩分布在0.39分至0.96分之间。

3.2 不同学科成绩间的关联度以及不同学生人群擅长科目

我们数据集中共拥有三门学科,分别为读写与数学。我们可以分别将其看做**“文科”“理科”**,并分别查看不同学科成绩之间的关联度。

data[subjects].corr()

math percentagereading score percentagewriting score percentageaverage score
math percentage1.0000000.8175800.8026420.918442
reading score percentage0.8175801.0000000.9545980.970143
writing score percentage0.8026420.9545981.0000000.965643
average score0.9184420.9701430.9656431.000000

fig = plt.figure()
plt.subplot()
sns.heatmap(data[subjects].corr(), annot=True)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWpxCHDy-1639906825715)(output_33_0.png)]

从上面的表与图中,我们可以看出,“文科”学科成绩之间的相关程度,要高于“文科”与“理科”学科成绩之间的相关程度。而且考虑到本数据集中“文科”的科目要多于“理科”的科目,“文科”成绩与平均成绩的相关程度更高。

一般意义而言,社会认为上男生更擅长理科,而女生更擅长文科。我们将使用统计学验证这一看法是否适用于本数据集。

我们引入卡方独立性检验,判断性别与学科掌握程度方面是否是独立不相关的。

  • H0:数学成绩与性别无关系。
  • H1: 数学成绩与性别有关系。

将数学成绩进行分箱,分箱方式与前述对平均成绩的分箱方式相关

math_grading = pd.cut(data[‘math percentage’], bins=[0, 0.59, 0.69, 0.79, 0.89, 100],
labels=[‘F’, ‘D’, ‘C’, ‘B’, ‘A’] )
crosstab = pd.crosstab(math_grading, data[‘sex’])

引入卡方独立性检验

result = stats.chi2_contingency(crosstab)
print(f’p值为:{result[1]}')

p值为:3.052111718576621e-05

**原假设不成立,即学生的数学成绩与性别并不独立。**在此基础上,我们进一步查看不同性别下,学生在数学科目的表现。

data.groupby(‘sex’)[[‘math percentage’]].agg([np.mean, np.median])

math percentage
mean
sex
F0.636332
M0.687282

fig, ax = plt.subplots(1,2, figsize=(10, 5))
sns.boxplot(data=data, y=‘math percentage’, x=‘sex’, palette=‘summer’, ax=ax[0])
sns.histplot(data=data, x=‘math percentage’, hue=‘sex’, fill=True, ax=ax[1], stat=‘probability’)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qV7fOTYc-1639906825716)(output_41_0.png)]

在数学科目的平均分以及中位数两大统计指标上,我们可以看出,男性在该科目的确占有一定优势。两者的数学成绩分布大致都符合正态分布,但男性在样本方差明显更小,且在高分部分,男性出现的概率更大——男性在数学上的整体表现,要优于女性。

下面我们继续观察男女性在文科科目上的表现,在这里,我们选取writing score percentage标签,做为研究对象。

data.groupby(‘sex’)[[‘writing score percentage’]].agg([np.mean, np.median])

writing score percentage
mean
sex
F0.724672
M0.633112

fig = px.histogram(
data, x=‘writing score percentage’,
marginal=‘box’, opacity=0.6,
color=‘sex’,
histnorm=‘probability’,
title=‘男生与女生在文科上的表现’,
template=‘plotly_white’
)

fig.update_layout(barmode=‘overlay’, width=800)
fig.show()

从所估计的概率密度图上看,女生在writing score percentage的高分领域,女性出现的概率要远高于男生,而在低分领域则正好相反。综合来看男生,男生的确更擅长理科,而女生则相反。

3.3 高分学生人群画像

3.3.1 父母学历

下面我们分析高分(均分高于90分)考生的画像,首先我们探究高分与父母受教育程度间的关系。

honor_students = data.loc[data[‘average score’]>=0.9] # 选取均分高于0.9的学生,组成子数据集honor_students

honor_count = honor_students[‘parental level of education’].value_counts().sort_index()
total_count = data[‘parental level of education’].value_counts().sort_index()

fig = make_subplots(rows=1, cols=2, specs=[[dict(type=‘domain’),{‘type’:‘domain’}]])

fig.add_pie(
values=total_count.values, hole=0.4, labels=total_count.index,
row=1, col=1, name=‘整体学生父母受教育程度’
)
fig.add_pie(
values=honor_count.values, hole=0.4, labels=honor_count.index,
row=1, col=2, name=‘高分学生父母受教育程度’
)

fig.update_layout(
title_text=“学生父母受教育程度”,
annotations=[dict(text=‘整体父母’, x=0.15, y=0.5, font_size=20, showarrow=False),
dict(text=‘高分父母’, x=0.85, y=0.5, font_size=20, showarrow=False)],
width=900
)
fig.show()

从上图所示,我们发现,高分考生父母的教育程度,要高于整体考生父母的教育程度,其中高分考生父母拥有副学士、学士、硕士的比例,相较于整体考生,分别从22.9%, 11.8%, 5.9%上升至31.5%, 24.1%, 11.1%。

整体来看,高分学生的父母,约有90%都曾接受过大学教育。

不仅仅是高分学生父母的所受教育程序较高,实际上,在本数据集中,所有学生的平均分,皆与父母的教育程度正相关。下表给出了不同教育程度的父母,以及对应考生群体平均分。其中,其中学历为硕士与高中的父母,子女的平均分分别为73分及63分。

data.groupby(‘parental level of education’)[‘average score’].mean().sort_values()

parental level of education
high school 0.631224
some high school 0.650726
some college 0.684469
associate’s degree 0.695586
bachelor’s degree 0.719492
master’s degree 0.735763
Name: average score, dtype: float64

parents = data[‘parental level of education’].unique()
sample_data = []
for parent in parents:
member = data[data[‘parental level of education’] == parent].sample(n=30, random_state=1)
sample_data.append(member)
parent_data = pd.concat(sample_data, axis=0)

fig = px.scatter(
parent_data, x=‘math percentage’, y=‘writing score percentage’,
color=‘parental level of education’,
size=‘average score’,
title=‘父母教育程度对学生成绩影响’,
template=‘plotly_dark’
)
fig.show()

上述气泡图抽取各个教育水平的父母各30名,并观察其子女成绩表现。不难看出,学生的成绩表现与父母受教育程度成正相关关系,即父母受教育程度越高,子女的学业表现越好。

为了进一步在统计学上证明这一点,我们引入卡方独立性检验:

  • H0: 学生成绩表现与父母受教育程序无关
  • H1: 学生成绩表现与父母受程序程度相关

crosstab = pd.crosstab(data[‘parental level of education’], data[‘performance level’])

result = stats.chi2_contingency(crosstab)
if result[1] < 0.05:
print(f’p值为{result[1]}, 原假设不成立!‘)
else:
print(f’p值为{result[1]}, 原假设成立!’)

p值为0.00014895457933147155, 原假设不成立!

结论:对于高分段的学生,其父母所受的教育程度要更高。

3.3.2 学生性别

honor_students.groupby(‘sex’)[‘sex’].count()

sex
F 40
M 14
Name: sex, dtype: int64

从上图表格中,我们发现高分学生当中,女性的数量要明显多于男性数量。但考虑到在三门科目当中,写作与阅读都偏向于女生所擅长的文科类科目,这对于擅长数学的男生而言,显然是不利的,我们考虑选取一门文科与一门理科,取其均值,查看在这一情况下,高分学生在男女中的分布。

condition = ((data[‘math percentage’]+data[‘writing score percentage’])/2 >= 0.9)
data[condition].groupby(‘sex’)[‘sex’].count()

sex
F 35
M 18
Name: sex, dtype: int64

此时,女生仍然相较于男生,仍然拥有更大的优势!

honor_index = honor_students.groupby(‘sex’)[‘sex’].count().index
honor_value = honor_students.groupby(‘sex’)[‘sex’].count().values
math_writing_index = data[condition].groupby(‘sex’)[‘sex’].count().index
math_writing_value = data[condition].groupby(‘sex’)[‘sex’].count().values
fig = go.Figure(data=[
go.Bar(x=honor_index, y=honor_value, name=‘三科均分高于90分’, text=honor_value,),
go.Bar(x=math_writing_index, y=math_writing_value, name=‘数学写作均分高于90分’, text=math_writing_value)
])
fig.update_layout(width=500, height=400)
fig.show()

从我们得到的结果来看,无论是哪种情况,女生高分情况都要远胜于男生,基于此,我们做出一个假设:尽管女生在数学方面整体不如男性,但在高分段,男女生在数学的表现基本一致。

data[data[‘math percentage’]>0.9].groupby(‘sex’)[‘math percentage’].mean()

sex
F 0.952857
M 0.948621
Name: math percentage, dtype: float64

上表所示为男生与女生在高分段的数学平均成绩。

data[data[‘math percentage’]>0.9].groupby(‘sex’)[‘math percentage’].std()

sex
F 0.031803
M 0.032373
Name: math percentage, dtype: float64

上表所示为男生与女生在高分段的数学样本方差。

从数学高分段的均值及方差来看,两者都十分接近。为了进一步验证我们的观点,我们引入t 检验,判断两者的均值是否相同。

  • H0: 在高分段,男生与女生在数学方面的均值一致
  • H1: 在高分段,男生与女生在数学方面的均值不一致

honored_male_math = data.loc[(data[‘math percentage’] >= 0.9) & (data[‘sex’] == ‘M’),‘math percentage’]
honored_female_math = data.loc[(data[‘math percentage’] >= 0.9) & (data[‘sex’] == ‘F’),‘math percentage’]
result = ttest_ind(honored_male_math.values, honored_female_math.values, equal_var=True)
if result[1]>0.95:
print(f’两者的均值一致,P值为{result[1]}‘)
else:
print(f’两者的均值不一致,P值为{result[1]}’)

两者的均值一致,P值为1.0

从P值所反馈结果来看,女生尽管整体在数学方面不如男生,但在高分段,女生与男生的表,并无明显区别。

结论:高分段,女生比男生要更占优势,而男生的优势科目在高分段,优势并不明显。

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

而男生的优势科目在高分段,优势并不明显。**

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


[外链图片转存中…(img-3WhD0nV2-1715500618821)]
[外链图片转存中…(img-zschUSrc-1715500618821)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值