基于大数据的人体生理指标管理数据分析系统 | 还在为大数据毕设发愁?人体生理指标数据分析系统:Hadoop+Spark+Django完整解决方案

48 阅读9分钟

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

基于大数据的人体生理指标管理数据分析系统介绍

人体生理指标管理数据分析系统是一款基于大数据技术栈构建的健康数据管理与分析平台,采用Hadoop分布式存储架构和Spark内存计算引擎处理海量生理数据,实现高效的数据存储、处理和分析功能。系统前端采用Vue框架结合ElementUI组件库和Echarts可视化工具,为用户提供直观友好的操作界面和丰富的图表展示效果。后端基于Django框架开发,利用Python强大的数据处理能力,集成Pandas和NumPy科学计算库进行深度数据分析。系统核心功能涵盖个人中心管理、基础生理指标分析、健康状况综合评估、生活方式数据分析等模块,通过MySQL数据库存储用户基础信息,同时利用HDFS分布式文件系统管理大规模生理数据文件。系统支持多维度健康指标的实时监控与历史趋势分析,能够对用户的血压、心率、体温、血糖等关键生理参数进行智能化处理,通过Spark SQL引擎实现复杂的数据查询和统计分析,为用户提供个性化的健康管理建议和风险预警提示。

基于大数据的人体生理指标管理数据分析系统演示视频

演示视频

基于大数据的人体生理指标管理数据分析系统演示图片

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

基于大数据的人体生理指标管理数据分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views import View
import json
from datetime import datetime, timedelta
spark = SparkSession.builder.appName("HealthDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
class BasicPhysiologicalAnalysisView(View):
    def post(self, request):
        data = json.loads(request.body)
        user_id = data.get('user_id')
        start_date = data.get('start_date')
        end_date = data.get('end_date')
        hdfs_path = f"hdfs://localhost:9000/health_data/user_{user_id}/"
        df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "physiological_data.csv")
        filtered_df = df.filter((col("record_date") >= start_date) & (col("record_date") <= end_date))
        blood_pressure_stats = filtered_df.agg(
            avg("systolic_pressure").alias("avg_systolic"),
            avg("diastolic_pressure").alias("avg_diastolic"),
            max("systolic_pressure").alias("max_systolic"),
            max("diastolic_pressure").alias("max_diastolic"),
            min("systolic_pressure").alias("min_systolic"),
            min("diastolic_pressure").alias("min_diastolic")
        ).collect()[0]
        heart_rate_analysis = filtered_df.agg(
            avg("heart_rate").alias("avg_heart_rate"),
            stddev("heart_rate").alias("heart_rate_variance"),
            count(when(col("heart_rate") > 100, True)).alias("high_heart_rate_count"),
            count(when(col("heart_rate") < 60, True)).alias("low_heart_rate_count")
        ).collect()[0]
        temperature_trends = filtered_df.select("record_date", "body_temperature").orderBy("record_date")
        temperature_pandas_df = temperature_trends.toPandas()
        temperature_pandas_df['temperature_ma'] = temperature_pandas_df['body_temperature'].rolling(window=7).mean()
        abnormal_temp_count = len(temperature_pandas_df[(temperature_pandas_df['body_temperature'] > 37.5) | (temperature_pandas_df['body_temperature'] < 36.0)])
        blood_sugar_levels = filtered_df.select("blood_sugar", "measurement_time").filter(col("blood_sugar").isNotNull())
        fasting_sugar = blood_sugar_levels.filter(col("measurement_time") == "fasting").agg(avg("blood_sugar").alias("avg_fasting_sugar")).collect()[0]["avg_fasting_sugar"]
        postprandial_sugar = blood_sugar_levels.filter(col("measurement_time") == "postprandial").agg(avg("blood_sugar").alias("avg_postprandial_sugar")).collect()[0]["avg_postprandial_sugar"]
        risk_indicators = {
            "hypertension_risk": 1 if blood_pressure_stats["avg_systolic"] > 140 or blood_pressure_stats["avg_diastolic"] > 90 else 0,
            "diabetes_risk": 1 if fasting_sugar and fasting_sugar > 7.0 else 0,
            "cardiovascular_risk": 1 if heart_rate_analysis["avg_heart_rate"] > 100 or heart_rate_analysis["heart_rate_variance"] > 15 else 0
        }
        analysis_result = {
            "blood_pressure_analysis": {
                "average_systolic": round(blood_pressure_stats["avg_systolic"], 2),
                "average_diastolic": round(blood_pressure_stats["avg_diastolic"], 2),
                "pressure_range": f"{blood_pressure_stats['min_systolic']}-{blood_pressure_stats['max_systolic']}/{blood_pressure_stats['min_diastolic']}-{blood_pressure_stats['max_diastolic']}"
            },
            "heart_rate_analysis": {
                "average_rate": round(heart_rate_analysis["avg_heart_rate"], 2),
                "rate_stability": "稳定" if heart_rate_analysis["heart_rate_variance"] < 10 else "波动较大",
                "abnormal_episodes": heart_rate_analysis["high_heart_rate_count"] + heart_rate_analysis["low_heart_rate_count"]
            },
            "temperature_analysis": {
                "trend_data": temperature_pandas_df[['record_date', 'body_temperature', 'temperature_ma']].to_dict('records'),
                "abnormal_count": abnormal_temp_count
            },
            "blood_sugar_analysis": {
                "fasting_average": round(fasting_sugar, 2) if fasting_sugar else None,
                "postprandial_average": round(postprandial_sugar, 2) if postprandial_sugar else None
            },
            "risk_assessment": risk_indicators
        }
        return JsonResponse({"status": "success", "data": analysis_result})
