基于Spark的急诊患者行为数据可视化分析系统-基于Python可视化的急诊患者流量预测与行为分析系统-面向智慧医院的急诊患者多维行为分析系统

17 阅读4分钟

注意:该项目只展示部分功能

1 开发环境

发语言:python 采用技术:Spark、Hadoop、Django、Vue、Echarts等技术框架 数据库:MySQL 开发环境:PyCharm

2 系统设计

当前急诊医疗面临患者流量激增、病情复杂多样、医疗资源紧张等挑战,传统管理模式难以实时响应动态需求。基于Spark大数据处理框架,整合Hadoop分布式存储、Python数据分析、Vue前端交互与ECharts可视化技术,构建了覆盖9216例急诊患者全周期行为的分析系统。系统通过采集患者年龄、性别、种族、等待时间、满意度、转诊科室等多维度数据,实现对急诊科工作负荷、就诊时间模式、科室资源需求、患者风险评估等关键指标的实时监测与深度挖掘,为精细化运营管理提供数据支撑。

医院急诊患者数据大屏可视化:集成急诊科工作负荷、患者年龄性别分布、就诊时间模式、等待时间分布等核心指标,实时呈现全局运行态势。 患者特征分析:涵盖年龄、性别、种族分布统计,并深度关联合并症情况,分析不同年龄段健康风险差异。 急诊行为分析:聚焦转诊科室流向、等待时间分段统计、就诊时段规律,揭示患者就医路径与系统响应效率。 患者满意度分析:量化满意度评分分布,关联等待时长、转诊科室、年龄组别及入院状态,定位服务体验关键影响因素。 医疗资源利用分析:评估各科室接诊压力与资源需求,结合时段流量预测,为动态调配医护力量提供依据。 多维度综合分析:构建患者聚类模型识别行为模式,建立风险评估体系划分风险等级,挖掘就诊模式关联规则,支持交叉维度洞察。

3 系统展示

3.1 大屏页面

ScreenShot_2025-12-05_160952_007.png

ScreenShot_2025-12-05_161041_562.png

3.3 分析页面

ScreenShot_2025-12-05_161111_163.png

ScreenShot_2025-12-05_161122_470.png

ScreenShot_2025-12-05_161135_961.png

ScreenShot_2025-12-05_161145_845.png

ScreenShot_2025-12-05_161157_032.png

ScreenShot_2025-12-05_161204_108.png

ScreenShot_2025-12-05_161221_634.png

3.4 基础页面

ScreenShot_2025-12-05_161033_696.png

ScreenShot_2025-12-05_161100_672.png

4 更多推荐

计算机专业毕业设计新风向,2026年大数据 + AI前沿60个毕设选题全解析,涵盖Hadoop、Spark、机器学习、AI等类型 计算机专业毕业设计选题深度剖析,掌握这些技巧,让你的选题轻松通过,文章附35个优质选题助你顺利通过开题! 【避坑必看】26届计算机毕业设计选题雷区大全,这些毕设题目千万别选!选题雷区深度解析 紧跟风口!2026计算机毕设新赛道:精选三大热门领域下的创新选题, 拒绝平庸!毕设技术亮点+功能创新,双管齐下 纯分享!2026届计算机毕业设计选题全攻略(选题+技术栈+创新点+避坑),这80个题目覆盖所有方向,计算机毕设选题大全收藏 计算机专业毕业设计选题深度剖析,掌握这些技巧,让你的选题轻松通过,文章附35个优质选题助你顺利通过开题!

5 部分功能代码

# 从MySQL加载原始数据(总数据量9216条)
jdbc_url = "jdbc:mysql://localhost:3306/emergency_db"
connection_properties = {
    "user": "admin",
    "password": "your_password",
    "driver": "com.mysql.cj.jdbc.Driver"
}

df = spark.read.jdbc(
    url=jdbc_url,
    table="emergency_patients",
    properties=connection_properties
).select(
    "patient_id", "gender", "age", "ethnicity", 
    "referral_department", "waiting_time", "satisfaction_score",
    "visit_hour", "has_comorbidity", "is_admitted"
)

# 1. 等待时间分布计算(核心指标:短/中/长等待患者数量)
wait_time_stats = df.withColumn(
    "wait_category",
    F.when(F.col("waiting_time") <= 20, "短等待")
    .when(F.col("waiting_time") <= 40, "中等等待")
    .otherwise("长等待")
).groupBy("wait_category").agg(
    F.count("*").alias("patient_count"),
    F.avg("satisfaction_score").alias("avg_satisfaction")
).orderBy(F.col("patient_count").desc())

# 2. 年龄段与转诊科室交叉分析(用于热力图展示)
age_department_cross = df.withColumn(
    "age_group",
    F.when(F.col("age") <= 12, "儿童")
    .when(F.col("age") <= 18, "青少年")
    .when(F.col("age") <= 35, "青年")
    .when(F.col("age") <= 60, "中年")
    .otherwise("老年")
).groupBy("age_group", "referral_department").agg(
    F.count("*").alias("patient_count"),
    F.avg("waiting_time").alias("avg_wait_time"),
    F.avg("satisfaction_score").alias("avg_satisfaction")
).orderBy("age_group", "referral_department")

# 3. 时间段工作负荷分析(24小时接诊量统计)
hourly_workload = df.groupBy("visit_hour").agg(
    F.count("*").alias("patient_volume"),
    F.avg("waiting_time").alias("avg_waiting_time"),
    F.avg("satisfaction_score").alias("avg_satisfaction")
).orderBy("visit_hour")

# 4. 满意度关联因素计算(等待时间、是否入院、年龄段影响)
satisfaction_analysis = df.withColumn(
    "age_group",
    F.when(F.col("age") <= 12, "儿童")
    .when(F.col("age") <= 18, "青少年")
    .when(F.col("age") <= 35, "青年")
    .when(F.col("age") <= 60, "中年")
    .otherwise("老年")
).groupBy("age_group", "is_admitted").agg(
    F.count("*").alias("count"),
    F.avg("waiting_time").alias("avg_wait"),
    F.avg("satisfaction_score").alias("avg_satisfaction"),
    F.stddev("satisfaction_score").alias("satisfaction_std")
)

# 5. 高风险患者识别(等待时间>40分钟且满意度<4分)
high_risk_patients = df.filter(
    (F.col("waiting_time") > 40) & (F.col("satisfaction_score") < 4)
).withColumn(
    "risk_reason",
    F.concat(F.lit("长等待-"), F.col("waiting_time"), F.lit("分钟,低满意度-"), F.col("satisfaction_score"), F.lit("分"))
).select(
    "patient_id", "age", "referral_department", "waiting_time", "satisfaction_score", "risk_reason"
)

# 6. 科室资源需求压力指数计算(结合患者数量与等待时间)
department_pressure = df.groupBy("referral_department").agg(
    F.count("*").alias("total_patients"),
    F.avg("waiting_time").alias("avg_wait_time"),
    F.max("waiting_time").alias("max_wait_time"),
    (F.count("*") * F.avg("waiting_time") / 1000).alias("pressure_index")  # 压力指数 = 患者数×平均等待时间/1000
).orderBy(F.col("pressure_index").desc())

源码项目、定制开发、文档报告、PPT、代码答疑 希望和大家多多交流