一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
全国健康老龄化数据分析系统是一个基于大数据技术的健康管理平台,采用Hadoop+Spark分布式计算框架处理海量老龄人口健康数据。系统以Django作为后端开发框架,结合Vue+ElementUI构建友好的交互界面,通过Echarts实现数据可视化呈现。系统核心功能涵盖用户管理、健康老龄化信息采集、健康风险评估分析、健康状况跟踪分析、医疗服务利用分析以及睡眠健康专项分析等模块。通过Spark SQL与Pandas、NumPy等数据分析工具,系统能够对老龄人群的健康数据进行深度挖掘与统计分析,识别潜在健康风险因素,评估医疗服务效果,监测睡眠质量变化趋势。系统还提供系统公告功能用于信息发布,配备可视化大屏实现数据的多维度展示,帮助管理人员直观掌握老龄人口健康状况的整体态势。依托HDFS分布式存储和Spark分布式计算能力,系统能够高效处理大规模健康数据,为老龄化社会背景下的健康管理工作提供技术支撑。
三、视频解说
四、部分功能展示
五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, sum, when, datediff, current_date, round
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
import pandas as pd
import numpy as np
from datetime import datetime
spark = SparkSession.builder.appName("HealthAgeingAnalysis").config("spark.sql.shuffle.partitions", "4").getOrCreate()
@require_http_methods(["POST"])
def analyze_health_risk(request):
user_id = request.POST.get('user_id')
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "health_records").option("user", "root").option("password", "password").load()
user_df = df.filter(col("user_id") == user_id)
risk_df = user_df.withColumn("age_risk", when(col("age") >= 80, 3).when(col("age") >= 70, 2).otherwise(1))
risk_df = risk_df.withColumn("blood_pressure_risk", when((col("systolic_pressure") > 140) | (col("diastolic_pressure") > 90), 3).when((col("systolic_pressure") > 130) | (col("diastolic_pressure") > 85), 2).otherwise(1))
risk_df = risk_df.withColumn("blood_sugar_risk", when(col("blood_sugar") > 7.0, 3).when(col("blood_sugar") > 6.1, 2).otherwise(1))
risk_df = risk_df.withColumn("bmi_risk", when((col("bmi") > 28) | (col("bmi") < 18.5), 2).otherwise(1))
risk_df = risk_df.withColumn("chronic_disease_risk", when(col("chronic_disease_count") >= 3, 3).when(col("chronic_disease_count") >= 1, 2).otherwise(1))
risk_df = risk_df.withColumn("total_risk_score", col("age_risk") + col("blood_pressure_risk") + col("blood_sugar_risk") + col("bmi_risk") + col("chronic_disease_risk"))
risk_df = risk_df.withColumn("risk_level", when(col("total_risk_score") >= 12, "高风险").when(col("total_risk_score") >= 8, "中风险").otherwise("低风险"))
result = risk_df.select("user_id", "age_risk", "blood_pressure_risk", "blood_sugar_risk", "bmi_risk", "chronic_disease_risk", "total_risk_score", "risk_level").toPandas()
risk_distribution = risk_df.groupBy("risk_level").count().toPandas()
risk_factors = {"age": float(result["age_risk"].mean()), "blood_pressure": float(result["blood_pressure_risk"].mean()), "blood_sugar": float(result["blood_sugar_risk"].mean()), "bmi": float(result["bmi_risk"].mean()), "chronic_disease": float(result["chronic_disease_risk"].mean())}
return JsonResponse({"status": "success", "risk_level": result["risk_level"].values[0] if len(result) > 0 else "无数据", "total_score": float(result["total_risk_score"].values[0]) if len(result) > 0 else 0, "risk_factors": risk_factors, "distribution": risk_distribution.to_dict('records')})
@require_http_methods(["POST"])
def analyze_medical_service(request):
start_date = request.POST.get('start_date')
end_date = request.POST.get('end_date')
region = request.POST.get('region', None)
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "medical_records").option("user", "root").option("password", "password").load()
filtered_df = df.filter((col("visit_date") >= start_date) & (col("visit_date") <= end_date))
if region:
filtered_df = filtered_df.filter(col("region") == region)
service_type_stats = filtered_df.groupBy("service_type").agg(count("*").alias("visit_count"), avg("cost").alias("avg_cost"), sum("cost").alias("total_cost")).orderBy(col("visit_count").desc())
hospital_stats = filtered_df.groupBy("hospital_name").agg(count("*").alias("visit_count"), avg("cost").alias("avg_cost"), round(avg("satisfaction_score"), 2).alias("avg_satisfaction")).orderBy(col("visit_count").desc()).limit(10)
department_stats = filtered_df.groupBy("department").agg(count("*").alias("visit_count"), avg("wait_time").alias("avg_wait_time")).orderBy(col("visit_count").desc())
age_group_df = filtered_df.withColumn("age_group", when(col("age") < 65, "60-64岁").when(col("age") < 75, "65-74岁").when(col("age") < 85, "75-84岁").otherwise("85岁以上"))
age_service_stats = age_group_df.groupBy("age_group", "service_type").agg(count("*").alias("visit_count")).orderBy("age_group", col("visit_count").desc())
monthly_trend = filtered_df.withColumn("month", col("visit_date").substr(1, 7)).groupBy("month").agg(count("*").alias("visit_count"), avg("cost").alias("avg_cost")).orderBy("month")
cost_distribution = filtered_df.withColumn("cost_range", when(col("cost") < 500, "500元以下").when(col("cost") < 1000, "500-1000元").when(col("cost") < 2000, "1000-2000元").otherwise("2000元以上")).groupBy("cost_range").count().orderBy("cost_range")
total_visits = filtered_df.count()
total_cost = filtered_df.agg(sum("cost")).collect()[0][0]
avg_cost_overall = filtered_df.agg(avg("cost")).collect()[0][0]
return JsonResponse({"status": "success", "summary": {"total_visits": total_visits, "total_cost": float(total_cost) if total_cost else 0, "avg_cost": float(avg_cost_overall) if avg_cost_overall else 0}, "service_type_stats": service_type_stats.toPandas().to_dict('records'), "hospital_stats": hospital_stats.toPandas().to_dict('records'), "department_stats": department_stats.toPandas().to_dict('records'), "age_service_stats": age_service_stats.toPandas().to_dict('records'), "monthly_trend": monthly_trend.toPandas().to_dict('records'), "cost_distribution": cost_distribution.toPandas().to_dict('records')})
@require_http_methods(["POST"])
def analyze_sleep_health(request):
user_id = request.POST.get('user_id')
days = int(request.POST.get('days', 30))
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/health_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "sleep_records").option("user", "root").option("password", "password").load()
user_df = df.filter(col("user_id") == user_id).filter(datediff(current_date(), col("record_date")) <= days).orderBy(col("record_date").desc())
sleep_stats = user_df.agg(avg("sleep_duration").alias("avg_duration"), avg("deep_sleep_ratio").alias("avg_deep_sleep"), avg("sleep_quality_score").alias("avg_quality"), count("*").alias("record_count"))
quality_trend = user_df.select("record_date", "sleep_duration", "deep_sleep_ratio", "sleep_quality_score", "wake_up_count").orderBy("record_date").toPandas()
quality_distribution = user_df.withColumn("quality_level", when(col("sleep_quality_score") >= 80, "优秀").when(col("sleep_quality_score") >= 60, "良好").when(col("sleep_quality_score") >= 40, "一般").otherwise("较差")).groupBy("quality_level").count().toPandas()
duration_analysis = user_df.withColumn("duration_adequate", when((col("sleep_duration") >= 6) & (col("sleep_duration") <= 8), "充足").when(col("sleep_duration") < 6, "不足").otherwise("过长")).groupBy("duration_adequate").count().toPandas()
problem_df = user_df.filter((col("wake_up_count") > 3) | (col("sleep_duration") < 6) | (col("deep_sleep_ratio") < 0.2))
problem_days = problem_df.count()
problem_rate = (problem_days / sleep_stats.collect()[0]["record_count"]) * 100 if sleep_stats.collect()[0]["record_count"] > 0 else 0
sleep_debt = user_df.withColumn("sleep_debt", when(col("sleep_duration") < 7, 7 - col("sleep_duration")).otherwise(0)).agg(sum("sleep_debt").alias("total_debt")).collect()[0]["total_debt"]
correlation_data = user_df.select("sleep_duration", "deep_sleep_ratio", "sleep_quality_score", "wake_up_count").toPandas()
correlation_matrix = correlation_data.corr().to_dict() if len(correlation_data) > 0 else {}
stats_result = sleep_stats.collect()[0]
recommendations = []
if stats_result["avg_duration"] < 6:
recommendations.append("平均睡眠时长不足6小时,建议调整作息增加睡眠时间")
if stats_result["avg_deep_sleep"] < 0.2:
recommendations.append("深度睡眠比例偏低,建议睡前避免剧烈运动和使用电子设备")
if stats_result["avg_quality"] < 60:
recommendations.append("睡眠质量评分较低,建议保持规律作息并改善睡眠环境")
if problem_rate > 30:
recommendations.append("睡眠问题出现频率较高,建议咨询专业医生进行评估")
return JsonResponse({"status": "success", "summary": {"avg_duration": round(float(stats_result["avg_duration"]), 2) if stats_result["avg_duration"] else 0, "avg_deep_sleep": round(float(stats_result["avg_deep_sleep"]) * 100, 2) if stats_result["avg_deep_sleep"] else 0, "avg_quality": round(float(stats_result["avg_quality"]), 2) if stats_result["avg_quality"] else 0, "record_count": stats_result["record_count"], "problem_rate": round(problem_rate, 2), "sleep_debt": round(float(sleep_debt), 2) if sleep_debt else 0}, "quality_trend": quality_trend.to_dict('records'), "quality_distribution": quality_distribution.to_dict('records'), "duration_analysis": duration_analysis.to_dict('records'), "correlation": correlation_matrix, "recommendations": recommendations})
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