计算机毕业设计选题推荐|【基于大数据的北京市招标公告数据分析与可视化】Hadoop+Spark 实战
精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻
💖🔥作者主页:计算机毕设木哥🔥 💖
一、项目介绍
政府采购招标公告体量大、字段杂、空壳行多,人工翻表很难摸清采购方式结构、预算规模与品目热点,也难快速发现异常高额或品目共现规律,因此需要把清洗、分析和展示串成一套可用的系统。本文通过开发一个基于大数据的北京市招标公告数据分析与可视化系统,用以帮助优化北京市财政招标公告的结构化分析与可视化呈现。
系统采用 Hadoop 做数据落地,用 Python 做清洗派生,用 PySpark 与 scikit-learn 完成统计与挖掘,后端用 Django 提供分析接口,前端用 Vue 与 ECharts 做分析页和大屏。功能上覆盖采购方式、预算规模、品目分布、开标区位、发布趋势六大维度共二十余项分析,采购画像维接入 K-Means 项目分群、Isolation Forest 预算异常、FP-Growth 品目关联与 TF-IDF 主题词权,并提供可视化大屏轮播与招标公告数据管理。
经过系统测试,本系统能满足计算机毕设演示、财政招标相关研习与数据可视化学习等场景对“看清结构、看懂趋势、抓住异常”的需求,也便于把开放招标数据转成可复用的分析入口,对同类城市招标数据课题有一定参考意义。
二、开发环境
- 大数据技术:Hadoop、Spark、Hive
- 开发技术:Python、Django框架、Vue、Echarts
- 软件工具:Pycharm、DataGrip、Anaconda
- 可视化 工具 Echarts
三、视频展示
计算机毕业设计选题推荐|【基于大数据的北京市招标公告数据分析
四、项目展示
登录模块:








五、代码展示
def project_cluster_analysis(input_df):
feat_cols = ['budget_amount', 'doc_price', 'doc_window_days', 'announce_to_open_days']
df = input_df
for c in feat_cols:
df = df.filter(col(c).isNotNull())
df = df.filter(col('purchase_method').isin(list(METHOD_CODE.keys())))
method_map = create_map(*[lit(x) for kv in METHOD_CODE.items() for x in kv])
df = df.withColumn('method_code', method_map[col('purchase_method')].cast(DoubleType()))
df = df.filter(col('method_code').isNotNull())
n = df.count()
feature_names = feat_cols + ['method_code']
assembler = VectorAssembler(inputCols=feature_names, outputCol='features_raw')
assembled = assembler.transform(df)
scaler = StandardScaler(inputCol='features_raw', outputCol='features', withStd=True, withMean=True)
scaled = scaler.fit(assembled).transform(assembled)
# 轮廓系数在 K=2..5 中选最优
best_k, best_score = 3, -1.0
evaluator = ClusteringEvaluator(
featuresCol='features', predictionCol='prediction', metricName='silhouette'
)
for k in range(2, 6):
model_k = SparkKMeans(
k=k, seed=42, featuresCol='features', predictionCol='prediction'
).fit(scaled)
score = float(evaluator.evaluate(model_k.transform(scaled)))
if score > best_score:
best_k, best_score = k, score
model = SparkKMeans(
k=best_k, seed=42, featuresCol='features', predictionCol='cluster_id'
).fit(scaled)
pred = model.transform(scaled)
# 用簇内原始特征均值生成可解释中文标签(高低额/长短窗口/主导采购方式)
center_pdf = (
pred.groupBy('cluster_id')
.agg(*[F.round(F.avg(c), 2).alias(c) for c in feature_names])
.orderBy('cluster_id')
.toPandas()
)
centers_raw = [[float(row[fn]) for fn in feature_names] for _, row in center_pdf.iterrows()]
label_map = _label_clusters_by_centers(centers_raw, feature_names)
summary_rows = []
for cid in range(best_k):
sub = pred.filter(col('cluster_id') == cid)
cnt = sub.count()
avg_budget = float(sub.agg(F.avg('budget_amount')).collect()[0][0] or 0)
avg_win = float(sub.agg(F.avg('doc_window_days')).collect()[0][0] or 0)
top_method = (
sub.groupBy('purchase_method')
.agg(spark_count(lit(1)).alias('c'))
.orderBy(desc('c')).limit(1).collect()
)
pm = top_method[0]['purchase_method'] if top_method else '未说明'
info = label_map[cid]
summary_rows.append({
'cluster_id': int(cid),
'cluster_label': info['cluster_label'],
'cluster_feature_desc': info['cluster_feature_desc'],
'purchase_method': pm,
'announce_count': int(cnt),
'avg_budget': round(avg_budget, 2),
'avg_doc_window_days': round(avg_win, 2),
'silhouette_best_k': float(round(best_score, 2)),
})
out_pdf = pd.DataFrame(summary_rows)
out_pdf.to_csv(str(OUT_DIR / 'project_cluster_analysis.csv'), index=False, encoding='utf-8')
return out_pdf
六、项目文档展示

七、总结
本课题围绕北京市财政招标公告开放数据,完成了「基于大数据的北京市招标公告数据分析与可视化」系统。原始数据约十万行、空壳比例高,经 Python 清洗后保留有效业务样本,再以 Hadoop 落地、Spark 开展采购方式、预算规模、品目分布、开标区位与发布趋势等维度统计;采购画像维接入 K-Means 项目分群、Isolation Forest 预算异常、FP-Growth 品目关联与 TF-IDF 主题词权。后端 Django 提供分析接口,前端 Vue 与 ECharts 实现分维分析页与可视化大屏。系统把招标公告从零散表格转为可查看的结构、趋势与异常结果,便于毕设演示与同类城市招标数据分析参考,也验证了大数据处理与前后端一体化在政府采购数据场景中的可行性。
大家可以帮忙点赞、收藏、关注、评论啦👇🏻👇🏻👇🏻
💖🔥作者主页:计算机毕设木哥🔥 💖
更多推荐

所有评论(0)