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

基于心理健康与数字行为数据的多维度分析

基于心理健康与数字行为数据的多维度分析

背景

随着数字设备的普及,人们在日常生活中的数字行为(如屏幕时间、社交媒体使用、通知数量等)与心理健康之间的关系逐渐受到关注。

本案例旨在通过机器学习方法,分析数字行为与心理健康指标之间的关系,并探索潜在的模式和趋势。

数据说明

数据集包含500个模拟数据点,涵盖以下字段:

daily_screen_time_min:每天使用屏幕的总时间(分钟)。

num_app_switches:一天内切换应用程序的次数。

sleep_hours:每天睡眠的小时数。

notification_count:一天内收到的通知数量。

social_media_time_min:每天在社交媒体上花费的时间(分钟)。

focus_score:自我报告的注意力得分(1-10分,1分非常分心,10分高度集中)。

mood_score:自我报告的情绪得分(1-10分,1分非常低落,10分非常愉快)。

anxiety_level:自我报告的焦虑水平(1-10分,1分低焦虑,10分高焦虑)。

digital_wellbeing_score:基于注意力、睡眠和焦虑水平计算的综合得分,分数越高表示越幸福。

需求

• 相关性分析:计算数字行为特征与心理健康指标之间的相关性。

• 回归分析:使用线性回归模型预测focus_score

• 分类分析:将用户划分为低、中、高焦虑水平的类别,并使用逻辑回归进行分类。

• 聚类分析:使用K-Means聚类算法对用户进行分组,探索用户行为和心理健康的潜在模式。

• 可视化:绘制相关性热图、回归预测结果图、分类混淆矩阵和聚类结果图。

导包

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.cluster import KMeans
from sklearn.metrics import mean_squared_error, classification_report, confusion_matrix, silhouette_score# 设置使用的CPU核心数(根据实际情况调整,建议为逻辑核心数的一半)
os.environ["LOKY_MAX_CPU_COUNT"] = "4"# 加载数据
data = pd.read_csv('data/07/mental_health_digital_behavior_data.csv')# 数据概览
print(data.head())
   daily_screen_time_min  num_app_switches  sleep_hours  notification_count  \
0                  389.8                53          5.9                  89   
1                  351.7                52          7.2                  79   
2                  398.9                39          8.0                 108   
3                  451.4                44          6.5                  78   
4                  346.0                43          6.9                  35   social_media_time_min  focus_score  mood_score  anxiety_level  \
0                  133.2          6.8         8.9           10.0   
1                  109.5          5.5         9.4           10.0   
2                   84.7          6.7         9.4            9.4   
3                   88.9          6.0         9.4            5.1   
4                   78.8          8.2         9.4            8.0   digital_wellbeing_score  
0                     44.8  
1                     43.6  
2                     52.6  
3                     58.4  
4                     59.7  

1. 相关性分析

# 1. 相关性分析
correlation_matrix = data.corr()
plt.figure(figsize=(12, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Correlation Heatmap')
# plt.xticks(rotation=30)  # 旋转 X 轴标签 30 度
plt.show()

scilkit-learn 相关性分析

2. 回归分析:预测 focus_score

# 2. 回归分析:预测 focus_score
# 特征选择
features = ['daily_screen_time_min', 'num_app_switches', 'sleep_hours', 'notification_count', 'social_media_time_min']
X = data[features]
y = data['focus_score']# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 模型训练
regressor = LinearRegression()
regressor.fit(X_train, y_train)# 模型预测
y_pred = regressor.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error for Focus Score Prediction: {mse:.2f}')# 可视化回归结果
plt.scatter(y_test, y_pred)
plt.xlabel('Actual Focus Score')
plt.ylabel('Predicted Focus Score')
plt.title('Regression Prediction')
plt.show()
Mean Squared Error for Focus Score Prediction: 0.23

scilkit-learn 线性回归

3. 分类分析:将用户划分为低、中、高焦虑水平

# 3. 分类分析:将用户划分为低、中、高焦虑水平
data['anxiety_category'] = pd.cut(data['anxiety_level'], bins=[0, 3, 7, 10], labels=['Low', 'Medium', 'High'])# 特征选择
X = data[features]
y = data['anxiety_category']# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 模型训练
classifier = LogisticRegression(max_iter=5000, solver='liblinear', C=1.0, random_state=42)
classifier.fit(X_train, y_train)# 模型预测
y_pred = classifier.predict(X_test)# 评估模型
print(classification_report(y_test, y_pred, zero_division=0))  # 设置 zero_division 参数
conf_matrix = confusion_matrix(y_test, y_pred)
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')
plt.xlabel('Predicted Anxiety Level')
plt.ylabel('Actual Anxiety Level')
plt.title('Confusion Matrix')
plt.show()
              precision    recall  f1-score   supportHigh       0.80      1.00      0.89        78Low       0.00      0.00      0.00         1Medium       1.00      0.10      0.17        21accuracy                           0.80       100macro avg       0.60      0.37      0.35       100
weighted avg       0.83      0.80      0.73       100

scilkit-learn

4. 聚类分析:使用 K-Means 对用户进行分组

# 4. 聚类分析:使用 K-Means 对用户进行分组
# 特征选择
X = data[features]# 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
data['cluster'] = kmeans.fit_predict(X)# 聚类结果可视化
sns.scatterplot(data=data, x='daily_screen_time_min', y='focus_score', hue='cluster', palette='viridis')
plt.title('K-Means Clustering')
plt.show()# 评估聚类效果
silhouette_avg = silhouette_score(X, data['cluster'])
print(f'Silhouette Score: {silhouette_avg:.2f}')

scikit-learn K-Means 聚类模型

Silhouette Score: 0.26
http://www.xdnf.cn/news/683407.html

相关文章:

  • JAVA运算符详解
  • Oracle向PG转移建议以及注意点
  • 57页 @《人工智能生命体 新启点》中國龍 原创连载
  • IvorySQL 核心技术解读:双 Parser 架构如何定义数据库兼容性?
  • python训练营打卡第36天
  • 竞赛小算法总结(二):gcdlcm,拓展欧几里得线性同余,逆元(含代码详解)
  • AE的ai图层导到Ai
  • spring4第2课-ioc控制反转-依赖注入,是为了解决耦合问题
  • WIN10 安装dify ollama搭建工作流agent
  • 两种主流检索技术:BM25(基于关键词匹配)和向量相似度检索
  • LVGL(Flex布局)
  • Docker修改镜像存放位置
  • qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据
  • vue2轮播图组件
  • 计算机网络实验课(二)——抓取网络数据包,并实现根据条件过滤抓取的以太网帧,分析帧结构
  • 如何检查液质联用仪LCMS的真空度
  • 提升前端性能:减少DOM操作
  • 在线项目管理工具对比:Trello、Worktile等20款软件测评
  • Java的Spring Cloud生态中实现SSE(Server-Sent Events)服务端实践
  • YoloV11改进策略:卷积篇-风车卷积-即插即用
  • 代码随想录算法训练营第60期第四十九天打卡
  • day05-常用API(二):Lambda、方法引用详解
  • Python装饰器与异常捕获的高级用法详解
  • 基于 STM32 的农村污水处理控制系统设计与实现
  • @vue/composition-api
  • uniapp-商城-72-shop(5-商品列表,购物车实现回顾)
  • Linux 6.15 内核发布,新功能
  • 【免费】【无需登录/关注】坐标系批量转换与可视化网页工具
  • 31. 自动化测试开发之实现INI配置文件解析
  • 从CPU缓存出发对引用池进行优化