class HealthStatusAnalysisView(View):
    def post(self, request):
        data = json.loads(request.body)
        user_id = data.get('user_id')
        analysis_period = data.get('period', 30)
        hdfs_path = f"hdfs://localhost:9000/health_data/user_{user_id}/"
        physiological_df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "physiological_data.csv")
        lifestyle_df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "lifestyle_data.csv")
        end_date = datetime.now()
        start_date = end_date - timedelta(days=analysis_period)
        recent_data = physiological_df.filter(
            (col("record_date") >= start_date.strftime("%Y-%m-%d")) & 
            (col("record_date") <= end_date.strftime("%Y-%m-%d"))
        )
        health_metrics = recent_data.agg(
            avg("systolic_pressure").alias("avg_systolic"),
            avg("diastolic_pressure").alias("avg_diastolic"),
            avg("heart_rate").alias("avg_heart_rate"),
            avg("body_temperature").alias("avg_temperature"),
            avg("blood_sugar").alias("avg_blood_sugar"),
            count("*").alias("total_records")
        ).collect()[0]
        lifestyle_metrics = lifestyle_df.filter(
            (col("record_date") >= start_date.strftime("%Y-%m-%d")) & 
            (col("record_date") <= end_date.strftime("%Y-%m-%d"))
        ).agg(
            avg("sleep_hours").alias("avg_sleep"),
            avg("exercise_minutes").alias("avg_exercise"),
            avg("water_intake").alias("avg_water"),
            count(when(col("smoking") == "yes", True)).alias("smoking_days"),
            count(when(col("alcohol") == "yes", True)).alias("alcohol_days")
        ).collect()[0]
        health_score = 100
        if health_metrics["avg_systolic"] and health_metrics["avg_systolic"] > 140:
            health_score -= 15
        elif health_metrics["avg_systolic"] and health_metrics["avg_systolic"] > 130:
            health_score -= 8
        if health_metrics["avg_diastolic"] and health_metrics["avg_diastolic"] > 90:
            health_score -= 15
        elif health_metrics["avg_diastolic"] and health_metrics["avg_diastolic"] > 85:
            health_score -= 8
        if health_metrics["avg_heart_rate"] and (health_metrics["avg_heart_rate"] > 100 or health_metrics["avg_heart_rate"] < 60):
            health_score -= 10
        if health_metrics["avg_blood_sugar"] and health_metrics["avg_blood_sugar"] > 7.0:
            health_score -= 20
        elif health_metrics["avg_blood_sugar"] and health_metrics["avg_blood_sugar"] > 6.1:
            health_score -= 10
        if lifestyle_metrics["avg_sleep"] and lifestyle_metrics["avg_sleep"] < 7:
            health_score -= 8
        if lifestyle_metrics["avg_exercise"] and lifestyle_metrics["avg_exercise"] < 30:
            health_score -= 6
        if lifestyle_metrics["smoking_days"] and lifestyle_metrics["smoking_days"] > analysis_period * 0.1:
            health_score -= 12
        if lifestyle_metrics["alcohol_days"] and lifestyle_metrics["alcohol_days"] > analysis_period * 0.2:
            health_score -= 6
        health_level = "优秀" if health_score >= 90 else "良好" if health_score >= 80 else "一般" if health_score >= 70 else "需要改善"
        risk_factors = []
        if health_metrics["avg_systolic"] and health_metrics["avg_systolic"] > 140:
            risk_factors.append("高血压风险")
        if health_metrics["avg_blood_sugar"] and health_metrics["avg_blood_sugar"] > 7.0:
            risk_factors.append("糖尿病风险")
        if lifestyle_metrics["avg_sleep"] and lifestyle_metrics["avg_sleep"] < 6:
            risk_factors.append("睡眠不足")
        if lifestyle_metrics["smoking_days"] and lifestyle_metrics["smoking_days"] > 0:
            risk_factors.append("吸烟影响")
        recommendations = []
        if health_metrics["avg_systolic"] and health_metrics["avg_systolic"] > 130:
            recommendations.append("建议减少钠盐摄入,增加有氧运动")
        if lifestyle_metrics["avg_exercise"] and lifestyle_metrics["avg_exercise"] < 30:
            recommendations.append("建议每天至少进行30分钟中等强度运动")
        if lifestyle_metrics["avg_sleep"] and lifestyle_metrics["avg_sleep"] < 7:
            recommendations.append("建议保证每天7-9小时充足睡眠")
        if lifestyle_metrics["avg_water"] and lifestyle_metrics["avg_water"] < 2000:
            recommendations.append("建议每天饮水量不少于2000毫升")
        status_result = {
            "health_score": max(0, min(100, int(health_score))),
            "health_level": health_level,
            "analysis_period": f"{analysis_period}天",
            "total_records": health_metrics["total_records"],
            "key_indicators": {
                "blood_pressure": f"{round(health_metrics['avg_systolic'], 1) if health_metrics['avg_systolic'] else 0}/{round(health_metrics['avg_diastolic'], 1) if health_metrics['avg_diastolic'] else 0}",
                "heart_rate": round(health_metrics["avg_heart_rate"], 1) if health_metrics["avg_heart_rate"] else 0,
                "blood_sugar": round(health_metrics["avg_blood_sugar"], 2) if health_metrics["avg_blood_sugar"] else 0,
                "sleep_quality": round(lifestyle_metrics["avg_sleep"], 1) if lifestyle_metrics["avg_sleep"] else 0
            },
            "risk_factors": risk_factors,
            "recommendations": recommendations
        }
        return JsonResponse({"status": "success", "data": status_result})
