从0到跑通:大四生用《基于大数据的超市销售数据统计分析系统》3周搞定毕设!

49 阅读4分钟

💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

基于大数据的超市销售数据统计分析系统介绍

《基于大数据的超市销售数据统计分析系统》面向大四计算机专业学生,以Hadoop、HDFS、Spark为核心,通过Spark SQL高速计算与Pandas、NumPy本地分析双引擎并行,对超市全量销售数据进行分布式存储与批处理;Django或Spring Boot后端提供商品销售、顾客消费行为、商品关联、促销效果及多时间维度五个分析模块的REST接口,MySQL持久化原始与结果数据;Vue+ElementUI前端调用Echarts实时渲染动态数据大屏,支持按日、周、月钻取展示销售额、销量、客单价、关联规则及促销ROI,并辅以系统公告、轮播图、用户信息、密码修改等管理功能,实现从数据上传、清洗、建模、可视化到权限控制的完整毕设级闭环,帮助学生深入掌握大数据采集、处理、分析与可视化全流程。

基于大数据的超市销售数据统计分析系统演示视频

演示视频

基于大数据的超市销售数据统计分析系统演示图片

登录注册界面.png

系统首页.png

顾客消费行为分析上.png

顾客消费行为分析下.png

促销效果分析上.png

促销效果分析下.png

商品销售分析上.png

商品销售分析下.png

超市销售数据.png

数据大屏.png

基于大数据的超市销售数据统计分析系统代码展示

# 顾客消费行为分析:RFM模型批处理
def rfm_analysis(spark, orders_df):
    rfm = orders_df.groupBy("customer_id").agg(
        datediff(current_date(), max("order_date")).alias("recency"),
        count("*").alias("frequency"),
        sum("amount").alias("monetary")
    )
    quantiles = rfm.approxQuantile(["recency","frequency","monetary"],[0.33,0.66],0.01)
    rfm = rfm.withColumn("R", when(col("recency")<=quantiles[0][0],3).when(col("recency")<=quantiles[0][1],2).otherwise(1)) \
             .withColumn("F", when(col("frequency")>=quantiles[1][1],3).when(col("frequency")>=quantiles[1][0],2).otherwise(1)) \
             .withColumn("M", when(col("monetary")>=quantiles[2][1],3).when(col("monetary")>=quantiles[2][0],2).otherwise(1))
    rfm = rfm.withColumn("rfm_score", concat(col("R"),col("F"),col("M")))
    segment_map = {"333":"重要价值","331":"重要发展","313":"重要保持","311":"重要挽留",
                   "133":"一般价值","131":"一般发展","113":"一般保持","111":"流失风险"}
    mapping_expr = create_map([lit(x) for x in chain(*segment_map.items())])
    rfm = rfm.withColumn("segment", mapping_expr[col("rfm_score")])
    rfm.write.mode("overwrite").jdbc(url, "customer_rfm", properties)
    return rfm

# 商品关联分析:Apriori频繁项集
def apriori(spark, basket_df, min_support=0.01):
    basket_rdd = basket_df.rdd.map(lambda row: row.items)
    model = FPGrowth.train(basket_rdd, minSupport=min_support, numPartitions=4)
    freq_items = model.freqItemsets().collect()
    rules = []
    for itemset in freq_items:
        if len(itemset.items) > 1:
            for i in range(1, len(itemset.items)):
                for ant in combinations(itemset.items, i):
                    ant = frozenset(ant)
                    con = frozenset(itemset.items) - ant
                    support = itemset.freq / basket_rdd.count()
                    ant_support = next(x.freq for x in model.freqItemsets().collect() if frozenset(x.items)==ant)
                    confidence = support / (ant_support / basket_rdd.count())
                    if confidence > 0.3:
                        rules.append((",".join(ant), ",".join(con), round(confidence,2)))
    rules_df = spark.createDataFrame(rules, ["antecedent","consequent","confidence"])
    rules_df.write.mode("overwrite").jdbc(url, "association_rules", properties)

# 促销效果分析:增量销售归因
def promotion_effect(spark, sales_df, promo_df):
    joined = sales_df.join(promo_df, ["product_id","date"], "left")
    joined = joined.withColumn("is_promo_day", when(col("promo_id").isNotNull(),1).otherwise(0))
    window = Window.partitionBy("product_id").orderBy("date").rowsBetween(-7,7)
    joined = joined.withColumn("baseline", avg(when(col("is_promo_day")==0, col("qty"))).over(window))
    joined = joined.withColumn("incremental", col("qty") - col("baseline"))
    promo_summary = joined.filter(col("is_promo_day")==1) \
                          .groupBy("promo_id") \
                          .agg(sum("incremental").alias("lift_qty"),
                               sum("qty").alias("total_qty"),
                               avg("baseline").alias("avg_base"),
                               (sum("incremental")/sum("baseline")).alias("lift_ratio"))
    promo_summary.write.mode("overwrite").jdbc(url, "promotion_effect", properties)

基于大数据的超市销售数据统计分析系统文档展示

文档.png

💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目