别人熬夜调Bug,我靠Hadoop+Spark三小时跑完十万条体检数据

46 阅读4分钟

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

@TOC

医院体检数据可视化分析系统介绍

《基于大数据的医院体检数据可视化分析系统》面向海量体检记录,依托Hadoop构建分布式存储底座,将原始CSV、Excel及API接口数据经HDFS高容错落地;Spark分布式计算引擎以RDD与Spark SQL双范式完成十万级记录的并行清洗、聚合与特征衍生,Python Pandas、NumPy在Jupyter节点内对缺失值、异常值及指标标准化做补充校验,确保后续分析可信。系统以Django+Vue全栈架构交付:后端在Django REST Framework中封装体检人群画像、多维因素关联、高发健康问题、关键生理指标四大分析服务,通过PySpark将计算结果持久化到MySQL,前端Vue路由统一调度,ElementUI表格联动Echarts折线、雷达、热力图与地理热力图,实时渲染性别年龄分布、BMI与血压相关性、脂肪肝检出率趋势、血糖异常热力分布等专题。大屏端采用自适应栅格,将Spark Streaming推送的秒级增量指标映射为动态仪表盘,用户可在系统首页一键切换时间粒度与维度组合;个人中心集成修改密码、个人信息维护,系统公告与简介模块则以Markdown静态化呈现,保证高并发展示下的低延迟体验。整套流程覆盖采集、存储、计算、分析与可视化闭环,为计算机专业毕设提供可直接落地的医院体检大数据范例。

医院体检数据可视化分析系统演示视频

视频演示

医院体检数据可视化分析系统演示图片

登陆界面.png

多维因素关联分析.png

高发健康问题分析.png

关键生理指标分析.png

数据大屏上.png

数据大屏下.png

体检人群画像分析.png

体检数据.png

用户管理.png

医院体检数据可视化分析系统代码展示

# --------------------------------------------------------
# 功能一:体检人群画像分析(Spark SQL 聚合 + Pandas 二次加工)
# --------------------------------------------------------
def build_profile_view(request):
    spark = SparkSession.builder.appName("profile").getOrCreate()
    df = spark.read \
        .format("jdbc") \
        .option("url", "jdbc:mysql://localhost:3306/physical_db") \
        .option("dbtable", "t_exam_record") \
        .option("user", "root") \
        .option("password", "123456") \
        .load()

    age_bucket = F.when(df.age < 30, "20-29") \
                  .when(df.age < 40, "30-39") \
                  .when(df.age < 50, "40-49") \
                  .otherwise("50+")
    df = df.withColumn("age_bucket", age_bucket)

    summary = df.groupBy("age_bucket", "gender") \
                .agg(F.count("*").alias("total"),
                     F.avg("bmi").alias("avg_bmi"),
                     F.avg("systolic").alias("avg_systolic"),
                     F.avg("diastolic").alias("avg_diastolic")) \
                .toPandas()

    summary["hypert_rate"] = summary.apply(
        lambda r: ((r["avg_systolic"] >= 140) | (r["avg_diastolic"] >= 90)).astype(int),
        axis=1
    )
    summary_json = summary.to_json(orient="records")
    return JsonResponse(json.loads(summary_json), safe=False)

# --------------------------------------------------------
# 功能二:多维因素关联分析(Spark MLlib 计算皮尔逊相关)
# --------------------------------------------------------
def factor_correlation(request):
    spark = SparkSession.builder.appName("corr").getOrCreate()
    df = spark.read.parquet("/hdfs/exam_clean.parquet")
    vec_cols = ["age", "bmi", "systolic", "diastolic", "glucose", "alt", "tg"]
    assembler = VectorAssembler(inputCols=vec_cols, outputCol="features")
    df_vec = assembler.transform(df)

    corr_mat = Correlation.corr(df_vec, "features").head()[0]
    corr_np = corr_mat.toArray()
    corr_df = pd.DataFrame(corr_np, index=vec_cols, columns=vec_cols)
    corr_json = corr_df.reset_index().rename(columns={"index": "factor"}).to_json(orient="records")
    return JsonResponse(json.loads(corr_json), safe=False)

# --------------------------------------------------------
# 功能三:高发健康问题分析(Spark SQL 高频病征统计 + 阈值判断)
# --------------------------------------------------------
def high_risk_disease(request):
    spark = SparkSession.builder.appName("risk").getOrCreate()
    df = spark.read \
        .format("jdbc") \
        .option("url", "jdbc:mysql://localhost:3306/physical_db") \
        .option("dbtable", "t_exam_record") \
        .option("user", "root") \
        .option("password", "123456") \
        .load()

    cond = (
        (df.systolic >= 140) | (df.diastolic >= 90) |
        (df.glucose >= 6.1) |
        (df.alt > 40) |
        (df.tg > 2.3)
    )
    df_risk = df.withColumn("flag", F.when(cond, 1).otherwise(0))

    risk_summary = df_risk.groupBy("disease_tag") \
                          .agg(F.sum("flag").alias("case_count"),
                               F.count("*").alias("total")) \
                          .withColumn("ratio", F.col("case_count") / F.col("total")) \
                          .orderBy(F.desc("ratio"))

    result = risk_summary.toPandas().to_json(orient="records")
    return JsonResponse(json.loads(result), safe=False)

医院体检数据可视化分析系统文档展示

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