前言
💖💖作者:计算机程序员小杨 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💕💕文末获取源码联系 计算机程序员小杨 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目 计算机毕业设计选题 💜💜
一.开发工具简介
大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL
二.系统内容简介
肾脏疾病风险数据可视化分析系统是一套基于大数据技术构建的医疗数据分析平台,采用Hadoop+Spark分布式计算框架处理大规模医疗数据,结合Python+Django后端架构和Vue+ElementUI前端技术实现完整的数据分析流程。系统主要功能包括系统首页展示、用户信息管理、肾脏疾病风险数据统一管理、肾功能生化指标深度分析、疾病合并症影响因素评估、患者人口特征统计分析、肾脏疾病风险智能预测、多因子相关性挖掘以及数据可视化大屏展示等模块。平台通过Spark SQL对存储在HDFS中的患者医疗数据进行实时处理,运用Pandas和NumPy进行数据清洗和统计计算,最终通过Echarts图表库将分析结果以直观的可视化形式呈现给医护人员和研究者。系统能够处理包括血清肌酐、尿素氮、肾小球滤过率等关键生化指标数据,通过多维度数据挖掘技术识别潜在的肾脏疾病风险因素,为临床诊疗决策提供数据支撑。整个系统基于MySQL数据库进行持久化存储,保证数据的完整性和一致性。
三.系统功能演示
终于找到了!适合计算机专业的医疗大数据毕设:肾脏疾病风险分析系统
四.系统界面展示
五.系统源码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, when, corr
from django.http import JsonResponse
import pandas as pd
import numpy as np
from django.views.decorators.csrf import csrf_exempt
import json
from .models import KidneyRiskData, BiochemicalIndicator
spark = SparkSession.builder.appName("KidneyDiseaseAnalysis").config("spark.
sql.adaptive.enabled", "true").getOrCreate()
@csrf_exempt
def kidney_risk_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
patient_id = data.get('patient_id')
risk_factors = data.get('risk_factors', {})
creatinine = risk_factors.get('creatinine', 0)
bun = risk_factors.get('bun', 0)
gfr = risk_factors.get('gfr', 0)
age = risk_factors.get('age', 0)
diabetes = risk_factors.get('diabetes', False)
hypertension = risk_factors.get('hypertension', False)
risk_score = 0
if creatinine > 1.3:
risk_score += 25
elif creatinine > 1.0:
risk_score += 15
if bun > 20:
risk_score += 20
elif bun > 15:
risk_score += 10
if gfr < 60:
risk_score += 30
elif gfr < 90:
risk_score += 15
if age > 65:
risk_score += 10
elif age > 50:
risk_score += 5
if diabetes:
risk_score += 20
if hypertension:
risk_score += 15
risk_level = "低风险"
if risk_score >= 70:
risk_level = "高风险"
elif risk_score >= 40:
risk_level = "中风险"
recommendations = []
if creatinine > 1.3:
recommendations.append("建议进行肾功能专项检查")
if gfr < 60:
recommendations.append("建议定期监测肾小球滤过率")
if diabetes and hypertension:
recommendations.append("糖尿病合并高血压需重点关注肾脏保护")
KidneyRiskData.objects.create(
patient_id=patient_id,
creatinine=creatinine,
bun=bun,
gfr=gfr,
age=age,
diabetes=diabetes,
hypertension=hypertension,
risk_score=risk_score,
risk_level=risk_level
)
return JsonResponse({
'status': 'success',
'risk_score': risk_score,
'risk_level': risk_level,
'recommendations': recommendations
})
@csrf_exempt
def biochemical_indicator_analysis(request):
if request.method == 'POST':
indicators_df = spark.read.format("jdbc").option("url",
"jdbc:mysql://localhost:3306/kidney_db").option("dbtable",
"biochemical_indicator").option("user", "root").option("password",
"password").load()
creatinine_stats =
indicators_df.select(avg(col("creatinine")).alias("avg_creatinine"),
count(when(col("creatinine") > 1.3,
True)).alias("high_creatinine_count")).collect()[0]
bun_stats = indicators_df.select(avg(col("bun")).alias("avg_bun"),
count(when(col("bun") > 20, True)).alias("high_bun_count")).collect()[0]
gfr_stats = indicators_df.select(avg(col("gfr")).alias("avg_gfr"),
count(when(col("gfr") < 60, True)).alias("low_gfr_count")).collect()[0]
total_patients = indicators_df.count()
abnormal_creatinine_rate =
(creatinine_stats["high_creatinine_count"] / total_patients) * 100
abnormal_bun_rate = (bun_stats["high_bun_count"] / total_patients) *
100
abnormal_gfr_rate = (gfr_stats["low_gfr_count"] / total_patients) *
100
age_group_analysis = indicators_df.groupBy(when(col("age") < 30,
"青年").when(col("age") < 60, "中年").otherwise("老年").alias("age_group")).
agg(avg("creatinine").alias("avg_creatinine"), avg("bun").alias("avg_bun"),
avg("gfr").alias("avg_gfr"), count("*").alias("patient_count")).collect()
gender_analysis = indicators_df.groupBy("gender").agg(avg("creatinin
e").alias("avg_creatinine"), avg("bun").alias("avg_bun"),
avg("gfr").alias("avg_gfr"), count("*").alias("patient_count")).collect()
trend_analysis = indicators_df.groupBy("test_date").agg(avg("creatin
ine").alias("avg_creatinine"), avg("bun").alias("avg_bun"),
avg("gfr").alias("avg_gfr")).orderBy("test_date").collect()
analysis_result = {
'overall_stats': {
'avg_creatinine': round(creatinine_stats["avg_creatinine"],
2),
'avg_bun': round(bun_stats["avg_bun"], 2),
'avg_gfr': round(gfr_stats["avg_gfr"], 2),
'abnormal_creatinine_rate': round(abnormal_creatinine_rate,
2),
'abnormal_bun_rate': round(abnormal_bun_rate, 2),
'abnormal_gfr_rate': round(abnormal_gfr_rate, 2),
'total_patients': total_patients
},
'age_group_analysis': [{'age_group': row['age_group'],
'avg_creatinine': round(row['avg_creatinine'], 2), 'avg_bun':
round(row['avg_bun'], 2), 'avg_gfr': round(row['avg_gfr'], 2),
'patient_count': row['patient_count']} for row in age_group_analysis],
'gender_analysis': [{'gender': row['gender'], 'avg_creatinine':
round(row['avg_creatinine'], 2), 'avg_bun': round(row['avg_bun'], 2),
'avg_gfr': round(row['avg_gfr'], 2), 'patient_count': row['patient_count']}
for row in gender_analysis],
'trend_analysis': [{'test_date': str(row['test_date']),
'avg_creatinine': round(row['avg_creatinine'], 2), 'avg_bun':
round(row['avg_bun'], 2), 'avg_gfr': round(row['avg_gfr'], 2)} for row in
trend_analysis]
}
return JsonResponse(analysis_result)
@csrf_exempt
def multi_factor_correlation_analysis(request):
if request.method == 'POST':
correlation_df = spark.read.format("jdbc").option("url",
"jdbc:mysql://localhost:3306/kidney_db").option("dbtable",
"patient_data").option("user", "root").option("password", "password").load()
creatinine_bun_corr = correlation_df.select(corr("creatinine",
"bun")).collect()[0][0]
creatinine_gfr_corr = correlation_df.select(corr("creatinine",
"gfr")).collect()[0][0]
bun_gfr_corr = correlation_df.select(corr("bun",
"gfr")).collect()[0][0]
age_creatinine_corr = correlation_df.select(corr("age",
"creatinine")).collect()[0][0]
age_gfr_corr = correlation_df.select(corr("age",
"gfr")).collect()[0][0]
diabetes_impact = correlation_df.groupBy("diabetes").agg(avg("creati
nine").alias("avg_creatinine"), avg("bun").alias("avg_bun"),
avg("gfr").alias("avg_gfr"), count("*").alias("patient_count")).collect()
hypertension_impact = correlation_df.groupBy("hypertension").agg(avg
("creatinine").alias("avg_creatinine"), avg("bun").alias("avg_bun"),
avg("gfr").alias("avg_gfr"), count("*").alias("patient_count")).collect()
combined_disease_analysis = correlation_df.groupBy("diabetes",
"hypertension").agg(avg("creatinine").alias("avg_creatinine"),
avg("bun").alias("avg_bun"), avg("gfr").alias("avg_gfr"),
count("*").alias("patient_count")).collect()
risk_factor_weights = {
'creatinine_weight': abs(creatinine_gfr_corr) * 0.3,
'bun_weight': abs(bun_gfr_corr) * 0.25,
'age_weight': abs(age_gfr_corr) * 0.2,
'diabetes_weight': 0.15,
'hypertension_weight': 0.1
}
correlation_matrix = [
{'factor1': 'creatinine', 'factor2': 'bun', 'correlation':
round(creatinine_bun_corr, 3)},
{'factor1': 'creatinine', 'factor2': 'gfr', 'correlation':
round(creatinine_gfr_corr, 3)},
{'factor1': 'bun', 'factor2': 'gfr', 'correlation':
round(bun_gfr_corr, 3)},
{'factor1': 'age', 'factor2': 'creatinine', 'correlation':
round(age_creatinine_corr, 3)},
{'factor1': 'age', 'factor2': 'gfr', 'correlation':
round(age_gfr_corr, 3)}
]
disease_impact_analysis = {
'diabetes_impact': [{'has_diabetes': row['diabetes'],
'avg_creatinine': round(row['avg_creatinine'], 2), 'avg_bun':
round(row['avg_bun'], 2), 'avg_gfr': round(row['avg_gfr'], 2),
'patient_count': row['patient_count']} for row in diabetes_impact],
'hypertension_impact': [{'has_hypertension':
row['hypertension'], 'avg_creatinine': round(row['avg_creatinine'], 2),
'avg_bun': round(row['avg_bun'], 2), 'avg_gfr': round(row['avg_gfr'], 2),
'patient_count': row['patient_count']} for row in hypertension_impact],
'combined_disease_impact': [{'diabetes': row['diabetes'],
'hypertension': row['hypertension'], 'avg_creatinine':
round(row['avg_creatinine'], 2), 'avg_bun': round(row['avg_bun'], 2),
'avg_gfr': round(row['avg_gfr'], 2), 'patient_count': row['patient_count']}
for row in combined_disease_analysis]
}
correlation_result = {
'correlation_matrix': correlation_matrix,
'risk_factor_weights': risk_factor_weights,
'disease_impact_analysis': disease_impact_analysis
}
return JsonResponse(correlation_result)
六.系统文档展示
结束
💕💕文末获取源码联系 计算机程序员小杨