作者计算机编程小央姐个人简介曾长期从事计算机专业培训教学本人也热爱上课教学语言擅长Java、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法也喜欢交流技术大家有技术代码这一块的问题可以问我想说的话感谢大家的关注与支持 文末获取源码目录Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统功能介绍Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统技术介绍Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统背景意义Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统演示视频Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统演示图片Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统部分代码Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-结语Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统功能介绍本系统是基于 Python、Hadoop 与 Spark 大数据框架开发的北京市招标公告数据分析、算法挖掘与可视化系统依托北京市财政局开放的招标公告 CSV 数据集开展开发工作系统会先把原始数据集上传至 HDFS 完成存储再通过 Spark 完成数据加载与预处理工作对原始数据里的时间、预算金额、开标地点、采购品目等字段做清洗转换过滤脏数据和无效空壳行提取行政区、开标形式、文件获取窗口时长、公告到开标间隔等派生字段最终筛选出有效业务数据开展多维度分析。系统一共设置采购方式、预算规模、品目分布、开标区位、发布趋势、采购画像六大分析维度支持统计各类采购公告的数量、预算分布、时间变化趋势和区域分布特征同时引入 K-Means 聚类、孤立森林、FP-Growth 频繁项挖掘、TF-IDF 文本关键词提取算法实现采购画像挖掘后端采用 Django 承接数据分析结果结合 Vue、ECharts 前端组件将统计图表、词云、区域分布视图进行展示支持前端联动筛选不同维度的数据实现对北京财政招标公告数据的批量大数据处理、挖掘和可视化展示。Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统技术介绍大数据框架HadoopSpark本次没用Hive支持定制开发语言PythonJava两个版本都支持后端框架DjangoSpring Boot(SpringSpringMVCMybatis)两个版本都支持前端VueElementUIEchartsHTMLCSSJavaScriptjQuery详细技术点Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy数据库MySQLPython 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统背景意义政府采购招标公告会持续产生大量文本与数值类信息这些公告里面藏着采购品类、资金预算、开标时间和地点等很多有价值的信息原始公告大多以独立文件或者零散网页的形式对外公开普通使用者想要从中梳理出采购规律会比较费劲人工整理统计不仅耗时间还很难发现数据背后隐藏的关联模式。北京财政局对外开放了招标公告数据集里面包含大量招标相关记录但是数据集本身存在大量空值、格式混乱、文本不规范这类问题直接查看原始文件很难快速感知采购业务的整体情况。在这样的情况下借助大数据技术对招标公告数据做统一处理和挖掘就有了落地的基础本课题就以此套公开招标数据集作为数据源尝试用 Spark 大数据工具完成数据清洗、多维度统计和数据挖掘搭建一套可以直观查看分析结果的可视化系统。做这个毕业设计主要是想用 Hadoop 和 Spark 这类大数据工具去处理政府采购类的公开数据自己实操一遍大数据数据预处理、统计分析和挖掘算法的整套流程。项目产出的分析视图能够把零散的招标公告信息整合起来能简单看出北京地区不同采购方式、不同采购品类的预算分布和时间变化情况也能通过聚类、关联规则算法找到项目分组特征和品目搭配的潜在规律给想要快速了解这批招标数据特点的使用者提供一点参考。这套项目也适合用来学习 Spark SQL 和 PySpark 挖掘算法的落地方式整个项目的开发过程能把 Python 大数据开发、Django 后端和 ECharts 可视化的知识结合起来练习只是作为本科毕设项目系统的分析深度还有不少局限只适合对这份公开招标数据集做基础层面的数据分析与展示。Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统演示视频演示视频Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统演示图片Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-系统部分代码frompyspark.sqlimportSparkSessionfrompyspark.ml.clusteringimportKMeansfrompyspark.ml.featureimportVectorAssembler,StandardScalerfrompyspark.ml.functionsimportvector_to_arrayfrompyspark.ml.outlierimportIsolationForestfrompyspark.ml.fpmimportFPGrowthimportpandasaspdfromdjango.httpimportJsonResponse sparkSparkSession.builder.appName(BeijingTenderAnalysis).getOrCreate()defpreprocess_tender_data(hdfs_path):raw_dfspark.read.option(header,true).option(inferSchema,false).csv(hdfs_path)filter_dfraw_df.filter((公告名称 is not null or 项目名称 is not null) and 采购方式 in (公开招标,竞争性磋商,竞争性谈判,询价))filter_dffilter_df.withColumn(budget_amount,raw_df[预算金额].cast(double))filter_dffilter_df.withColumn(doc_price,raw_df[招标文件售价].cast(double))filter_dffilter_df.filter(budget_amount is not null and budget_amount 0)filter_dffilter_df.filter(doc_price is null or doc_price 0)filter_dffilter_df.withColumn(year_month,raw_df[开标时间].substr(1,7))filter_dffilter_df.withColumn(district,spark.sql.functions.regexp_extract(开标地点,(东城|西城|朝阳|海淀|丰台),1))filter_dffilter_df.withColumn(open_mode,spark.sql.functions.when(raw_df[开标地点].contains(电子交易平台),电子开标).otherwise(现场开标))filter_dffilter_df.withColumn(doc_start_time,spark.sql.functions.to_timestamp(获取招标文件开始时间,d/M/y H:m:s))filter_dffilter_df.withColumn(doc_end_time,spark.sql.functions.to_timestamp(获取招标文件结束时间,d/M/y H:m:s))filter_dffilter_df.withColumn(doc_window_days,spark.sql.functions.datediff(doc_end_time,doc_start_time))filter_dffilter_df.withColumn(announce_time,spark.sql.functions.to_timestamp(时间戳,d/M/y H:m:s))filter_dffilter_df.withColumn(open_time,spark.sql.functions.to_timestamp(开标时间,d/M/y H:m:s))filter_dffilter_df.withColumn(announce_to_open_days,spark.sql.functions.datediff(open_time,announce_time))filter_dffilter_df.fillna({district:未明确区划})preprocessed_dffilter_df.dropDuplicates([唯一标识])preprocessed_df.write.mode(overwrite).option(header,true).csv(/user/tender/preprocessed_data)returnpreprocessed_dfdeftender_kmeans_cluster_analysis(preprocessed_df):feature_cols[budget_amount,doc_price,doc_window_days,announce_to_open_days]assemblerVectorAssembler(inputColsfeature_cols,outputColfeatures)feature_dfassembler.transform(preprocessed_df.na.drop(subsetfeature_cols))scalerStandardScaler(inputColfeatures,outputColscaled_features,withStdTrue,withMeanTrue)scale_modelscaler.fit(feature_df)scaled_dfscale_model.transform(feature_df)kmeansKMeans(featuresColscaled_features,predictionColcluster_label,k4,seed24)kmeans_modelkmeans.fit(scaled_df)cluster_dfkmeans_model.transform(scaled_df)cluster_result_dfcluster_df.withColumn(feature_array,vector_to_array(features))cluster_pandascluster_result_df.select(budget_amount,doc_price,doc_window_days,announce_to_open_days,cluster_label,district,采购方式).toPandas()cluster_pandas[cluster_name]cluster_pandas[cluster_label].map({0:低额短期磋商项目,1:高额公开招标项目,2:中等预算常规项目,3:短窗口小额询价项目})cluster_groupcluster_pandas.groupby([cluster_label,cluster_name]).agg(avg_budget(budget_amount,mean),count_tender(budget_amount,count)).reset_index()cluster_jsoncluster_group.to_dict(orientrecords)returnJsonResponse({code:200,data:cluster_json})deftender_fp_growth_item_analysis(preprocessed_df):split_dfpreprocessed_df.filter(采购品目 is not null).withColumn(item_list,spark.sql.functions.split(采购品目,,))fp_growthFPGrowth(itemsColitem_list,minSupport0.03,minConfidence0.4)fp_modelfp_growth.fit(split_df)frequent_itemsfp_model.freqItemsets rules_dffp_model.associationRules item_pandasfrequent_items.orderBy(freq,ascendingFalse).limit(30).toPandas()rule_pandasrules_df.orderBy(confidence,ascendingFalse).limit(20).toPandas()item_pandas[items]item_pandas[items].apply(lambdax:,.join(x))rule_pandas[antecedent]rule_pandas[antecedent].apply(lambdax:,.join(x))rule_pandas[consequent]rule_pandas[consequent].apply(lambdax:,.join(x))item_jsonitem_pandas[[items,freq]].to_dict(orientrecords)rule_jsonrule_pandas[[antecedent,consequent,confidence,lift]].to_dict(orientrecords)returnJsonResponse({code:200,item_data:item_json,rule_data:rule_json})Python 大数据毕设项目北京市招标公告数据分析、算法挖掘与可视化系统-结语如果大家有任何疑虑欢迎在下方位置详细交流。