当前位置: 首页 > article >正文

【机器学习案列】学生抑郁可视化及预测分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【机器学习案列】学生抑郁可视化及预测分析

  • 一、数据获取与预处理
    • 1.1 导入分析库
    • 1.2 导入数据
    • 1.3 数据基本分析
  • 二、数据可视化分析
    • 2.1 性别分布
    • 2.2 不同性别抑郁情况分布
    • 2.3 不同睡眠时长与抑郁情况的关系
    • 2.4 学习压力与抑郁的关系
    • 2.5 年龄分布与抑郁情况的关系
    • 2.6 其它多特征的组合显示
  • 三、特征编码与数据标准化
  • 四、随机森林预测模型
  • 结论

  在当今社会,学生心理健康问题日益受到关注,尤其是抑郁症。抑郁症不仅影响学生的学业成绩,还可能对其身心健康造成长期影响。因此,早期识别和预防学生抑郁症具有重要意义。本文将介绍如何使用可视化分析来探索学生抑郁数据,并利用随机森林(Random Forest, RF)算法进行预测。

一、数据获取与预处理

1.1 导入分析库

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import warnings 
warnings.filterwarnings('ignore')

from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score,precision_score,recall_score

1.2 导入数据

df=pd.read_csv("Depression Student Dataset.csv")
df.head(5)

1.3 数据基本分析


  从上面可以发现,数据的shape为(502,10),且没有缺失值的存在;数据列分别表示性别、年龄、学习压力、学习满意度、睡眠时间、饮食习惯、是否有过自杀的念头、学习时间、经济压力、精神疾病家族史、是否抑郁。

二、数据可视化分析

2.1 性别分布

  通过可视化分析,我们可以首先了解数据集中学生的性别分布。

plt.figure(figsize=(10, 6))
sns.countplot(data=df, x="Gender", palette="pastel")
plt.title("性别分布", fontsize=14)
plt.xlabel("性别", fontsize=12)
plt.ylabel("人数", fontsize=12)
plt.show()

2.2 不同性别抑郁情况分布

  接下来,我们可以分析不同性别学生的抑郁情况分布。

plt.figure(figsize=(10, 6))
sns.countplot(data=df, x="Gender", hue="Depression", palette="Set2")
plt.title("不同性别抑郁情况分布", fontsize=14)
plt.xlabel("性别", fontsize=12)
plt.ylabel("人数", fontsize=12)
plt.legend(title="是否抑郁")
plt.show()

2.3 不同睡眠时长与抑郁情况的关系

  睡眠时长与抑郁情况的关系也是一个重要的分析点。

plt.figure(figsize=(17, 10))
sns.countplot(data=df, x="Sleep Duration", hue="Depression", palette="Set1")
plt.title("不同睡眠时长与抑郁情况的关系", fontsize=14)
plt.xlabel("睡眠时间", fontsize=12)
plt.ylabel("人数", fontsize=12)
plt.legend(title="是否抑郁")
plt.show()

2.4 学习压力与抑郁的关系

  学习压力是影响学生抑郁的重要因素之一。

plt.figure(figsize=(10, 8))
sns.boxplot(data=df, x="Depression", y="Academic Pressure", palette="coolwarm")
plt.title("学习压力与抑郁的关系", fontsize=14)
plt.xlabel("是否抑郁", fontsize=12)
plt.ylabel("学习压力", fontsize=12)
plt.show()

2.5 年龄分布与抑郁情况的关系

  最后,我们可以分析年龄分布与抑郁情况的关系。

plt.figure(figsize=(12, 8))
sns.violinplot(data=df, x="Depression", y="Age", palette="muted")
plt.title("年龄分布与抑郁情况的关系", fontsize=14)
plt.xlabel("是否抑郁", fontsize=12)
plt.ylabel("年龄", fontsize=12)
plt.tight_layout()
plt.show()

2.6 其它多特征的组合显示

sns.pairplot(df, kind="scatter", hue="Depression", palette="Set1")

三、特征编码与数据标准化

  在进行机器学习模型训练之前,我们需要对类别变量进行编码,并对数值变量进行标准化。

