10大可视化功能+3万条数据:基于Python+Spark的药店数据分析系统详解 毕业设计 选题推荐 毕设选题 数据分析

64 阅读7分钟

广西药店数据可视化分析系统-简介

本系统全称为“基于Python+Echarts的广西药店数据可视化分析系统”,是一个采用前后端分离架构,并融合了大数据技术的综合性毕业设计项目。整个项目的核心目标是对广西全区的药店公开数据进行深度挖掘与可视化呈现,从而揭示区域内医药零售市场的分布特征与竞争格局。在技术实现上,后端服务基于Python语言和Django框架搭建,负责处理所有的业务逻辑和数据接口。关键的数据处理与分析环节,我们引入了大数据技术栈,利用Hadoop的HDFS作为分布式文件存储,并借助Spark强大的内存计算能力(特别是Spark SQL和Pandas库)对数万条药店数据进行高效的清洗、聚合与统计分析。前端展示层则由Vue.js、Element-UI和Echarts共同构建,Vue负责整体页面的组件化开发,Element-UI提供美观统一的UI组件,而Echarts则作为数据可视化的核心引擎,将后端分析得出的复杂数据,转化为直观且具有交互性的图表,如城市药店数量柱状图、连锁品牌市场占有率饼图、全区药店地理分布热力图、以及基于泰森多边形的服务范围评估图等十余种可视化看板。通过这个系统,用户可以一目了然地洞察广西药店市场的深层信息,为学术研究或商业决策提供了有价值的数据参考。

广西药店数据可视化分析系统-技术

开发语言: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

广西药店数据可视化分析系统-背景

选题背景

这几年大家都能感觉到,身边的药店好像越来越多了,不管是市中心还是居民小区,总能看到几家。尤其是在广西这样的地方,随着大家对健康越来越重视,加上人口老龄化的趋势,买药、咨询健康问题都成了日常需求。这些药店的信息,比如它们叫什么名字、开在哪里、能不能用医保异地结算,其实很多都公布在网上了。但这些信息特别零散,东一个西一个,不成体系。对于普通人来说,这些就是一堆杂乱的地址和名字,可对于我们学计算机的同学来说,这背后其实是隐藏着规律和价值的“大数据”。所以我就想,能不能把这些公开的、真实的数据整合起来,用我们学的技术去分析一下,看看能发现什么有意思的现象。这比自己去编造一些学生信息、商品信息来做管理系统要真实得多,也更有挑战性,算是一次把技术用在解决身边实际问题上的尝试。

选题意义

说实话,做这么一个毕业设计,肯定谈不上能给社会带来多大的变革,主要还是对自己学习成果的一次检验和总结。它的意义对我个人来说还挺大的。这个项目让我完整地走了一遍“数据获取-数据处理-后端开发-前端展示”的全流程,把这几年学的Python、数据库、大数据框架(像Spark和Hadoop)以及前端Vue、Echarts这些技术都串起来用了一遍,这比单纯学理论要深刻得多。从实际效果来看,这个系统确实能提供一些有意思的视角。比如,通过可视化图表,我们可以很直观地看到哪个城市的药店资源最集中,哪个连锁品牌在广西的市场份额最大,或者哪些区域可能是药店服务的“盲区”。这些分析结果虽然比较初步,但它展示了一种用数据说话的思维方式。对于一个即将毕业的学生而言,能做出一个数据来源真实、技术栈完整、又能产生实际可视化结果的项目,无论是在答辩时展示,还是作为自己技术能力的一个证明,都是一件挺有价值和成就感的事情。

广西药店数据可视化分析系统-图片展示

QQ20251029-152516.png

QQ20251029-152600.png

QQ20251029-152633.png

QQ20251029-152719.png

QQ20251029-152802.png

QQ20251029-152842.png

QQ20251029-152917.png

QQ20251029-152956.png

QQ20251029-153031.png

QQ20251029-153057.png

QQ20251029-153129.png

QQ20251029-153154.png

QQ20251029-153223.png

QQ20251029-153322.png

广西药店数据可视化分析系统-代码展示

