【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统

21 阅读6分钟

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

💕💕文末获取源码

@TOC

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统功能介绍

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统以分化型甲状腺癌复发风险评估为核心目标,依托 Hadoop 与 Spark 大数据技术栈,结合 Python+Django 开发框架及 Vue+Echarts 前端可视化工具,构建了多维度、智能化的数据分析平台。系统深度整合患者人口统计学特征、临床病理核心指标、治疗效果数据及甲状腺功能检测结果等关键信息,实现了年龄分布统计、TNM 分期与复发关联分析、多因素关联性热力图展示等核心功能。通过 Spark SQL 进行高效数据查询处理,借助 Pandas 与 NumPy 完成数据预处理与特征工程,利用 Echarts 将复杂的医疗数据转化为直观的折线图、柱状图、热力图等可视化图表,同时支持 MySQL 数据库进行数据存储与管理,全方位满足对分化型甲状腺癌复发相关因素的深度挖掘与可视化呈现需求,为相关分析研究提供了便捷、高效的大数据分析工具。

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统技术介绍

大数据框架: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

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统背景意义

分化型甲状腺癌作为常见的甲状腺恶性肿瘤类型,其治疗后复发风险评估一直是临床关注的重点。随着医疗数据的持续积累,传统的数据分析方法难以快速处理海量的患者信息,也无法高效挖掘各临床指标与复发之间的潜在关联,导致医护人员在评估患者复发风险时缺乏全面的数据支撑。而计算机技术与大数据分析的融合应用,为医疗数据的深度利用提供了可能,能够打破传统分析模式的局限,实现对多维度医疗数据的整合处理,这一背景下,开发一款专门针对分化型甲状腺癌复发数据的大数据可视化分析系统,成为解决当前数据处理难题的有效途径。本课题的研究与实现具有多方面的实际意义,对计算机专业毕业设计而言,是一次将大数据技术与医疗场景相结合的实践探索,能够有效锻炼大数据框架应用、数据处理与可视化等核心技能。从实际应用角度来看,系统能够帮助相关人员快速梳理分化型甲状腺癌复发的关键影响因素,通过可视化图表直观呈现各指标间的关联关系,为复发风险评估提供数据参考。同时,系统采用的 Hadoop+Spark 架构具备高效的数据处理能力,能够适配海量医疗数据的分析需求,其多维度分析功能也为后续相关研究提供了可借鉴的思路与工具,虽然作为毕业设计在临床应用深度上存在局限,但在数据处理与可视化结合的实践层面具有一定的参考价值。

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统演示视频

演示视频

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统演示图片

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

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

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-系统部分代码