# 创建标签编码器
label_encoder = LabelEncoder()

# 将类别变量转换为数值
df['Gender'] = label_encoder.fit_transform(df['Gender'])
df['Depression'] = label_encoder.fit_transform(df['Depression'])
df['Sleep Duration'] = label_encoder.fit_transform(df['Sleep Duration'])
df['Dietary Habits'] = label_encoder.fit_transform(df['Dietary Habits'])
df['Have you ever had suicidal thoughts ?'] = label_encoder.fit_transform(df['Have you ever had suicidal thoughts ?'])
df['Family History of Mental Illness'] = label_encoder.fit_transform(df['Family History of Mental Illness'])

# 标准化数值变量
scaler = StandardScaler()
df[['Age', 'Academic Pressure', 'Study Satisfaction', 'Study Hours', 'Financial Stress']] = scaler.fit_transform(df[['Age', 'Academic Pressure', 'Study Satisfaction', 'Study Hours', 'Financial Stress']])

  划分数据集

# 特征和目标变量
X = df.drop('Depression', axis=1)  # 去掉目标变量
y = df['Depression']  # 目标变量

# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

四、随机森林预测模型

  在数据预处理完成后,我们可以使用随机森林算法进行抑郁情况的预测。

# 创建并训练随机森林分类器
clf = RandomForestClassifier(random_state=42)
clf.fit(X_train, y_train)
 
# 进行预测
y_pred = clf.predict(X_test)


# 评估模型性能
accuracy_rf = accuracy_score(y_test, y_pred)
print(f"RF模型准确率: {accuracy_rf:.2f}")
print(classification_report(y_test, y_pred))

  混淆矩阵

cm = confusion_matrix(y_test, y_pred)
# 绘制混淆矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_)
plt.title('混淆矩阵')
plt.xlabel('预测类别')
plt.ylabel('实际类别')
plt.show()

  特征重要度

# 获取特征重要度
feature_importances = clf.feature_importances_

# 绘制特征重要度图
plt.figure(figsize=(10, 6))
ax = sns.barplot(x=df.columns.tolist()[:-1], y=feature_importances, palette="viridis")
ax.set_xticklabels(ax.get_xticklabels(), rotation=120)
plt.title('Feature Importances')
plt.xlabel('Importance')
plt.ylabel('Feature Index')
plt.show()

结论

  通过对学生抑郁数据的可视化分析,我们了解了不同特征与学生抑郁情况之间的关系。其中Academic Pressure和Have you ever had suicidal thoughts ?两个特征是导致学生抑郁的两个重要的因素。


http://www.kler.cn/a/501987.html

相关文章:

  • STM32之LWIP网络通讯设计-下(十五)
  • 【1】Word:邀请函
  • 【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿
  • qt 快捷功能 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 查看父类及父类中的虚函数
  • SQL UNION 操作符
  • Qt资源文件以及文件加密
  • 迁移WSL中的ext4.vhdx文件
  • MATLAB与Python中的快速傅里叶变换频谱分析
  • R9000P发热严重
  • 聚铭网络当选中关村华安关键信息基础设施安全保护联盟理事单位
  • 2Hive表类型
  • 计算机网络 | 什么是公网、私网、NAT?
  • Linux:线程的互斥与同步
  • 基于微信小程序的食堂线上预约点餐系统设计与实现(LW+源码+讲解)
  • 【计算机网络】深入浅出计算机网络
  • windows动态壁纸音频显示效果推荐
  • 【C++补充】第二弹---深度解析布隆过滤器与海量数据处理策略
  • Windows电脑本地安装并随时随地远程使用MusicGPT生成AI音乐
  • MySQL不使用子查询的原因
  • 《拉依达的嵌入式\驱动面试宝典》—操作系统篇(三)
  • 服务器证书、数字证书和加解密算法
  • Java中private和static同时使用会出现什么情况?
  • B+树的原理及实现
  • 2025广州国际汽车内外饰技术展览会:引领汽车内外饰发展新潮流-Automotive Interiors
  • 什么叫区块链?怎么保证区块链的安全性?
  • 用队列实现栈和用栈实现队列(下)