🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通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 ?两个特征是导致学生抑郁的两个重要的因素。