✨作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
本系统《基于大数据的巧克力销售数据分析与可视化》主要围绕巧克力销售数据展开,用Hadoop和Spark搭建大数据处理链路,把销售明细、国家市场、产品结构、销售人员、时间趋势、消费模式等数据从HDFS读取后,借助Spark SQL、Pandas和NumPy做清洗、聚合、统计和分析,再把结果存入MySQL,由后端接口输出给前端。后端提供Python+Django和Java+Spring Boot两个版本,前端使用Vue、ElementUI、Echarts、HTML、CSS、JavaScript和jQuery完成页面展示。系统功能包括系统首页、数据中心、用户、销售明细、国家市场、产品结构、销售人员、时间趋势、消费模式、个人信息和修改密码。数据中心展示订单量、销售额、国家数、产品数等总览;国家市场按国家对比销售表现;产品结构看不同巧克力产品的销售占比;销售人员查看业绩分布;时间趋势观察月度或年度变化;消费模式分析购买数量、客单价和消费区间;销售明细支持查询和筛选。整个系统重点是用大数据思路完成数据分析与可视化,让销售情况更直观。
二、开发环境
大数据框架: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
三、系统界面展示
- 基于大数据的巧克力销售数据分析与可视化系统界面展示:








四、部分代码设计
- 项目实战-代码参考:
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.appName("ChocolateSalesAnalysis").master("local[*]").getOrCreate()
def data_center(request):
if request.method != "GET":
return {"code": 405, "msg": "请求方式不支持"}
df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs:///chocolate/sales.csv")
df.createOrReplaceTempView("chocolate_sales")
total_row = spark.sql("SELECT COUNT(*) AS order_count, SUM(sales) AS total_sales, COUNT(DISTINCT country) AS country_count, COUNT(DISTINCT product) AS product_count FROM chocolate_sales").collect()[0]
result = {"order_count": total_row["order_count"], "total_sales": float(total_row["total_sales"] or 0), "country_count": total_row["country_count"], "product_count": total_row["product_count"]}
month_df = spark.sql("SELECT date_format(order_date,'yyyy-MM') AS month, SUM(sales) AS month_sales FROM chocolate_sales GROUP BY date_format(order_date,'yyyy-MM') ORDER BY month")
result["month_trend"] = [{"month": row["month"], "sales": float(row["month_sales"] or 0)} for row in month_df.collect()]
country_df = spark.sql("SELECT country, SUM(sales) AS country_sales FROM chocolate_sales GROUP BY country ORDER BY country_sales DESC LIMIT 5")
result["country_top"] = [{"country": row["country"], "sales": float(row["country_sales"] or 0)} for row in country_df.collect()]
product_df = spark.sql("SELECT product, SUM(sales) AS product_sales FROM chocolate_sales GROUP BY product ORDER BY product_sales DESC LIMIT 5")
result["product_top"] = [{"product": row["product"], "sales": float(row["product_sales"] or 0)} for row in product_df.collect()]
result["update_time"] = spark.sql("SELECT current_timestamp() AS now").collect()[0]["now"]
return {"code": 200, "data": result}
def country_market(request):
if request.method != "GET":
return {"code": 405, "msg": "请求方式不支持"}
df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs:///chocolate/sales.csv")
df.createOrReplaceTempView("chocolate_sales")
country_df = spark.sql("SELECT country, COUNT(*) AS order_count, SUM(sales) AS total_sales, AVG(sales) AS avg_sales, SUM(quantity) AS total_quantity FROM chocolate_sales GROUP BY country")
total_sales = country_df.agg(F.sum("total_sales")).collect()[0][0] or 0
country_df = country_df.withColumn("sale_ratio", F.round(F.col("total_sales") / F.lit(total_sales), 4))
country_df = country_df.orderBy(F.col("total_sales").desc())
rows = country_df.collect()
result = [{"country": row["country"], "order_count": row["order_count"], "total_sales": float(row["total_sales"] or 0), "avg_sales": float(row["avg_sales"] or 0), "total_quantity": row["total_quantity"], "sale_ratio": float(row["sale_ratio"] or 0)} for row in rows]
top_country = result[0] if result else {}
low_country = result[-1] if result else {}
chart = {"xAxis": [item["country"] for item in result], "series": [item["total_sales"] for item in result]}
return {"code": 200, "data": result, "top": top_country, "low": low_country, "chart": chart}
def time_trend(request):
df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs:///chocolate/sales.csv")
df.createOrReplaceTempView("chocolate_sales")
month_df = spark.sql("SELECT date_format(order_date,'yyyy-MM') AS month, SUM(sales) AS sales, COUNT(*) AS order_count, SUM(quantity) AS quantity FROM chocolate_sales GROUP BY date_format(order_date,'yyyy-MM') ORDER BY month")
month_rows = month_df.collect()
trend_data = []
last_sales = None
for row in month_rows:
current_sales = float(row["sales"] or 0)
growth = 0.0
if last_sales and last_sales != 0:
growth = round((current_sales - last_sales) / last_sales * 100, 2)
trend_data.append({"month": row["month"], "sales": current_sales, "order_count": row["order_count"], "quantity": row["quantity"], "growth": growth})
last_sales = current_sales
max_month = max(trend_data, key=lambda item: item["sales"]) if trend_data else {}
min_month = min(trend_data, key=lambda item: item["sales"]) if trend_data else {}
avg_sales = sum(item["sales"] for item in trend_data) / len(trend_data) if trend_data else 0
chart = {"xAxis": [item["month"] for item in trend_data], "sales": [item["sales"] for item in trend_data], "growth": [item["growth"] for item in trend_data]}
return {"code": 200, "data": trend_data, "max": max_month, "min": min_month, "avg": avg_sales, "chart": chart}
五、论文参考
- 计算机毕业设计选题推荐-基于大数据的巧克力销售数据分析与可视化系统-论文参考:

六、系统视频
- 基于大数据的巧克力销售数据分析与可视化系统-项目视频:
项目演示视频
结语
计算机毕业设计选题推荐:基于大数据的巧克力销售数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2301_79526727/article/details/167038482




