基于大数据的压力检测数据分析系统 | 30天搭建压力检测数据分析系统:从Hadoop集群到Spark数据处理全流程详解

11 阅读6分钟

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

基于大数据的压力检测数据分析系统介绍

压力检测数据分析系统是一个基于大数据技术的综合性压力评估平台,采用Hadoop+Spark分布式计算架构处理海量压力相关数据。系统通过Python和Java双语言支持,后端采用Django和Spring Boot框架,前端使用Vue+ElementUI+Echarts技术栈实现直观的数据可视化界面。系统核心功能包括个人中心管理、用户权限控制、综合压力分析、压力水平评估、生活方式压力关联分析、人格特质与压力相关性分析以及生理指标压力监测等模块。通过Spark SQL和Pandas进行数据清洗与特征提取,结合NumPy进行数值计算,将处理后的结果存储在MySQL数据库中,并通过Echarts图表组件实现多维度数据展示。系统能够对用户的压力状态进行全方位评估,为压力管理提供科学依据和个性化建议,适用于心理健康监测、压力预警以及健康管理等应用场景。

基于大数据的压力检测数据分析系统演示视频

演示视频

基于大数据的压力检测数据分析系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于大数据的压力检测数据分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, when, count, sum as spark_sum
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.stat import Correlation
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
from datetime import datetime, timedelta