class ComprehensiveHealthAssessmentView(View):
    def post(self, request):
        data = json.loads(request.body)
        user_id = data.get('user_id')
        assessment_type = data.get('type', 'comprehensive')
        hdfs_path = f"hdfs://localhost:9000/health_data/user_{user_id}/"
        physiological_df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "physiological_data.csv")
        lifestyle_df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "lifestyle_data.csv")
        medical_history_df = spark.read.option("header", "true").option("inferSchema", "true").csv(hdfs_path + "medical_history.csv")
        recent_30_days = physiological_df.filter(col("record_date") >= (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d"))
        recent_90_days = physiological_df.filter(col("record_date") >= (datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d"))
        cardiovascular_metrics = recent_30_days.agg(
            avg("systolic_pressure").alias("avg_systolic"),
            avg("diastolic_pressure").alias("avg_diastolic"),
            avg("heart_rate").alias("avg_heart_rate"),
            stddev("systolic_pressure").alias("systolic_variance"),
            count(when(col("systolic_pressure") > 140, True)).alias("hypertension_episodes")
        ).collect()[0]
        metabolic_metrics = recent_30_days.agg(
            avg("blood_sugar").alias("avg_blood_sugar"),
            avg("bmi").alias("avg_bmi"),
            count(when(col("blood_sugar") > 7.8, True)).alias("hyperglycemia_episodes"),
            avg("cholesterol_total").alias("avg_cholesterol")
        ).collect()[0]
        lifestyle_patterns = lifestyle_df.filter(col("record_date") >= (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d")).agg(
            avg("sleep_hours").alias("avg_sleep"),
            avg("exercise_minutes").alias("avg_exercise"),
            avg("stress_level").alias("avg_stress"),
            count(when(col("diet_quality") == "poor", True)).alias("poor_diet_days"),
            avg("water_intake").alias("avg_water")
        ).collect()[0]
        chronic_conditions = medical_history_df.filter(col("condition_type") == "chronic").select("condition_name").distinct().collect()
        family_history = medical_history_df.filter(col("relation_type") == "family").select("condition_name").distinct().collect()
        cardiovascular_score = 25
        if cardiovascular_metrics["avg_systolic"] and cardiovascular_metrics["avg_systolic"] > 140:
            cardiovascular_score -= 8
        elif cardiovascular_metrics["avg_systolic"] and cardiovascular_metrics["avg_systolic"] > 130:
            cardiovascular_score -= 4
        if cardiovascular_metrics["avg_heart_rate"] and (cardiovascular_metrics["avg_heart_rate"] > 100 or cardiovascular_metrics["avg_heart_rate"] < 60):
            cardiovascular_score -= 5
        if cardiovascular_metrics["systolic_variance"] and cardiovascular_metrics["systolic_variance"] > 15:
            cardiovascular_score -= 3
        metabolic_score = 25
        if metabolic_metrics["avg_blood_sugar"] and metabolic_metrics["avg_blood_sugar"] > 7.0:
            metabolic_score -= 10
        elif metabolic_metrics["avg_blood_sugar"] and metabolic_metrics["avg_blood_sugar"] > 6.1:
            metabolic_score -= 5
        if metabolic_metrics["avg_bmi"] and (metabolic_metrics["avg_bmi"] > 28 or metabolic_metrics["avg_bmi"] < 18.5):
            metabolic_score -= 6
        if metabolic_metrics["avg_cholesterol"] and metabolic_metrics["avg_cholesterol"] > 5.7:
            metabolic_score -= 4
        lifestyle_score = 25
        if lifestyle_patterns["avg_sleep"] and lifestyle_patterns["avg_sleep"] < 7:
            lifestyle_score -= 6
        if lifestyle_patterns["avg_exercise"] and lifestyle_patterns["avg_exercise"] < 150:
            lifestyle_score -= 5
        if lifestyle_patterns["avg_stress"] and lifestyle_patterns["avg_stress"] > 7:
            lifestyle_score -= 4
        if lifestyle_patterns["poor_diet_days"] and lifestyle_patterns["poor_diet_days"] > 10:
            lifestyle_score -= 4
        risk_score = 25
        if len(chronic_conditions) > 0:
            risk_score -= len(chronic_conditions) * 3
        if len(family_history) > 0:
            risk_score -= len(family_history) * 2
        if cardiovascular_metrics["hypertension_episodes"] and cardiovascular_metrics["hypertension_episodes"] > 5:
            risk_score -= 5
        total_score = max(0, cardiovascular_score + metabolic_score + lifestyle_score + risk_score)
        assessment_level = "优秀" if total_score >= 90 else "良好" if total_score >= 80 else "中等" if total_score >= 70 else "需要关注" if total_score >= 60 else "高风险"
        trend_analysis = recent_90_days.select("record_date", "systolic_pressure", "diastolic_pressure", "heart_rate", "blood_sugar").orderBy("record_date")
        trend_pandas_df = trend_analysis.toPandas()
        if len(trend_pandas_df) > 0:
            trend_pandas_df['systolic_trend'] = np.polyfit(range(len(trend_pandas_df)), trend_pandas_df['systolic_pressure'].fillna(0), 1)[0]
            trend_pandas_df['sugar_trend'] = np.polyfit(range(len(trend_pandas_df)), trend_pandas_df['blood_sugar'].fillna(0), 1)[0]
            systolic_trend = "上升" if trend_pandas_df['systolic_trend'].iloc[0] > 0.1 else "下降" if trend_pandas_df['systolic_trend'].iloc[0] < -0.1 else "稳定"
            sugar_trend = "上升" if trend_pandas_df['sugar_trend'].iloc[0] > 0.02 else "下降" if trend_pandas_df['sugar_trend'].iloc[0] < -0.02 else "稳定"
        else:
            systolic_trend = sugar_trend = "数据不足"
        comprehensive_result = {
            "total_score": total_score,
            "assessment_level": assessment_level,
            "dimension_scores": {
                "cardiovascular": max(0, cardiovascular_score),
                "metabolic": max(0, metabolic_score),
                "lifestyle": max(0, lifestyle_score),
                "risk_factors": max(0, risk_score)
            },
            "trend_analysis": {
                "blood_pressure_trend": systolic_trend,
                "blood_sugar_trend": sugar_trend,
                "overall_direction": "改善" if total_score > 75 else "需要改善"
            },
            "detailed_metrics": {
                "cardiovascular_health": round(cardiovascular_metrics["avg_systolic"], 1) if cardiovascular_metrics["avg_systolic"] else 0,
                "metabolic_health": round(metabolic_metrics["avg_blood_sugar"], 2) if metabolic_metrics["avg_blood_sugar"] else 0,
                "lifestyle_quality": round(lifestyle_patterns["avg_sleep"], 1) if lifestyle_patterns["avg_sleep"] else 0
            },
            "chronic_conditions_count": len(chronic_conditions),
            "family_risk_factors": len(family_history)
        }
        return JsonResponse({"status": "success", "data": comprehensive_result})

基于大数据的人体生理指标管理数据分析系统文档展示

在这里插入图片描述

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