北京市医保药品数据分析系统-简介
本系统全称为“基于Spark+Django的北京市医保药品数据分析系统”,是一个旨在运用大数据技术对公开的医保药品目录数据进行深度挖掘与可视化展示的Web应用。系统整体采用前后端分离的架构模式,后端技术栈以Python为核心,利用Django框架搭建RESTful API接口,负责业务逻辑处理和数据调度;核心的数据处理与分析任务则交由Apache Spark引擎完成,通过Spark SQL对存储在HDFS上的大规模药品数据进行高效的分布式计算和统计分析,充分发挥了其在处理TB级数据时的性能优势。前端界面则基于Vue.js框架构建,并集成ElementUI组件库美化交互,利用Echarts图表库将复杂的分析结果以饼图、柱状图、词云等多种直观的可视化形式呈现给用户。系统功能设计上,并不仅仅停留在简单的数据查询,而是构建了五个核心分析维度:首先,从药品核心属性出发,对医保等级、常见剂型、自付比例等进行宏观统计;其次,深入到生产企业维度,分析各药企的市场份额、产品组合及剂型策略;再次,聚焦于医保报销限制策略,通过文本挖掘技术对报销说明进行归类与关联分析;同时,系统还设有中药与配方颗粒的专题分析模块,体现对特定药品领域的关注;最后,系统引入了探索性的机器学习算法,利用Apriori算法挖掘药品属性间的强关联规则,并运用K-Means算法对药品进行特征聚类,从而实现从描述性统计到探索性分析的层次递进,为理解医保目录的内在结构与规律提供了全新的、数据驱动的视角。
北京市医保药品数据分析系统-技术
开发语言:Python或Java 大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL
北京市医保药品数据分析系统-背景
选题背景 近些年,大家对医疗健康信息的关注度越来越高,国家也在推动政务数据的公开透明。像北京市医保药品目录这样的数据,其实已经向社会公开了,这里面包含了成千上万种药品的信息,比如药品叫什么、哪个厂家的、报销比例多少等等。但问题是,这些公开的数据通常就是一个巨大的、冷冰冰的表格,普通人甚至是我们计算机专业的学生,一眼看过去也很难看出什么名堂。大家顶多能查查某个药在不在目录里,但对于整个目录的结构、药品之间的关联、或者哪些药企占据主导地位这些更深层次的问题,就无从下手了。传统的Excel或者单机数据库,在处理这种体量和复杂度的数据时会显得力不从心,加载慢、计算卡顿是常有的事。这就给我们提供了一个很好的切入点:能不能用我们学的大数据技术,比如Spark,来把这个“沉睡”的数据矿藏给盘活,让它变得有用、有趣,能讲出故事来。所以,这个课题就是想解决这样一个实际问题,用专业技术把原始数据变成直观的分析结果。
选题意义 说实话,做一个毕业设计,肯定谈不上能对社会产生多大的实际影响,它更大的意义还是在于对我们自己学习成果的一次综合检验和能力提升。首先从技术层面看,这个项目是一个非常完整的全栈数据分析项目。它能让我们把课堂上学的知识真正用起来,从用Python的Django框架搭后端服务,到用Spark处理大数据,再到用Vue和Echarts做前端可视化,整个技术链路走一遍,这比单纯做一个增删改查的管理系统要锻炼人得多,对大数据处理流程的理解也会更深刻。从数据分析的角度来看,这个课题让我们学会了如何去思考和挖掘数据背后的价值。我们不只是简单地做个统计,还尝试用了像K-Means聚类、Apriori关联规则这些算法,去探索数据里那些不那么明显的规律,比如“是不是注射剂的药品,报销等级普遍偏低”这类问题。这能培养我们的数据思维。最后,这个项目选的题材也比较有现实感,医保药品数据和大家的生活息息相关,做起来会更有代入感,也能给其他同学提供一个不错的参考,告诉大家毕设除了做商城和管理系统,还可以做这种有数据分析深度的项目。
北京市医保药品数据分析系统-图片展示
北京市医保药品数据分析系统-代码展示
from pyspark.sql.functions import col, desc, count, udf
from pyspark.sql.types import StringType
from pyspark.ml.feature import StringIndexer, VectorAssembler
from pyspark.ml.clustering import KMeans
# 模拟Django视图中的函数,实际项目中应在对应service层实现
def get_spark_session():
"""获取或创建SparkSession实例"""
spark = SparkSession.builder \
.appName("MedicalInsuranceDataAnalysis") \
.master("local[*]") \
.config("spark.sql.shuffle.partitions", "4") \
.getOrCreate()
return spark
def get_enterprise_market_share(data_path, top_n=10):
"""
核心功能1:药品生产企业市场份额分析
业务逻辑:按生产企业分组,统计每个企业拥有的药品数量,并降序排序,取前N名。
"""
spark = get_spark_session()
df = spark.read.option("header", "true").csv(data_path)
# 过滤掉生产企业名称为空或无效的记录
filtered_df = df.filter(col("生产企业名称").isNotNull() & (col("生产企业名称") != "无"))
# 按生产企业名称分组并计数
share_df = filtered_df.groupBy("生产企业名称").agg(
count("*").alias("药品数量")
)
# 按药品数量降序排序
top_enterprises_df = share_df.orderBy(desc("药品数量")).limit(top_n)
# 将结果转换为JSON格式以便返回给前端
result_list = [row.asDict() for row in top_enterprises_df.collect()]
print(f"--- 药品生产企业市场份额Top{top_n} ---")
print(result_list)
return result_list
def analyze_enterprise_product_strategy(data_path, enterprise_list):
"""
核心功能2:龙头企业的产品组合策略分析 (按医保等级)
业务逻辑:筛选出指定的龙头企业,然后按企业和医保目录等级两个维度进行分组统计。
"""
spark = get_spark_session()
df = spark.read.option("header", "true").csv(data_path)
# 筛选出指定的龙头企业的数据
filtered_df = df.filter(col("生产企业名称").isin(enterprise_list))
# 按企业名称和医保目录等级进行分组计数
strategy_df = filtered_df.groupBy("生产企业名称", "医保目录等级").agg(
count("*").alias("药品数量")
).orderBy("生产企业名称", desc("药品数量"))
# 结果可以直接进行处理,例如转换为适合Echarts的格式
# 这里我们模拟一个透视表的效果
pivoted_df = strategy_df.groupBy("生产企业名称").pivot("医保目录等级", ["甲类", "乙类", "丙类"]).sum("药品数量").na.fill(0)
result_list = [row.asDict() for row in pivoted_df.collect()]
print(f"--- 龙头企业产品组合策略分析 ---")
print(result_list)
return result_list
def perform_kmeans_clustering(data_path, k=3):
"""
核心功能3:基于特征的药品聚类分析
业务逻辑:选取数值化特征,使用K-Means算法将药品自动聚类。
"""
spark = get_spark_session()
df = spark.read.option("header", "true").csv(data_path)
# 数据预处理:选择特征并进行数值化
# 假设'自付比例'是数值,'医保目录等级'和'报销限制'是类别
df = df.withColumn("自付比例_num", col("自付比例").cast("float")).na.fill(0)
# 使用StringIndexer将分类变量转换为数值索引
indexer_level = StringIndexer(inputCol="医保目录等级", outputCol="等级索引")
indexer_limit = StringIndexer(inputCol="报销限制说明", outputCol="限制索引")
df_indexed = indexer_level.fit(df).transform(df)
df_indexed = indexer_limit.fit(df_indexed).transform(df_indexed)
# 将特征合并为一个向量
assembler = VectorAssembler(
inputCols=["自付比例_num", "等级索引", "限制索引"],
outputCol="features"
)
feature_df = assembler.transform(df_indexed)
# 创建并训练K-Means模型
kmeans = KMeans(k=k, seed=1, featuresCol="features", predictionCol="prediction")
model = kmeans.fit(feature_df)
# 获取聚类结果
predictions = model.transform(feature_df)
# 统计每个类别的药品数量
result_df = predictions.groupBy("prediction").count()
result_list = [{"cluster": row["prediction"], "count": row["count"]} for row in result_df.collect()]
print(f"--- 药品K-Means聚类结果 ---")
print(result_list)
return result_list
北京市医保药品数据分析系统-结语
还在为毕设选题发愁?还在增删改查里打转吗?希望这个基于Spark+Django的医保数据分析系统,能给你带来一点不一样的思路。
它展示了如何将大数据技术与实际业务场景结合,让你的毕设不再是简单的管理系统,而是一个有深度、有亮点的真实数据分析作品。从选题、技术实现到最后的成果展示,这里面的每一步都可能藏着让你在答辩时脱颖而出的关键点。
如果觉得这个项目对你有启发,别忘了【点赞、收藏、转发】一键三连支持一下!大家有什么想交流的,或者对Spark、Django在毕设中的应用有什么疑问,都热烈欢迎在评论区留言,我们一起讨论进步