和鲸社区数据分析每周挑战【第九十二期:学生成绩影响因素分析】

和鲸社区数据分析每周挑战【第九十二期:学生成绩影响因素分析】

一、前言

本周的挑战内容为:学生成绩影响因素分析

大家可以去我的工作台运行这个项目。

在这里插入图片描述

下面是和鲸社区活动报名地址:https://www.heywhale.com/home/activity/detail/60ffe026e9eceb001727cfac/content/1

数据集来源本次活动提供:

在这里插入图片描述

在这里插入图片描述

二、数据读取和初步探索

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载数据集
data = pd.read_csv('D:\和鲸社区数据分析每周挑战\第九十二期:学生成绩影响因素分析\Students_Exam_Scores.csv', encoding='gbk')
data.head()  # 查看前几行数据

在这里插入图片描述

data.info()  # 查看数据的基本信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 30641 entries, 0 to 30640
Data columns (total 15 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   序号        30641 non-null  int64  
 1   性别        30641 non-null  object 
 2   分组        28801 non-null  object 
 3   父母教育背景    28796 non-null  object 
 4   午餐类型      30641 non-null  object 
 5   完成备考课程    28811 non-null  object 
 6   父母婚恋状态    29451 non-null  object 
 7   参与运动的频率   30010 non-null  object 
 8   是否是第一个孩子  29737 non-null  object 
 9   兄弟姐妹数量    29069 non-null  float64
 10  上学交通工具    27507 non-null  object 
 11  每周自习时间    29686 non-null  object 
 12  数学成绩      30641 non-null  int64  
 13  阅读成绩      30641 non-null  int64  
 14  写作成绩      30641 non-null  int64  
dtypes: float64(1), int64(4), object(10)
memory usage: 3.5+ MB

三、数据预处理

1、处理缺失值

data.fillna({'分组': 'Unknown', '每周自习时间': 'Unknown'}, inplace=True)

2、类别变量转换

data = pd.get_dummies(data, columns=['性别', '分组', '父母教育背景', '午餐类型', '完成备考课程', '父母婚恋状态', '参与运动的频率', '是否是第一个孩子', '上学交通工具', '每周自习时间'])
data.head()

在这里插入图片描述

四、学业表现可视化

1、绘制数学成绩分布图

#隐藏警告
import warnings
warnings.filterwarnings("ignore")               #忽略警告信息
plt.rcParams['font.sans-serif']  = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False      # 用来正常显示负号
plt.rcParams['figure.dpi']  = 100        #分辨率

data[['数学成绩', '阅读成绩', '写作成绩']].plot(kind='hist', bins=10, alpha=0.5)
plt.xlabel('成绩')
plt.ylabel('频数')
plt.title('学业表现分布')
plt.show()

在这里插入图片描述

2、绘制相关性矩阵

correlation_matrix = data[['数学成绩', '阅读成绩', '写作成绩']].corr()
plt.imshow(correlation_matrix, cmap='coolwarm', interpolation='nearest')
plt.colorbar()
plt.xticks(range(len(correlation_matrix.columns)), correlation_matrix.columns, rotation=45)
plt.yticks(range(len(correlation_matrix.columns)), correlation_matrix.columns)
plt.title('相关矩阵')
plt.show()

在这里插入图片描述

五、学生成绩影响因素分析

# 相关性分析
correlation = data[['数学成绩', '阅读成绩', '写作成绩']].corr()
correlation

在这里插入图片描述

六、学生成绩预测分析

from sklearn.impute import SimpleImputer

features = data.drop(columns=['数学成绩', '阅读成绩', '写作成绩'])
target = data[['数学成绩', '阅读成绩', '写作成绩']]

# 处理缺失值
imputer = SimpleImputer(strategy='mean')
features = imputer.fit_transform(features)

# 数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)

# 构建线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
print('均方误差:', mse)

# 绘制预测值与真实值的散点图
plt.scatter(y_test['数学成绩'], y_pred[:, 0], alpha=0.5)
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('数学成绩预测')
plt.show()
均方误差: 162.8193907568781

在这里插入图片描述

七、确定最重要的影响因素

# 获取特征重要性(系数)
# 获取特征列名
feature_names = data.columns[:-3]
feature_importance = pd.DataFrame({'特征': feature_names, '重要性': model.coef_[0]})
feature_importance.sort_values(by='重要性', ascending=False, inplace=True)
feature_importance

在这里插入图片描述

# 绘制特征重要性条形图
plt.barh(feature_importance['特征'], feature_importance['重要性'])
plt.xlabel('重要性')
plt.ylabel('特征')
plt.title('特征-重要性')
plt.show()

在这里插入图片描述

top_features = feature_importance.nlargest(3, '重要性')  # 获取最重要的3个特征
top_features

在这里插入图片描述

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值