✨作者主页 :IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
文章目录
一、前言
系统介绍
本系统《基于大数据的北京市药品批准信息数据可视化分析》立足于药品监管领域的海量数据资源,以北京市药品批准信息为核心数据源,借助大数据处理框架Hadoop与Spark构建完整的数据分析流水线。系统采用Spark SQL与Spark Core完成原始数据的清洗、转换与聚合计算,利用HDFS实现数据分布式存储管理,后端选用Spring Boot框架提供RESTful API数据接口服务,前端采用Vue框架结合ECharts图表库实现多维度的可视化交互界面。系统首页整合全局数据概览,剂型结构分析模块展示不同药品剂型的分布规律,注册分类分析模块呈现药品注册类别的统计特征,文号溯源分析模块追溯批准文号的来源与流向,效期态势分析模块监控药品有效期的时间趋势,品名热度分析模块识别高频药品名称的排序情况,风险洞察分析模块通过多指标交叉评估药品潜在风险等级。系统以直观的图表形式输出分析结果,辅助监管部门与相关从业人员洞察药品批准格局,理解数据背后的业务逻辑,为科学决策提供数据支撑。
选题背景
药品安全直接关系到公众健康与医疗服务质量,药品批准信息的有效管理与深度分析成为监管部门面临的重要课题。北京市作为全国医药产业核心区域,药品注册批准数据逐年增长,数据体量不断扩充,传统的人工统计与表格处理方式已难以应对大规模、多维度的数据分析需求。当前药品批准信息数据资源尚未得到充分开发利用,剂型分布、注册分类、效期态势等关键维度的系统化分析手段相对薄弱,监管部门缺乏直观高效的数据洞察工具。大数据技术的迅猛发展为药品数据管理提供了新的技术路径,Hadoop与Spark等分布式计算框架能够支撑海量数据的存储与高效运算,数据可视化技术则可助力业务人员快速理解复杂数据背后的规律。基于大数据的药品批准信息可视化分析系统的构建,有助于提升药品监管领域的数据利用效率,将分散的数据资源转化为可交互、可探索的可视化成果,推动药品监管逐步向数据驱动方向演进。
选题意义
本课题的意义体现在多个层面。在数据管理层面,系统将分散的药品批准信息纳入统一的数据处理框架,借助Hadoop与Spark实现数据的规范化清洗与结构化存储,改善数据碎片化现状,降低人工整理数据的工作负担,使数据管理更加规范有序。在业务分析层面,系统围绕剂型结构、注册分类、文号溯源、效期态势等业务维度构建分析指标体系,通过可视化图表直观展示数据分布特征与变化趋势,帮助监管人员快速掌握药品批准的整体态势,识别潜在风险品类,为日常监管工作提供参考依据。在技术实践层面,本课题将大数据技术栈应用于药品监管数据场景,验证了Hadoop+Spark架构在政务数据处理中的可行性,对类似数据密集型监管业务的信息化建设具有参考价值。在决策支持层面,系统输出的分析结果能够辅助监管部门科学调配资源,优化审批流程,提升药品监管的针对性与有效性,为推动药品监管现代化提供技术支撑。
二、开发环境
- 大数据框架: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
三、系统界面展示
- 基于大数据的北京市药品批准信息数据可视化分析界面展示:








