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

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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,一经查实,立即删除!

相关文章

python【数据结构】

1. 列表 Python 中列表是可变的,这是它区别于字符串和元组的最重要的特点;即,列表可以修改,而字符串和元组不能。 以下是 Python 中列表的方法: 方法描述list.append(x)把一个元素添加到列表的结尾,相当…

Linux 智能化系统

智能化家庭温度控制系统 树莓派(Raspberry Pi):这是一个小型的、基于 Linux 的计算机开发板。它可以作为智能家居系统的核心控制单元。 温度传感器(DHT11):用于测量环境温度。这种传感器价格便宜&#xf…

STM32 拓展 RTC案例1:使用闹钟唤醒待机模式 (HAL库)

需求描述 执行完毕正常代码之后,让MCU进入待机模式,设置闹钟,自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。 应用场景:比如设计一个野外温度自动采集的设备,规定每小时采集一次温度,就可…

微服务保护——Sentinel

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

[python3]Excel解析库-xlutils

xlutils 是一组用于处理 Excel 文件的 Python 库,它实际上是 xlrd 和 xlwt 的扩展,提供了额外的功能来操作 Excel 文件。xlutils 主要由三个部分组成:xlutils.copy、xlutils.filter 和 xlutils.view,它们分别用于复制和修改现有 E…

C# 值类型和引用类型详解

简介 在 C# 中,值类型和引用类型是两个基础的数据类型类别,它们的主要区别在于 存储位置 和 赋值方式。 值类型 值类型存储的是数据本身,分配在 栈 (Stack) 中。当一个值类型变量被赋值给另一个变量时,会复制值。 值类型的特点…

福建双色荷花提取颜色

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

利用Python爬虫获取API接口:探索数据的力量

引言 在当今数字化时代,数据已成为企业、研究机构和个人获取信息、洞察趋势和做出决策的重要资源。Python爬虫作为一种高效的数据采集工具,能够帮助我们自动化地从互联网上获取大量的数据。而API接口作为数据获取的重要途径之一,为我们提供了…

基于C语言的卡丁车管理系统【控制台应用程序】

注意:需要提前创建对应的.dat文件 本项目实现了数据的永久存储,有用户的注册、登录。 管理员对卡丁车的管理、查看预约用户、修改帐户权限。 用户对个人信息的管理、查看并预约卡丁车、卡丁车维修上报。 维修员对卡丁车的维修状态上报、个人信息管理。 …

推荐系统评估指标综合指南

如何用 Hitrate、Precisionk 等指标优化你的推荐系统 引言 为了更好地理解和优化推荐系统的性能,本文将深入探讨五个关键的评估指标:Hitrate、Precisionk、Recallk、NDCG(归一化折损累积增益)以及MRR(平均倒数排名&a…

tdengine数据库使用java连接

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

pyqt鸟瞰

QApplication‌是Qt框架中的一个类&#xff0c;专门用于管理基于QWidget的图形用户界面&#xff08;GUI&#xff09;应用程序的控制流和主要设置。QApplication类继承自QGuiApplication&#xff0c;提供了许多与GUI相关的功能&#xff0c;如窗口系统集成、事件处理等。 QAppli…

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;密钥对就建好了。 接着用命令…

HTML5 弹跳动画(Bounce Animation)详解

HTML5 弹跳动画&#xff08;Bounce Animation&#xff09;详解 弹跳动画是一种动态效果&#xff0c;使元素在出现或消失时看起来像是在跳动。这种效果可以通过 CSS 动画或 JavaScript 来实现&#xff0c;增强用户体验。 1. 使用 CSS 实现弹跳动画 可以使用 CSS 的 keyframes…

【Apache Paimon】-- 14 -- Spark 集成 Paimon 之 Filesystem Catalog 与 Hive Catalog 实践

目录 1. 背景介绍 2. 环境准备 2.1、技术栈说明 2.2、环境依赖 2.3、硬件与软件环境 2.4、主要工具清单 2.5、Maven 项目结构 2.6、maven pom.xml 依赖 3. Spark 与 Paimon Filesystem Catalog 集成 3.1、HDFS FileSystem catalog 3.1.1、代码内容 3.1.2、运行输出…

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

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

SQL语言的数据库交互

SQL语言的数据库交互 在当今的信息时代&#xff0c;数据的管理和处理变得越来越重要&#xff0c;而结构化查询语言&#xff08;SQL&#xff09;作为一种用于管理关系型数据库的标准语言&#xff0c;其重要性愈加凸显。本文将深入探讨SQL语言的基本概念、主要功能、常见语法以及…

Java类加载机制

类加载机制 类加载机制类加载的过程加载&#xff08;Loading&#xff09;验证&#xff08;Verification&#xff09;准备&#xff08;Preparation&#xff09;解析&#xff08;Resolution&#xff09;初始化&#xff08;Initialization&#xff09; 类加载器启动类加载器扩展类…