【5大维度21个分析点】吃透Hadoop+Django北京市医保药品数据分析系统 毕业设计 选题推荐 毕设选题 数据分析

53 阅读7分钟

北京市医保药品数据分析系统-简介

基于Hadoop+Django的北京市医保药品数据分析系统是一个完整的大数据分析与可视化展示平台。整个系统的核心是利用大数据技术栈来处理和挖掘北京市医保药品目录这份庞大数据。在后端,我们首先通过Hadoop的HDFS作为分布式文件系统,来存储原始的药品数据文件,确保数据的可靠存储和高吞吐量访问。接着,利用Spark强大的内存计算能力,特别是通过Spark SQL对数据进行高效的ETL(提取、转换、加载)操作,将非结构化的数据清洗、整理成可供分析的结构化格式。所有的数据处理、统计分析以及机器学习算法(如Apriori关联规则和K-Means聚类)的运算,都是在Spark集群上完成的,这保证了面对海量数据时系统依然能有出色的性能表现。分析得到的结果数据,会被存入MySQL数据库中。而在前端,我们采用Python的Django框架来搭建Web服务,它负责提供API接口,将MySQL中的分析结果数据传递给前端。前端界面则由Vue.js构建,并借助Echarts图表库,将复杂的药品数据以条形图、饼图、词云图等多种直观、动态、可交互的可视化图表形式呈现给用户。用户通过浏览器访问这个系统,就可以直观地探索药品的核心属性分布、生产企业格局、医保报销限制策略等五大维度的二十余个分析结果,实现从原始数据到商业洞察的完整闭环。

北京市医保药品数据分析系统-技术

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 数据库:MySQL

北京市医保药品数据分析系统-背景

选题背景 现在咱们生活里,医疗健康是个绕不开的话题,尤其是医保,跟每个人都息息相关。每年,像北京这样的大城市,医保目录里都包含了成千上万种药品,这里面信息量巨大,比如哪种药是甲类、哪种是乙类,哪个药厂生产的药最多,不同药品的报销规定又有什么弯弯绕绕。这些数据其实是一座金矿,但它们通常就是一张张巨大的表格,密密麻麻的,普通人看着头大,就算用Excel去分析,稍微数据量大一点电脑就卡得不行,更别提想从里面发现一些深层次的规律了。说白了,就是数据摆在那,但价值没被挖出来。与此同时,现在大数据技术越来越火,像Hadoop、Spark这些工具,就是专门为了解决这种处理海量数据难题而生的。所以我就琢磨着,能不能把这两件事结合起来,用这些专业的大数据工具,去分析一下这些看着就头疼的医保数据,看看能不能把它变得直观易懂,让数据自己“说话”,这就是做这个课题最开始的想法。

选题意义 做这个系统,说实话,主要还是对自己的一次综合锻炼,意义也体现在几个方面。从技术学习的角度看,它算是一次不错的尝试,让我把课堂上学的Hadoop、Spark、Python、Django这些零散的知识点串了起来,真正动手搭建一个从数据存储、处理分析到前端可视化展示的完整项目。这比单纯做个增删改查的管理系统,在技术深度上要更有挑战性,也更能体会到大数据处理的全流程。从实际应用的角度来看,虽然咱们这个只是个毕设,但它确实提供了一个小小的视角,去观察和理解复杂的医保药品数据。比如,通过系统里的图表,可以很清楚地看到哪些药厂在北京市场占有率高,或者哪类药品的报销限制最严格。这些分析结果对于学习公共卫生管理或者医药相关专业的同学来说,可能是一个挺有意思的参考资料,帮助他们更直观地理解政策。总的来说,这个系统更多是验证了用大数据技术来分析医保药品数据的可行性,为以后可能进行的更深入、更复杂的研究,打下了一个小小的基础。

北京市医保药品数据分析系统-图片展示

QQ20251023-191621.png

QQ20251023-191740.png

QQ20251023-191805.png

QQ20251023-191830.png

QQ20251023-191908.png

QQ20251023-191941.png

QQ20251023-192011.png

QQ20251023-192054.png

QQ20251023-192139.png

QQ20251023-192218.png

北京市医保药品数据分析系统-代码展示

from pyspark.sql.functions import col, count, desc, when
from pyspark.ml.feature import VectorAssembler, StringIndexer, OneHotEncoder
from pyspark.ml.clustering import KMeans
from pyspark.ml import Pipeline
import pandas as pd
def initialize_spark_session():
    """初始化并返回一个SparkSession实例"""
    spark = SparkSession.builder \
        .appName("MedicalInsuranceDrugAnalysis") \
        .master("local[*]") \
        .config("spark.sql.warehouse.dir", "file:///C:/spark-warehouse") \
        .getOrCreate()
    return spark
