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

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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.mzph.cn/news/892301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务保护——Sentinel

什么是微服务保护? 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分&#xff1a…

福建双色荷花提取颜色

提取指定颜色 HSV双色荷花代码验证 参照《OpenCV图像处理技术》 HSV 要用HSV的色调、饱和度和亮度来提取指定颜色。 双色荷花 农林大学金山校区观音湖 代码 import cv2 import numpy as npimgcv2.imread("./sucai6/hua.jpg") cv2.imshow("SRC",img) h…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法

5G网速虽快&#xff0c;手机功耗也大。 1.取消MIUI强制的5G&#xff0c;手动设置4G的方法&#xff01; 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后&#xff0c;被强制连5G&#xff0c;手动设置开关被隐藏&#xff0c;如下图&#xff1a; 1…

pikachu - Cross-Site Scripting(XSS)

pikachu - Cross-Site Scripting&#xff08;XSS&#xff09; 声明&#xff01; 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#x…

部署:上传项目代码 配置数据库

一、上传代码 1、使用git 可以使用Git Clone。使用前&#xff0c;在服务器上也要创建秘钥对。这里的密钥对&#xff0c;是专门用来读取Git仓库的。 在宝塔上&#xff0c;点击终端。进来后&#xff0c;运行 ssh-keygen还是一路回车&#xff0c;密钥对就建好了。 接着用命令…

时敏软件定义网络的服务保证

论文标题&#xff1a; Service Guarantees for Time-Sensitive Software-Defined Networks作者信息&#xff1a; Weijiang Kong论文出处&#xff1a; Eindhoven University of Technology, 2025年1月20日 摘要&#xff1a; 在过去十年中&#xff0c;随着半导体技术的进步和对更…

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…

嵌入式入门Day40

C Day3 C对C的结构体的扩充类this指针类的大小类中的特殊成员函数构造函数 作业 C对C的结构体的扩充 C语言中的结构体&#xff0c;仅仅只是属性&#xff08;变量&#xff09;的聚合体&#xff0c;不可以在结构体中定义行为&#xff08;函数&#xff09;。如果非要在结构体中定…

《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识

目录 2.1 几何学 向量的内积和外积 旋转矩阵 旋转向量 四元数 李群和李代数 SO(3)上的 BCH 线性近似式 2.2 运动学 李群视角下的运动学 SO(3) t 上的运动学 线速度和加速度 扰动模型和雅可比矩阵 典型算例&#xff1a;对向量进行旋转 典型算例&#xff1a;旋转的复合 2.3 …

C语言教程——指针进阶(1)

目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针 3.2&数组名VS数组名 3.3数组指针的使用 4、数组参数、指针参数 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指针传参 4.5总结 5、函数指针 5.1思考 总结 前言 我们在之前知道指针…

[应用类App] 轮廓线 aia源码 UI界面精美,画布实现手柄摇杆

屏幕数量&#xff1a;10个&#xff0c;仅主界面近3000代码块&#xff0c;请自行研究参考。 实现了手柄摇杆功能&#xff0c;界面做的比较好。 下载地址&#xff1a;轮廓线 aia源码 UI界面精美&#xff0c;画布实现手柄摇杆 - .aia 案例源码 - 清泛IT社区&#xff0c;为创新赋能…

C++—9、如何在Microsoft Visual Studio中调试C++

本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示

使用Beetl开发网页时&#xff0c;在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下&#xff1a; &#xff08;1&#xff09;首先Spring Security框架需要允许js、css、图片资源免授权访问。 &#xff08;2&#xff09;网站开发时&#xff0…

GetMaterialApp组件的功能与用法

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…

【嵌入式硬件】嵌入式显示屏接口

数字显示串行接口&#xff08;Digital Display Serial Interface&#xff09; SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备&#xff0c;下面是接口…

(STM32笔记)十二、DMA的基础知识与用法 第三部分

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 DMA的基础知识与用法 三、DMA程序验证1、DMA 存储器到存储器模式实验&#xff08;1&#xff09;DMA结构体解释&#xff08;2…

MySQL 如何赶上 PostgreSQL 的势头?

原文地址 我与 MySQL 社区的前辈交谈时&#xff0c;经常遇到这个问题&#xff1a;「为什么 MySQL 这么棒&#xff0c;而且&#xff08;至少根据 DB-Engines 的计算&#xff09;仍然比 PostgreSQL 更流行&#xff1b;但它的地位在下降&#xff0c;PostgreSQL 却势不可挡地越来越…

完全二叉树的删除

&#xff08;1&#xff09;删除叶子节点 找到要删除的节点 targetNode找到要删除节点的父节点parent&#xff08;父节点是否存在&#xff09;要删除的节点是父节点的左子树还是右子树如果是左子树&#xff0c;则parent.leftnull;如果是右子树则parent.rightnull。 &#xff08;…