from pyspark.sql.functions import col, when, count, regexp_extract
def main_analysis_functions():
    spark = SparkSession.builder.appName("GuangxiPharmacyAnalysis").master("local[*]").getOrCreate()
    # 伪造一个文件路径,实际使用时请替换为你的HDFS或本地路径
    file_path = "hdfs:///data/guangxi_pharmacy.csv"
    # 加载数据,假设CSV有表头并且自动推断类型
    df = spark.read.csv(file_path, header=True, inferSchema=True)
    # --- 核心功能1: 广西各地市药店数量分布分析 ---
    # 按'城市名称'分组并计数
    city_distribution_df = df.groupBy("城市名称").count()
    # 为了后续方便使用,重命名count列
    city_distribution_df = city_distribution_df.withColumnRenamed("count", "pharmacy_count")
    # 筛选掉城市名称为空的记录
    city_distribution_df = city_distribution_df.filter(col("城市名称").isNotNull())
    # 按药店数量降序排列
    city_distribution_df = city_distribution_df.orderBy(col("pharmacy_count").desc())
    # 为了方便前端使用,通常会转换为Pandas DataFrame或直接保存
    city_distribution_pandas = city_distribution_df.toPandas()
    print("各地市药店数量分布分析完成:")
    print(city_distribution_pandas.head())
    # 将结果保存到CSV文件,coalesce(1)是为了合并成一个文件
    # city_distribution_df.coalesce(1).write.mode("overwrite").csv("output/city_distribution")
    # --- 核心功能2: 广西药店连锁品牌市场占有率分析 ---
    # 定义主要连锁品牌的正则表达式
    brand_pattern = "(大参林|一心堂|老百姓|国大药房|桂中|康全|一心|百姓)"
    # 使用正则表达式提取药店名称中的品牌信息
    df_with_brand = df.withColumn("brand", regexp_extract(col("药店名称"), brand_pattern, 1))
    # 为其他非知名连锁或单体药店设置一个统一的名称'其他'
    df_with_brand = df_with_brand.withColumn("brand", when(col("brand") == "", "其他").otherwise(col("brand")))
    # 按提取出的'brand'列进行分组计数
    brand_market_share_df = df_with_brand.groupBy("brand").count()
    # 重命名count列
    brand_market_share_df = brand_market_share_df.withColumnRenamed("count", "brand_count")
    # 按品牌数量降序排列
    brand_market_share_df = brand_market_share_df.orderBy(col("brand_count").desc())
    # 过滤掉品牌名为'其他'且数量过少的记录,让图表更清晰
    brand_market_share_df = brand_market_share_df.filter((col("brand") != "其他") | (col("brand_count") > 10))
    brand_market_share_pandas = brand_market_share_df.toPandas()
    print("\n药店连锁品牌市场占有率分析完成:")
    print(brand_market_share_pandas.head())
    # brand_market_share_df.coalesce(1).write.mode("overwrite").csv("output/brand_share")
    # --- 核心功能3: 各地市异地就医服务开通比例分析 ---
    # 筛选出核心字段,并处理可能的空值
    service_df = df.select("城市名称", "是否开通异地就医服务").filter(col("城市名称").isNotNull())
    # 将'是'/'否'或'1'/'0'等不同形式统一为数值,便于计算
    service_df = service_df.withColumn("service_enabled", when(col("是否开通异地就医服务") == "是", 1).otherwise(0))
    # 按城市进行分组,同时计算总数和开通服务的数量
    city_service_stats_df = service_df.groupBy("城市名称").agg(
        count("*").alias("total_pharmacies"),
        count(when(col("service_enabled") == 1, True)).alias("enabled_pharmacies")
    )
    # 计算开通率
    city_service_stats_df = city_service_stats_df.withColumn(
        "enabled_ratio",
        (col("enabled_pharmacies") / col("total_pharmacies")) * 100
    )
    # 按开通率降序排列
    city_service_stats_df = city_service_stats_df.orderBy(col("enabled_ratio").desc())
    city_service_stats_pandas = city_service_stats_df.toPandas()
    print("\n各地市异地就医服务开通比例分析完成:")
    print(city_service_stats_pandas.head())
    # city_service_stats_df.coalesce(1).write.mode("overwrite").csv("output/service_ratio")
    # 关闭SparkSession
    spark.stop()
if __name__ == '__main__':
    main_analysis_functions()

广西药店数据可视化分析系统-结语

通过本次毕业设计,我不仅系统地应用了Python、Django、Vue等全栈开发技术,还深入实践了Hadoop和Spark等大数据工具在真实数据处理场景中的应用。从数据采集到最终的可视化呈现,每一步都是对所学知识的巩固和挑战。虽然系统分析的深度和广度还有提升空间,但它成功验证了技术方案的可行性,也让我对数据分析的全流程有了更深刻的理解。这次经历是宝贵的,它为我未来的学习和工作奠定了坚实的基础。

爆肝数月,我的Python大数据毕设——“广西药店数据可视化分析系统”终于出炉!想知道你家乡哪个品牌的药店最多吗?想看全广西的药店分布热力图吗?从数据爬取到Spark分析,再到Echarts酷炫可视化,所有技术栈和踩坑经验都整理好啦!需要源码和思路参考的同学,一键三连支持一下,然后在评论区扣“666”,我们一起交流进步,祝大家答辩顺利!