💖💖作者:计算机编程小央姐 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜
💕💕文末获取源码
@TOC
【spark+hadoop】基于大数据的北京市医保药品数据分析系统-系统功能介绍
【spark+hadoop】基于大数据的北京市医保药品数据分析系统是依托 Hadoop 与 Spark 核心技术构建的医保领域数据分析平台,聚焦北京市医保药品目录数据的深度挖掘与可视化呈现。系统整合 HDFS 分布式存储能力与 Spark SQL 的高效计算特性,结合 Python 数据处理库与 Vue 前端可视化技术,实现对医保药品核心属性、生产企业、报销限制、中药专题及关联聚类等多维度的分析。通过对医保目录等级、药品剂型、自付比例、生产企业分布等关键数据的统计分析,以及 Apriori 关联规则、K-Means 聚类等算法的应用,挖掘数据背后的潜在规律,为医保政策优化、药品市场监管及患者就医选择提供数据支撑,系统同时支持 Java+Spring Boot 与 Python+Django 双技术栈部署,满足不同开发场景的需求。
【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, max, min, split, explode, regexp_extract, when from pyspark.ml.fpm import FPGrowth from pyspark.ml.clustering import KMeans from pyspark.ml.feature import VectorAssembler, StringIndexer, StandardScaler, TFIDFVectorizer, StopWordsRemover import pandas as pd # 初始化SparkSession spark = SparkSession.builder.appName("BeijingMedicalInsuranceDrugAnalysis").master("local[*]").config("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000").getOrCreate() # 核心功能1:医保药品核心属性分布分析(含目录等级、剂型、自付比例统计) def analyze_drug_core_attributes(): # 读取HDFS中的医保药品数据 drug_df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/user/hadoop/medical_insurance_drugs.csv") # 医保目录等级分布统计 grade_distribution = drug_df.groupBy("医保目录等级").agg(count("注册名称").alias("药品数量")).orderBy(col("药品数量").desc()) # 药品剂型分布统计(合并相似剂型) drug_df = drug_df.withColumn("简化剂型", when(col("药品剂型").contains("片"), "片剂").when(col("药品剂型").contains("胶囊"), "胶囊剂").when(col("药品剂型").contains("注射"), "注射剂").otherwise("其他剂型")) dosage_distribution = drug_df.groupBy("简化剂型").agg(count("注册名称").alias("剂型数量")).orderBy(col("剂型数量").desc()) # 不同医保等级自付比例统计(过滤无效值) self_pay_stats = drug_df.filter(col("自付比例").isNotNull() & (col("自付比例") >= 0) & (col("自付比例") <= 100)).groupBy("医保目录等级").agg(avg("自付比例").alias("平均自付比例"), max("自付比例").alias("最高自付比例"), min("自付比例").alias("最低自付比例")).orderBy(col("医保目录等级")) # 高频核心药品分析(统计注册名称出现频次) high_freq_drugs = drug_df.groupBy("注册名称").agg(count("*").alias("出现频次")).orderBy(col("出现频次").desc()).limit(20) # 结果保存至HDFS grade_distribution.write.mode("overwrite").csv("/user/hadoop/grade_distribution", header=True) dosage_distribution.write.mode("overwrite").csv("/user/hadoop/dosage_distribution", header=True) self_pay_stats.write.mode("overwrite").csv("/user/hadoop/self_pay_stats", header=True) high_freq_drugs.write.mode("overwrite").csv("/user/hadoop/high_freq_drugs", header=True) return grade_distribution, dosage_distribution, self_pay_stats, high_freq_drugs # 核心功能2:药品关联规则分析(Apriori算法实现剂型-目录等级关联) def analyze_drug_association_rules(): # 读取数据并预处理 drug_df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/user/hadoop/medical_insurance_drugs.csv") # 筛选有效数据,处理空值 drug_df = drug_df.filter(col("医保目录等级").isNotNull() & col("简化剂型").isNotNull()) # 转换数据格式为FPGrowth要求的事务型数据 indexed_df = StringIndexer(inputCol="医保目录等级", outputCol="等级索引").fit(drug_df).transform(drug_df) indexed_df = StringIndexer(inputCol="简化剂型", outputCol="剂型索引").fit(indexed_df).transform(indexed_df) # 按药品ID分组,构建事务列表 transaction_df = indexed_df.groupBy("药品ID").agg(collect_list("等级索引").alias("等级列表"), collect_list("剂型索引").alias("剂型列表")) transaction_df = transaction_df.withColumn("items", concat(col("等级列表"), col("剂型列表"))) # 训练FPGrowth模型 fpGrowth = FPGrowth(itemsCol="items", minSupport=0.05, minConfidence=0.6) model = fpGrowth.fit(transaction_df) # 挖掘频繁项集 frequent_itemsets = model.freqItemsets.orderBy(col("freq").desc()) # 挖掘关联规则 association_rules = model.associationRules.orderBy(col("confidence").desc()) # 规则解码(将索引映射回原始标签) grade_labels = {0: "甲类", 1: "乙类", 2: "丙类"} dosage_labels = {0: "片剂", 1: "胶囊剂", 2: "注射剂", 3: "其他剂型"} def decode_rule(rule): antecedent = [grade_labels[int(item)] if item < 3 else dosage_labels[int(item)-3] for item in rule["antecedent"]] consequent = [grade_labels[int(item)] if item < 3 else dosage_labels[int(item)-3] for item in rule["consequent"]] return (antecedent, consequent, rule["confidence"], rule["support"]) decoded_rules = association_rules.rdd.map(decode_rule).toDF(["前件", "后件", "置信度", "支持度"]) # 结果保存 frequent_itemsets.write.mode("overwrite").csv("/user/hadoop/frequent_itemsets", header=True) decoded_rules.write.mode("overwrite").csv("/user/hadoop/association_rules", header=True) return frequent_itemsets, decoded_rules # 核心功能3:药品聚类分析(K-Means算法实现药品分类) def analyze_drug_clustering(): # 读取数据并预处理 drug_df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/user/hadoop/medical_insurance_drugs.csv") # 选择聚类特征:自付比例、医保目录等级(数值化)、报销限制(数值化) # 医保目录等级数值化:甲类=1,乙类=2,丙类=3 drug_df = drug_df.withColumn("等级数值", when(col("医保目录等级") == "甲类", 1).when(col("医保目录等级") == "乙类", 2).when(col("医保目录等级") == "丙类", 3).otherwise(0)) # 报销限制数值化:无限制=0,有限制=1 drug_df = drug_df.withColumn("限制数值", when(col("报销限制说明").isNull() | (col("报销限制说明") == "无限制"), 0).otherwise(1)) # 过滤有效特征数据 feature_df = drug_df.filter(col("自付比例").isNotNull() & (col("等级数值") != 0) & col("限制数值").isNotNull()).select("注册名称", col("自付比例").cast("double"), "等级数值", "限制数值") # 特征向量组装 assembler = VectorAssembler(inputCols=["自付比例", "等级数值", "限制数值"], outputCol="原始特征") feature_vector_df = assembler.transform(feature_df) # 特征标准化 scaler = StandardScaler(inputCol="原始特征", outputCol="标准化特征", withStd=True, withMean=True) scaler_model = scaler.fit(feature_vector_df) scaled_df = scaler_model.transform(feature_vector_df) # 训练K-Means模型(聚类数设为3) kmeans = KMeans(k=3, seed=1, featuresCol="标准化特征", predictionCol="聚类结果") kmeans_model = kmeans.fit(scaled_df) # 得到聚类结果 clustering_result = kmeans_model.transform(scaled_df).select("注册名称", "自付比例", "等级数值", "限制数值", "聚类结果") # 分析各聚类的特征 cluster_analysis = clustering_result.groupBy("聚类结果").agg(avg("自付比例").alias("平均自付比例"), avg("等级数值").alias("平均等级"), avg("限制数值").alias("平均限制比例"), count("注册名称").alias("药品数量")) # 结果保存 clustering_result.write.mode("overwrite").csv("/user/hadoop/clustering_result", header=True) cluster_analysis.write.mode("overwrite").csv("/user/hadoop/cluster_analysis", header=True) return clustering_result, cluster_analysis
【spark+hadoop】基于大数据的北京市医保药品数据分析系统-结语
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。