spark = SparkSession.builder.appName("PressureAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()

@csrf_exempt
def comprehensive_pressure_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        user_id = data.get('user_id')
        time_range = data.get('time_range', 30)
        end_date = datetime.now()
        start_date = end_date - timedelta(days=time_range)
        
        pressure_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/pressure_db").option("dbtable", "pressure_records").option("user", "root").option("password", "password").load()
        filtered_df = pressure_df.filter((col("user_id") == user_id) & (col("record_date") >= start_date) & (col("record_date") <= end_date))
        
        overall_stats = filtered_df.agg(
            avg("stress_score").alias("avg_stress"),
            avg("anxiety_level").alias("avg_anxiety"),
            avg("sleep_quality").alias("avg_sleep"),
            count("*").alias("total_records")
        ).collect()[0]
        
        daily_trends = filtered_df.groupBy("record_date").agg(
            avg("stress_score").alias("daily_stress"),
            avg("heart_rate").alias("daily_hr"),
            avg("blood_pressure_sys").alias("daily_bp")
        ).orderBy("record_date")
        
        trend_data = []
        for row in daily_trends.collect():
            trend_data.append({
                'date': row['record_date'].strftime('%Y-%m-%d'),
                'stress': round(row['daily_stress'], 2),
                'heart_rate': round(row['daily_hr'], 2),
                'blood_pressure': round(row['daily_bp'], 2)
            })
        
        stress_distribution = filtered_df.select(
            when(col("stress_score") <= 3, "低压力").when((col("stress_score") > 3) & (col("stress_score") <= 6), "中等压力").otherwise("高压力").alias("stress_level")
        ).groupBy("stress_level").count().collect()
        
        distribution_result = {}
        total_count = sum([row['count'] for row in stress_distribution])
        for row in stress_distribution:
            distribution_result[row['stress_level']] = {
                'count': row['count'],
                'percentage': round((row['count'] / total_count) * 100, 2)
            }
        
        correlation_data = filtered_df.select("stress_score", "sleep_quality", "exercise_frequency", "work_hours").toPandas()
        correlation_matrix = correlation_data.corr().to_dict()
        
        result = {
            'status': 'success',
            'overall_stats': {
                'avg_stress': round(overall_stats['avg_stress'], 2),
                'avg_anxiety': round(overall_stats['avg_anxiety'], 2),
                'avg_sleep': round(overall_stats['avg_sleep'], 2),
                'total_records': overall_stats['total_records']
            },
            'daily_trends': trend_data,
            'stress_distribution': distribution_result,
            'correlation_analysis': correlation_matrix
        }
        return JsonResponse(result)

@csrf_exempt
def lifestyle_pressure_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        user_id = data.get('user_id')
        analysis_type = data.get('analysis_type', 'comprehensive')
        
        lifestyle_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/pressure_db").option("dbtable", "lifestyle_records").option("user", "root").option("password", "password").load()
        user_lifestyle = lifestyle_df.filter(col("user_id") == user_id)
        
        sleep_analysis = user_lifestyle.groupBy("sleep_duration_category").agg(
            avg("stress_score").alias("avg_stress"),
            count("*").alias("record_count")
        ).collect()
        
        sleep_results = {}
        for row in sleep_analysis:
            category = row['sleep_duration_category']
            sleep_results[category] = {
                'avg_stress': round(row['avg_stress'], 2),
                'count': row['record_count']
            }
        
        exercise_analysis = user_lifestyle.groupBy("exercise_frequency").agg(
            avg("stress_score").alias("avg_stress"),
            avg("mood_score").alias("avg_mood")
        ).collect()
        
        exercise_results = {}
        for row in exercise_analysis:
            frequency = row['exercise_frequency']
            exercise_results[frequency] = {
                'avg_stress': round(row['avg_stress'], 2),
                'avg_mood': round(row['avg_mood'], 2)
            }
        
        diet_impact = user_lifestyle.select(
            "diet_quality",
            "caffeine_intake",
            "alcohol_consumption",
            "stress_score"
        ).toPandas()
        
        diet_correlation = diet_impact.corr()['stress_score'].to_dict()
        
        work_life_balance = user_lifestyle.groupBy("work_hours_category").agg(
            avg("stress_score").alias("avg_work_stress"),
            avg("family_time").alias("avg_family_time"),
            avg("leisure_time").alias("avg_leisure_time")
        ).collect()
        
        balance_results = {}
        for row in work_life_balance:
            category = row['work_hours_category']
            balance_results[category] = {
                'work_stress': round(row['avg_work_stress'], 2),
                'family_time': round(row['avg_family_time'], 2),
                'leisure_time': round(row['avg_leisure_time'], 2)
            }
        
        lifestyle_recommendations = []
        if sleep_results.get('insufficient', {}).get('avg_stress', 0) > 6:
            lifestyle_recommendations.append("建议改善睡眠质量,保证充足睡眠时间")
        if exercise_results.get('rarely', {}).get('avg_stress', 0) > 5:
            lifestyle_recommendations.append("增加运动频率有助于缓解压力")
        if diet_correlation.get('caffeine_intake', 0) > 0.3:
            lifestyle_recommendations.append("考虑减少咖啡因摄入量")
        
        result = {
            'status': 'success',
            'sleep_analysis': sleep_results,
            'exercise_analysis': exercise_results,
            'diet_correlation': diet_correlation,
            'work_life_balance': balance_results,
            'recommendations': lifestyle_recommendations
        }
        return JsonResponse(result)

@csrf_exempt
def physiological_pressure_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        user_id = data.get('user_id')
        analysis_period = data.get('period', 'week')
        
        physio_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/pressure_db").option("dbtable", "physiological_data").option("user", "root").option("password", "password").load()
        user_physio = physio_df.filter(col("user_id") == user_id)
        
        heart_rate_analysis = user_physio.select(
            "heart_rate_rest",
            "heart_rate_max",
            "heart_rate_variability",
            "stress_indicator"
        )
        
        hr_stats = heart_rate_analysis.agg(
            avg("heart_rate_rest").alias("avg_rest_hr"),
            avg("heart_rate_max").alias("avg_max_hr"),
            avg("heart_rate_variability").alias("avg_hrv")
        ).collect()[0]
        
        blood_pressure_trends = user_physio.groupBy("measurement_date").agg(
            avg("systolic_pressure").alias("avg_systolic"),
            avg("diastolic_pressure").alias("avg_diastolic"),
            avg("stress_score").alias("daily_stress")
        ).orderBy("measurement_date")
        
        bp_trend_data = []
        for row in blood_pressure_trends.collect():
            bp_trend_data.append({
                'date': row['measurement_date'].strftime('%Y-%m-%d'),
                'systolic': round(row['avg_systolic'], 2),
                'diastolic': round(row['avg_diastolic'], 2),
                'stress': round(row['daily_stress'], 2)
            })
        
        stress_threshold_analysis = user_physio.select(
            when(col("heart_rate_rest") > 80, 1).otherwise(0).alias("high_rest_hr"),
            when(col("systolic_pressure") > 130, 1).otherwise(0).alias("high_bp"),
            when(col("heart_rate_variability") < 30, 1).otherwise(0).alias("low_hrv"),
            "stress_score"
        )
        
        threshold_stats = stress_threshold_analysis.agg(
            spark_sum("high_rest_hr").alias("high_hr_count"),
            spark_sum("high_bp").alias("high_bp_count"),
            spark_sum("low_hrv").alias("low_hrv_count"),
            count("*").alias("total_measurements")
        ).collect()[0]
        
        physiological_features = user_physio.select("heart_rate_rest", "systolic_pressure", "diastolic_pressure", "heart_rate_variability", "stress_score")
        feature_assembler = VectorAssembler(inputCols=["heart_rate_rest", "systolic_pressure", "diastolic_pressure", "heart_rate_variability"], outputCol="features")
        feature_df = feature_assembler.transform(physiological_features)
        
        correlation_matrix = Correlation.corr(feature_df, "features").head()[0].toArray()
        
        stress_indicators = {
            'heart_rate_status': 'normal' if hr_stats['avg_rest_hr'] <= 80 else 'elevated',
            'blood_pressure_status': 'normal' if all(bp['systolic'] <= 130 for bp in bp_trend_data[-7:]) else 'attention_needed',
            'hrv_status': 'good' if hr_stats['avg_hrv'] >= 30 else 'poor',
            'overall_risk': 'low' if threshold_stats['high_hr_count'] + threshold_stats['high_bp_count'] <= 2 else 'moderate'
        }
        
        result = {
            'status': 'success',
            'heart_rate_stats': {
                'avg_rest_hr': round(hr_stats['avg_rest_hr'], 2),
                'avg_max_hr': round(hr_stats['avg_max_hr'], 2),
                'avg_hrv': round(hr_stats['avg_hrv'], 2)
            },
            'blood_pressure_trends': bp_trend_data,
            'threshold_analysis': {
                'high_hr_percentage': round((threshold_stats['high_hr_count'] / threshold_stats['total_measurements']) * 100, 2),
                'high_bp_percentage': round((threshold_stats['high_bp_count'] / threshold_stats['total_measurements']) * 100, 2),
                'low_hrv_percentage': round((threshold_stats['low_hrv_count'] / threshold_stats['total_measurements']) * 100, 2)
            },
            'stress_indicators': stress_indicators,
            'correlation_analysis': correlation_matrix.tolist()
        }
        return JsonResponse(result)

基于大数据的压力检测数据分析系统文档展示

在这里插入图片描述

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目