def analyze_drug_forms(spark, data_path):
    """功能1:药品常见剂型分析"""
    # 读取HDFS上的数据
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    # 过滤掉剂型为空的记录
    df_filtered = df.filter(col("药品剂型").isNotNull())
    # 按药品剂型分组计数
    form_counts = df_filtered.groupBy("药品剂型").agg(count("*").alias("药品数量"))
    # 按数量降序排序,取前15名
    top_forms = form_counts.orderBy(desc("药品数量")).limit(15)
    # 将Spark DataFrame转换为Pandas DataFrame,方便后续处理或转为JSON
    result_pandas = top_forms.toPandas()
    # 假设这里有一个转换为JSON字符串的步骤,以供API返回
    # result_json = result_pandas.to_json(orient="records", force_ascii=False)
    print("药品常见剂型分析完成")
    # 为了演示,我们直接返回Pandas DataFrame
    return result_pandas
def analyze_top_company_strategy(spark, data_path, top_n=10):
    """功能2:龙头企业的产品组合策略分析"""
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    # 过滤掉生产企业名称为空的记录
    df_filtered = df.filter(col("生产企业名称").isNotNull() & (col("生产企业名称") != "无"))
    # 统计各企业的药品数量
    company_counts = df_filtered.groupBy("生产企业名称").agg(count("*").alias("药品总数"))
    # 找出药品数量排名前N的龙头企业
    top_companies = company_counts.orderBy(desc("药品总数")).limit(top_n)
    top_company_names = [row.生产企业名称 for row in top_companies.collect()]
    # 筛选出这些龙头企业的全部药品数据
    top_companies_drugs_df = df_filtered.filter(col("生产企业名称").isin(top_company_names))
    # 分析这些企业的产品在不同医保等级的分布
    strategy_analysis = top_companies_drugs_df.groupBy("生产企业名称", "医保目录等级").agg(count("*").alias("数量"))
    # 为了方便前端Echarts展示,通常需要做数据透视或者格式化
    result_pivot = strategy_analysis.groupBy("生产企业名称").pivot("医保目录等级", ["甲类", "乙类", "丙类"]).sum("数量")
    result_pivot = result_pivot.na.fill(0)
    result_pandas = result_pivot.toPandas()
    print("龙头企业产品组合策略分析完成")
    return result_pandas
def perform_drug_clustering(spark, data_path, k=3):
    """功能3:药品聚类分析(使用K-Means算法)"""
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    # 选择用于聚类的特征,并处理缺失值
    features_df = df.select("医保目录等级", "自付比例", "报销限制说明").na.drop()
    # 将分类特征数值化
    # StringIndexer将字符串标签转换为索引
    indexer = StringIndexer(inputCols=["医保目录等级", "报销限制说明"], outputCols=["level_index", "limit_index"])
    # OneHotEncoder将索引转换为独热编码向量
    encoder = OneHotEncoder(inputCols=["level_index", "limit_index"], outputCols=["level_vec", "limit_vec"])
    # 将自付比例转换为数值类型
    features_df = features_df.withColumn("自付比例_numeric", col("自付比例").cast("double"))
    features_df = features_dff.na.drop(subset=["自付比例_numeric"])
    # VectorAssembler将所有特征合并成一个特征向量
    assembler = VectorAssembler(inputCols=["level_vec", "limit_vec", "自付比例_numeric"], outputCol="features")
    # 创建K-Means模型
    kmeans = KMeans(k=k, seed=1, featuresCol="features", predictionCol="cluster_id")
    # 创建一个Pipeline来串联所有步骤
    pipeline = Pipeline(stages=[indexer, encoder, assembler, kmeans])
    # 训练模型并进行预测
    model = pipeline.fit(features_df)
    predictions = model.transform(features_df)
    # 统计每个聚类的数量
    cluster_summary = predictions.groupBy("cluster_id").agg(count("*").alias("药品数量"))
    result_pandas = cluster_summary.orderBy("cluster_id").toPandas()
    print("药品聚类分析完成")
    return result_pandas

北京市医保药品数据分析系统-结语

从数据处理到算法应用,再到酷炫的可视化,这个项目涵盖了5大分析维度和20多个具体功能点,深度和广度都直接拉满。与其自己埋头苦想,不如站在巨人的肩膀上。

如果这份资料对你有帮助,希望同学能给个【一键三连】支持一下,你的鼓励是我继续分享的最大动力!大家在选题时还踩过哪些坑?或者对哪个分析维度最感兴趣?欢迎在评论区留言交流,我们一起通关毕设!