from pyspark.sql import SparkSession from pyspark.sql.functions import col, count, avg, corr, when, isnull from pyspark.sql.types import IntegerType, FloatType import pandas as pd import numpy as np spark = SparkSession.builder.appName("ThyroidCancerRecurrenceAnalysis").master("local[*]").config("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000").getOrCreate() def analyze_age_distribution():     df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/thyroid_cancer").option("dbtable", "patient_data").option("user", "root").option("password", "123456").load()     df_clean = df.filter(isnull(col("Age")) == False).withColumn("Age", col("Age").cast(IntegerType()))     age_bins = [0, 20, 30, 40, 50, 60, 70, 100]     age_labels = ["0-20岁", "21-30岁", "31-40岁", "41-50岁", "51-60岁", "61-70岁", "70岁以上"]     df_age = df_clean.withColumn("AgeGroup", when((col("Age") >= 0) & (col("Age") <= 20), age_labels[0]).when((col("Age") > 20) & (col("Age") <= 30), age_labels[1]).when((col("Age") > 30) & (col("Age") <= 40), age_labels[2]).when((col("Age") > 40) & (col("Age") <= 50), age_labels[3]).when((col("Age") > 50) & (col("Age") <= 60), age_labels[4]).when((col("Age") > 60) & (col("Age") <= 70), age_labels[5]).when((col("Age") > 70) & (col("Age") <= 100), age_labels[6]))     age_distribution = df_age.groupBy("AgeGroup").agg(count("PatientID").alias("PatientCount")).orderBy("AgeGroup")     age_distribution_pd = age_distribution.toPandas()     age_distribution_pd["Percentage"] = (age_distribution_pd["PatientCount"] / age_distribution_pd["PatientCount"].sum()) * 100     age_distribution_pd["Percentage"] = age_distribution_pd["Percentage"].round(2)     return age_distribution_pd def analyze_risk_recurrence_correlation():     df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/thyroid_cancer").option("dbtable", "patient_data").option("user", "root").option("password", "123456").load()     df_clean = df.filter((isnull(col("Risk")) == False) & (isnull(col("Recurred")) == False))     df_clean = df_clean.withColumn("Recurred", col("Recurred").cast(IntegerType()))     risk_recurrence = df_clean.groupBy("Risk").agg(count("PatientID").alias("TotalCount"), sum("Recurred").alias("RecurredCount"))     risk_recurrence = risk_recurrence.withColumn("RecurrenceRate", (col("RecurredCount") / col("TotalCount")) * 100)     risk_recurrence = risk_recurrence.withColumn("RecurrenceRate", col("RecurrenceRate").cast(FloatType()).round(2))     risk_order = ["Low", "Intermediate", "High"]     risk_recurrence = risk_recurrence.orderBy(col("Risk").asc())     risk_recurrence_pd = risk_recurrence.toPandas()     risk_recurrence_pd["Risk"] = pd.Categorical(risk_recurrence_pd["Risk"], categories=risk_order, ordered=True)     risk_recurrence_pd = risk_recurrence_pd.sort_values("Risk")     return risk_recurrence_pd def analyze_multi_factor_correlation():     df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/thyroid_cancer").option("dbtable", "patient_data").option("user", "root").option("password", "123456").load()     df_clean = df.select("Age", "Gender", "Smoking", "Hx_Radiothreapy", "Risk", "T", "N", "M", "Stage", "Recurred")     df_clean = df_clean.filter(isnull(col("Recurred")) == False).withColumn("Recurred", col("Recurred").cast(IntegerType()))     df_clean = df_clean.withColumn("Age", col("Age").cast(IntegerType())).fillna({"Age": df_clean.select(avg("Age")).first()[0]})     df_clean = df_clean.withColumn("Gender_Code", when(col("Gender") == "Male", 1).when(col("Gender") == "Female", 0).otherwise(0))     df_clean = df_clean.withColumn("Smoking_Code", when(col("Smoking") == "Yes", 1).otherwise(0))     df_clean = df_clean.withColumn("Radiotherapy_Code", when(col("Hx_Radiothreapy") == "Yes", 1).otherwise(0))     df_clean = df_clean.withColumn("Risk_Code", when(col("Risk") == "Low", 1).when(col("Risk") == "Intermediate", 2).when(col("Risk") == "High", 3).otherwise(2))     df_clean = df_clean.withColumn("T_Code", when(col("T") == "T1a", 1).when(col("T") == "T1b", 2).when(col("T") == "T2", 3).when(col("T") == "T3", 4).when(col("T") == "T4", 5).otherwise(3))     df_clean = df_clean.withColumn("N_Code", when(col("N") == "N0", 1).when(col("N") == "N1a", 2).when(col("N") == "N1b", 3).otherwise(2))     df_clean = df_clean.withColumn("M_Code", when(col("M") == "M0", 1).when(col("M") == "M1", 2).otherwise(1))     df_clean = df_clean.withColumn("Stage_Code", when(col("Stage") == "I", 1).when(col("Stage") == "II", 2).when(col("Stage") == "III", 3).when(col("Stage") == "IV", 4).otherwise(2))     corr_columns = ["Age", "Gender_Code", "Smoking_Code", "Radiotherapy_Code", "Risk_Code", "T_Code", "N_Code", "M_Code", "Stage_Code", "Recurred"]     corr_data = []     for col1 in corr_columns:         col_corr = []         for col2 in corr_columns:             corr_value = df_clean.select(corr(col(col1), col(col2))).first()[0]             col_corr.append(round(corr_value, 3) if corr_value is not None else 0.0)         corr_data.append(col_corr)     corr_df = pd.DataFrame(corr_data, columns=corr_columns, index=corr_columns)     return corr_df

【spark+hadoop】基于大数据的分化型甲状腺癌复发数据可视化分析系统-结语

💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。