💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
国家药品采集药品数据可视化分析系统介绍
基于大数据的国家药品采集药品数据可视化分析系统是一套运用现代大数据技术构建的综合性药品信息分析平台,该系统采用Hadoop分布式存储架构和Spark大数据处理引擎作为核心技术底座,能够高效处理海量药品采集数据并进行深度分析。系统后端采用Django框架和Spring Boot框架双版本支持,分别对应Python和Java两种开发语言实现,前端运用Vue.js结合ElementUI组件库构建现代化用户界面,通过Echarts图表库实现丰富的数据可视化展示效果。系统功能模块涵盖完整的用户管理体系、药品信息管理、个人信息维护等基础功能,更重要的是提供了专业的大屏可视化展示、竞争分析、价格分析、特征分类分析和供应分析等核心业务功能,能够从多个维度对国家药品采集数据进行深入挖掘和分析。技术实现上,系统利用HDFS分布式文件系统存储大规模药品数据,通过Spark SQL进行高效的数据查询和处理,结合Pandas和NumPy等Python科学计算库进行数据分析建模,MySQL数据库负责存储结构化的业务数据,整体架构设计充分体现了大数据技术在实际业务场景中的应用价值,为药品监管部门和相关机构提供了强有力的数据分析支撑平台。
国家药品采集药品数据可视化分析系统演示视频
国家药品采集药品数据可视化分析系统演示图片
国家药品采集药品数据可视化分析系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, desc, asc, when, regexp_replace, split, explode
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.ml.clustering import KMeans
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
spark = SparkSession.builder.appName("DrugDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
def drug_price_analysis(request):
drug_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/drug_system").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "drug_info").option("user", "root").option("password", "password").load()
price_stats = drug_df.groupBy("drug_category").agg(avg("price").alias("avg_price"), count("*").alias("drug_count"), sum("total_amount").alias("total_sales")).orderBy(desc("avg_price"))
price_trend = drug_df.select("drug_name", "price", "procurement_date", "supplier_name").withColumn("price_level", when(col("price") > 100, "高价药品").when(col("price") > 50, "中价药品").otherwise("低价药品"))
monthly_price = drug_df.withColumn("month", regexp_replace(col("procurement_date"), r"(\d{4}-\d{2})-\d{2}", "$1")).groupBy("month", "drug_category").agg(avg("price").alias("monthly_avg_price")).orderBy("month")
supplier_price_analysis = drug_df.groupBy("supplier_name").agg(avg("price").alias("supplier_avg_price"), count("*").alias("supply_count")).filter(col("supply_count") >= 5).orderBy(desc("supplier_avg_price"))
price_volatility = drug_df.select("drug_name", "price", "procurement_date").withColumn("price_rank", col("price").desc()).groupBy("drug_name").agg(avg("price").alias("avg_price"), (count("*")).alias("price_records"))
competitive_drugs = drug_df.filter(col("drug_category").isin(["抗生素", "心血管药物", "消化系统药物"])).groupBy("drug_category", "drug_name").agg(avg("price").alias("category_avg_price")).withColumn("price_rank", col("category_avg_price").desc())
abnormal_prices = drug_df.select("drug_name", "price", "supplier_name").filter((col("price") > 500) | (col("price") < 1)).withColumn("price_status", when(col("price") > 500, "异常高价").otherwise("异常低价"))
regional_price = drug_df.groupBy("procurement_region", "drug_category").agg(avg("price").alias("regional_avg_price"), count("*").alias("regional_count")).orderBy("procurement_region", desc("regional_avg_price"))
price_distribution = drug_df.select("price").rdd.map(lambda x: float(x[0])).collect()
price_percentiles = np.percentile(price_distribution, [25, 50, 75, 90, 95])
price_analysis_result = {"price_stats": price_stats.collect(), "price_trend": price_trend.collect(), "monthly_price": monthly_price.collect(), "supplier_analysis": supplier_price_analysis.collect(), "competitive_analysis": competitive_drugs.collect(), "abnormal_prices": abnormal_prices.collect(), "regional_price": regional_price.collect(), "price_percentiles": price_percentiles.tolist()}
return JsonResponse(price_analysis_result)
def drug_supply_analysis(request):
supply_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/drug_system").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "drug_info").option("user", "root").option("password", "password").load()
supplier_performance = supply_df.groupBy("supplier_name").agg(count("*").alias("supply_frequency"), avg("delivery_time").alias("avg_delivery_time"), sum("total_amount").alias("total_supply_amount"), avg("quality_score").alias("avg_quality_score")).filter(col("supply_frequency") >= 3).orderBy(desc("total_supply_amount"))
supply_stability = supply_df.withColumn("month", regexp_replace(col("procurement_date"), r"(\d{4}-\d{2})-\d{2}", "$1")).groupBy("supplier_name", "month").agg(count("*").alias("monthly_supply_count"), sum("total_amount").alias("monthly_supply_amount")).orderBy("supplier_name", "month")
drug_supply_coverage = supply_df.groupBy("drug_category").agg(count("supplier_name").alias("supplier_count"), count("*").alias("supply_records")).withColumn("supply_diversity", col("supplier_count") / col("supply_records"))
regional_supply_distribution = supply_df.groupBy("procurement_region", "supplier_name").agg(count("*").alias("regional_supply_count"), sum("total_amount").alias("regional_supply_amount")).orderBy("procurement_region", desc("regional_supply_amount"))
supply_concentration = supply_df.groupBy("supplier_name").agg(sum("total_amount").alias("supplier_total_amount")).withColumn("market_share", col("supplier_total_amount") / supply_df.agg(sum("total_amount")).collect()[0][0] * 100).orderBy(desc("market_share"))
delivery_performance = supply_df.select("supplier_name", "delivery_time", "promised_delivery_time").withColumn("delivery_delay", col("delivery_time") - col("promised_delivery_time")).groupBy("supplier_name").agg(avg("delivery_delay").alias("avg_delay"), count(when(col("delivery_delay") > 0, 1)).alias("delayed_orders"))
supply_risk_assessment = supply_df.groupBy("drug_name").agg(count("supplier_name").alias("supplier_count")).withColumn("supply_risk", when(col("supplier_count") == 1, "高风险").when(col("supplier_count") <= 3, "中风险").otherwise("低风险"))
seasonal_supply_pattern = supply_df.withColumn("season", when(col("procurement_date").contains("-01-") | col("procurement_date").contains("-02-") | col("procurement_date").contains("-12-"), "冬季").when(col("procurement_date").contains("-03-") | col("procurement_date").contains("-04-") | col("procurement_date").contains("-05-"), "春季").when(col("procurement_date").contains("-06-") | col("procurement_date").contains("-07-") | col("procurement_date").contains("-08-"), "夏季").otherwise("秋季")).groupBy("season", "drug_category").agg(sum("total_amount").alias("seasonal_supply_amount")).orderBy("season")
supply_efficiency = supply_df.select("supplier_name", "total_amount", "delivery_time", "transportation_cost").withColumn("supply_efficiency_score", col("total_amount") / (col("delivery_time") + col("transportation_cost"))).groupBy("supplier_name").agg(avg("supply_efficiency_score").alias("avg_efficiency_score")).orderBy(desc("avg_efficiency_score"))
supply_quality_correlation = supply_df.select("supplier_name", "quality_score", "price", "delivery_time").groupBy("supplier_name").agg(avg("quality_score").alias("avg_quality"), avg("price").alias("avg_price"), avg("delivery_time").alias("avg_delivery"))
supply_analysis_result = {"supplier_performance": supplier_performance.collect(), "supply_stability": supply_stability.collect(), "supply_coverage": drug_supply_coverage.collect(), "regional_distribution": regional_supply_distribution.collect(), "supply_concentration": supply_concentration.collect(), "delivery_performance": delivery_performance.collect(), "supply_risk": supply_risk_assessment.collect(), "seasonal_pattern": seasonal_supply_pattern.collect(), "supply_efficiency": supply_efficiency.collect(), "quality_correlation": supply_quality_correlation.collect()}
return JsonResponse(supply_analysis_result)
def drug_feature_classification_analysis(request):
feature_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/drug_system").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "drug_info").option("user", "root").option("password", "password").load()
drug_category_distribution = feature_df.groupBy("drug_category").agg(count("*").alias("category_count"), avg("price").alias("category_avg_price"), sum("total_amount").alias("category_total_amount")).orderBy(desc("category_count"))
therapeutic_area_analysis = feature_df.groupBy("therapeutic_area").agg(count("*").alias("area_drug_count"), avg("efficacy_score").alias("avg_efficacy"), count("supplier_name").alias("supplier_diversity")).orderBy(desc("area_drug_count"))
drug_specification_clustering = feature_df.select("drug_name", "dosage_form", "specification", "price", "efficacy_score").withColumn("spec_category", when(col("dosage_form") == "片剂", "口服固体").when(col("dosage_form") == "胶囊", "口服固体").when(col("dosage_form") == "注射液", "注射剂型").otherwise("其他剂型"))
feature_vector_data = feature_df.select("drug_id", "price", "efficacy_score", "safety_score", "total_amount").na.drop()
assembler = VectorAssembler(inputCols=["price", "efficacy_score", "safety_score", "total_amount"], outputCol="features")
feature_vector_df = assembler.transform(feature_vector_data)
scaler = StandardScaler(inputCol="features", outputCol="scaled_features", withStd=True, withMean=True)
scaler_model = scaler.fit(feature_vector_df)
scaled_data = scaler_model.transform(feature_vector_df)
kmeans = KMeans(k=5, seed=42, featuresCol="scaled_features", predictionCol="cluster")
kmeans_model = kmeans.fit(scaled_data)
clustered_data = kmeans_model.transform(scaled_data)
cluster_analysis = clustered_data.groupBy("cluster").agg(count("*").alias("cluster_size"), avg("price").alias("cluster_avg_price"), avg("efficacy_score").alias("cluster_avg_efficacy")).orderBy("cluster")
drug_similarity_analysis = feature_df.select("drug_name", "drug_category", "therapeutic_area", "price", "efficacy_score").withColumn("price_efficacy_ratio", col("price") / col("efficacy_score")).groupBy("drug_category").agg(avg("price_efficacy_ratio").alias("category_pe_ratio")).orderBy(desc("category_pe_ratio"))
adverse_reaction_classification = feature_df.select("drug_name", "adverse_reactions", "safety_score").withColumn("reaction_list", split(col("adverse_reactions"), ",")).withColumn("reaction", explode(col("reaction_list"))).groupBy("reaction").agg(count("*").alias("reaction_frequency"), avg("safety_score").alias("avg_safety_score")).orderBy(desc("reaction_frequency"))
drug_complexity_analysis = feature_df.select("drug_name", "active_ingredients", "contraindications", "drug_interactions").withColumn("ingredient_count", when(col("active_ingredients").isNotNull(), split(col("active_ingredients"), ",").getItem(0)).otherwise(0)).withColumn("complexity_score", col("ingredient_count") + when(col("contraindications").isNotNull(), 1).otherwise(0) + when(col("drug_interactions").isNotNull(), 1).otherwise(0))
market_positioning_analysis = feature_df.select("drug_name", "drug_category", "price", "market_share", "brand_recognition").withColumn("market_position", when((col("price") > 100) & (col("market_share") > 20), "高端市场").when((col("price") <= 100) & (col("market_share") > 20), "大众市场").when(col("price") > 100, "小众高端").otherwise("普通市场")).groupBy("market_position").agg(count("*").alias("position_count"))
drug_lifecycle_analysis = feature_df.select("drug_name", "approval_date", "patent_expiry", "market_entry_date").withColumn("market_years", (col("patent_expiry").cast("long") - col("market_entry_date").cast("long")) / (365 * 24 * 3600)).withColumn("lifecycle_stage", when(col("market_years") < 5, "新药期").when(col("market_years") < 15, "成熟期").otherwise("专利到期期"))
classification_result = {"category_distribution": drug_category_distribution.collect(), "therapeutic_analysis": therapeutic_area_analysis.collect(), "specification_clustering": spec_category.groupBy("spec_category").count().collect(), "cluster_analysis": cluster_analysis.collect(), "similarity_analysis": drug_similarity_analysis.collect(), "adverse_reaction": adverse_reaction_classification.collect(), "complexity_analysis": drug_complexity_analysis.collect(), "market_positioning": market_positioning_analysis.collect(), "lifecycle_analysis": drug_lifecycle_analysis.collect()}
return JsonResponse(classification_result)
国家药品采集药品数据可视化分析系统文档展示
💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目