四、代码参考
- 项目实战代码参考:
java(贴上部分代码)
// ==================== 1. 剂型结构分析 ====================
@Service
public class DosageFormAnalysisService {
@Autowired
private SparkSession sparkSession;
public Map<String, Object> analyzeDosageFormDistribution() {
Dataset<Row> rawData = sparkSession.read().option("header", "true")
.csv("hdfs://master:9000/data/beijing_drug_approval.csv");
Dataset<Row> cleanedData = rawData.filter(col("dosage_form").isNotNull())
.filter(col("approval_number").isNotNull());
Dataset<Row> groupedData = cleanedData.groupBy("dosage_form")
.agg(count("approval_number").alias("count"));
List<Row> resultList = groupedData.collectAsList();
long totalCount = cleanedData.count();
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> chartData = new ArrayList<>();
for (Row row : resultList) {
Map<String, Object> item = new HashMap<>();
String dosageForm = row.getString(0);
long count = row.getLong(1);
item.put("name", dosageForm);
item.put("value", count);
double percentage = (double) count / totalCount * 100;
item.put("percentage", String.format("%.2f", percentage) + "%");
chartData.add(item);
}
result.put("chartData", chartData);
result.put("totalCount", totalCount);
result.put("dosageFormTypes", resultList.size());
return result;
}
}
// ==================== 2. 文号溯源分析 ====================
@Service
public class ApprovalNumberTraceService {
@Autowired
private SparkSession sparkSession;
public Map<String, Object> traceApprovalNumberSource() {
Dataset<Row> rawData = sparkSession.read().option("header", "true")
.csv("hdfs://master:9000/data/beijing_drug_approval.csv");
Dataset<Row> validData = rawData.filter(col("approval_number").isNotNull())
.filter(col("manufacturer").isNotNull())
.filter(col("approval_date").isNotNull());
Dataset<Row> yearExtracted = validData.withColumn("approval_year",
functions.year(functions.to_date(col("approval_date"))));
Dataset<Row> groupedByYear = yearExtracted.groupBy("approval_year", "manufacturer")
.agg(count("approval_number").alias("count"));
List<Row> rowList = groupedByYear.collectAsList();
Map<String, Map<String, Long>> yearManufacturerMap = new HashMap<>();
for (Row row : rowList) {
int year = row.getInt(0);
String manufacturer = row.getString(1);
long count = row.getLong(2);
String yearKey = String.valueOf(year);
yearManufacturerMap.computeIfAbsent(yearKey, k -> new HashMap<>())
.put(manufacturer, count);
}
Map<String, Object> result = new HashMap<>();
result.put("yearManufacturerData", yearManufacturerMap);
List<String> years = new ArrayList<>(yearManufacturerMap.keySet());
Collections.sort(years);
result.put("years", years);
Dataset<Row> manufacturerTotal = validData.groupBy("manufacturer")
.agg(count("approval_number").alias("total"))
.orderBy(col("total").desc()).limit(10);
List<Row> topManufacturers = manufacturerTotal.collectAsList();
result.put("topManufacturers", topManufacturers);
return result;
}
}
// ==================== 3. 风险洞察分析 ====================
@Service
public class RiskInsightAnalysisService {
@Autowired
private SparkSession sparkSession;
public Map<String, Object> analyzeRiskInsight() {
Dataset<Row> rawData = sparkSession.read().option("header", "true")
.csv("hdfs://master:9000/data/beijing_drug_approval.csv");
Dataset<Row> preparedData = rawData.select(col("drug_name"), col("dosage_form"),
col("approval_number"), col("manufacturer"), col("approval_date"),
col("expiry_date"), col("registration_category"));
Dataset<Row> validData = preparedData.filter(col("expiry_date").isNotNull())
.filter(col("approval_date").isNotNull());
Date currentDate = new Date();
long currentMillis = currentDate.getTime();
List<Row> rows = validData.collectAsList();
List<Map<String, Object>> riskItems = new ArrayList<>();
for (Row row : rows) {
String drugName = row.getString(0);
String dosageForm = row.getString(1);
String approvalNumber = row.getString(2);
String manufacturer = row.getString(3);
Date approvalDate = row.getDate(4);
Date expiryDate = row.getDate(5);
String category = row.getString(6);
long expiryMillis = expiryDate.getTime();
long remainingDays = (expiryMillis - currentMillis) / (24 * 60 * 60 * 1000);
double riskScore = 0.0;
if (remainingDays < 180) riskScore += 40;
else if (remainingDays < 365) riskScore += 20;
if (category != null && (category.contains("进口") || category.contains("再注册"))) {
riskScore += 25;
}
if (remainingDays < 90) riskScore += 30;
Map<String, Object> item = new HashMap<>();
item.put("drugName", drugName);
item.put("approvalNumber", approvalNumber);
item.put("manufacturer", manufacturer);
item.put("remainingDays", remainingDays);
item.put("riskScore", Math.min(riskScore, 100));
item.put("riskLevel", riskScore >= 70 ? "高风险" : riskScore >= 40 ? "中风险" : "低风险");
riskItems.add(item);
}
riskItems.sort((a, b) -> Double.compare(
(double) b.get("riskScore"), (double) a.get("riskScore")));
Map<String, Object> result = new HashMap<>();
result.put("riskItems", riskItems.size() > 50 ? riskItems.subList(0, 50) : riskItems);
long highRiskCount = riskItems.stream()
.filter(item -> "高风险".equals(item.get("riskLevel"))).count();
long mediumRiskCount = riskItems.stream()
.filter(item -> "中风险".equals(item.get("riskLevel"))).count();
long lowRiskCount = riskItems.stream()
.filter(item -> "低风险".equals(item.get("riskLevel"))).count();
result.put("highRiskCount", highRiskCount);
result.put("mediumRiskCount", mediumRiskCount);
result.put("lowRiskCount", lowRiskCount);
return result;
}
}
java(贴上部分代码)
五、系统视频
基于大数据的北京市药品批准信息数据可视化分析项目视频:
结语
最新大数据毕业设计选题推荐-基于大数据的北京市药品批准信息数据可视化分析-大数据-Spark-Hadoop-Bigdata
想看其他类型的计算机毕业设计作品也可以和我说都有 谢谢大家!
有技术这一块问题大家可以评论区交流或者私我~
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