基于大数据的商店购物趋势分析系统 | 独家首发商店购物趋势分析系统:Django+Vue+大数据可视化完整实现

43 阅读7分钟

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

基于大数据的商店购物趋势分析系统介绍

商店购物趋势分析系统是一个基于大数据技术的综合性数据分析平台,采用Hadoop分布式存储架构和Spark大数据处理引擎作为核心技术支撑。系统通过Django后端框架构建稳定的服务层,结合Vue前端框架和ElementUI组件库打造直观的用户交互界面,运用Echarts图表库实现数据的多维度可视化展示。系统核心功能涵盖商店购物趋势数据管理、消费行为深度分析、客户画像精准构建、客户价值评估体系、销售业绩统计分析以及综合性可视化大屏展示。通过集成Spark SQL进行大规模数据查询处理,运用Pandas和NumPy进行数据科学计算,系统能够高效处理海量商业数据并提取有价值的商业洞察。整个系统采用MySQL数据库存储结构化数据,通过HDFS分布式文件系统管理大数据文件,为商店经营决策提供科学的数据支持和趋势预测分析。

基于大数据的商店购物趋势分析系统演示视频

演示视频

基于大数据的商店购物趋势分析系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于大数据的商店购物趋势分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, avg, max, min, when, desc, asc
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import pandas as pd
import numpy as np
import json
from datetime import datetime, timedelta

spark = SparkSession.builder.appName("商店购物趋势分析系统").config("spark.some.config.option", "some-value").getOrCreate()

def analyze_customer_behavior(request):
    sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "sales_data").option("user", "root").option("password", "password").load()
    customer_behavior = sales_df.groupBy("customer_id").agg(count("order_id").alias("purchase_frequency"), sum("amount").alias("total_amount"), avg("amount").alias("avg_amount"), max("purchase_date").alias("last_purchase"), min("purchase_date").alias("first_purchase"))
    behavior_with_recency = customer_behavior.withColumn("days_since_last_purchase", (datetime.now().date() - col("last_purchase")).cast("int"))
    behavior_categories = behavior_with_recency.withColumn("behavior_type", when(col("purchase_frequency") >= 10, "高频客户").when(col("purchase_frequency") >= 5, "中频客户").otherwise("低频客户"))
    behavior_stats = behavior_categories.withColumn("value_segment", when(col("total_amount") >= 5000, "高价值").when(col("total_amount") >= 2000, "中价值").otherwise("低价值"))
    monthly_behavior = sales_df.withColumn("purchase_month", col("purchase_date").substr(1, 7)).groupBy("purchase_month", "customer_id").agg(count("order_id").alias("monthly_orders"), sum("amount").alias("monthly_spending"))
    behavior_trends = monthly_behavior.groupBy("purchase_month").agg(avg("monthly_orders").alias("avg_monthly_orders"), avg("monthly_spending").alias("avg_monthly_spending"), count("customer_id").alias("active_customers"))
    repeat_customers = sales_df.groupBy("customer_id").agg(count("order_id").alias("order_count")).filter(col("order_count") > 1)
    repeat_rate = repeat_customers.count() / customer_behavior.count() * 100
    seasonal_analysis = sales_df.withColumn("season", when(col("purchase_date").substr(6, 2).isin("12", "01", "02"), "冬季").when(col("purchase_date").substr(6, 2).isin("03", "04", "05"), "春季").when(col("purchase_date").substr(6, 2).isin("06", "07", "08"), "夏季").otherwise("秋季"))
    seasonal_behavior = seasonal_analysis.groupBy("season", "customer_id").agg(count("order_id").alias("seasonal_orders"), sum("amount").alias("seasonal_spending"))
    peak_hours = sales_df.withColumn("purchase_hour", col("purchase_time").substr(12, 2)).groupBy("purchase_hour").agg(count("order_id").alias("hourly_orders")).orderBy(desc("hourly_orders"))
    behavior_result = behavior_stats.collect()
    trend_result = behavior_trends.orderBy("purchase_month").collect()
    seasonal_result = seasonal_behavior.groupBy("season").agg(avg("seasonal_orders").alias("avg_orders"), avg("seasonal_spending").alias("avg_spending")).collect()
    result_data = {"behavior_analysis": [row.asDict() for row in behavior_result], "monthly_trends": [row.asDict() for row in trend_result], "seasonal_patterns": [row.asDict() for row in seasonal_result], "repeat_customer_rate": repeat_rate}
    return JsonResponse(result_data)

def generate_customer_profile(request):
    customer_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "customers").option("user", "root").option("password", "password").load()
    sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "sales_data").option("user", "root").option("password", "password").load()
    product_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "products").option("user", "root").option("password", "password").load()
    customer_sales = customer_df.join(sales_df, "customer_id", "left")
    customer_products = customer_sales.join(product_df, "product_id", "left")
    demographic_analysis = customer_products.groupBy("age_group", "gender").agg(count("customer_id").alias("customer_count"), avg("amount").alias("avg_spending"), sum("amount").alias("total_revenue"))
    geographic_analysis = customer_products.groupBy("city", "province").agg(count("customer_id").alias("customer_count"), avg("amount").alias("avg_spending"), sum("amount").alias("regional_revenue"))
    preference_analysis = customer_products.groupBy("customer_id", "category").agg(count("product_id").alias("category_purchases"), sum("amount").alias("category_spending"))
    top_preferences = preference_analysis.groupBy("customer_id").agg(max("category_purchases").alias("max_purchases"))
    customer_top_category = preference_analysis.join(top_preferences, (preference_analysis.customer_id == top_preferences.customer_id) & (preference_analysis.category_purchases == top_preferences.max_purchases)).select(preference_analysis.customer_id, preference_analysis.category.alias("preferred_category"))
    lifestyle_segments = customer_products.withColumn("shopping_frequency", when(col("purchase_frequency") >= 15, "购物狂").when(col("purchase_frequency") >= 8, "常规购物者").otherwise("偶尔购物者"))
    price_sensitivity = customer_products.withColumn("price_segment", when(col("amount") >= 500, "价格不敏感").when(col("amount") >= 200, "中等价格敏感").otherwise("价格敏感"))
    loyalty_analysis = customer_products.withColumn("customer_tenure", (datetime.now().date() - col("registration_date")).cast("int")).withColumn("loyalty_level", when(col("customer_tenure") >= 365, "忠诚客户").when(col("customer_tenure") >= 180, "稳定客户").otherwise("新客户"))
    comprehensive_profile = customer_df.join(customer_top_category, "customer_id", "left").join(lifestyle_segments.select("customer_id", "shopping_frequency"), "customer_id", "left").join(price_sensitivity.select("customer_id", "price_segment"), "customer_id", "left").join(loyalty_analysis.select("customer_id", "loyalty_level"), "customer_id", "left")
    age_spending_correlation = customer_products.groupBy("age_group").agg(avg("amount").alias("avg_age_spending"), count("customer_id").alias("age_group_size"))
    gender_preference = customer_products.groupBy("gender", "category").agg(count("product_id").alias("gender_category_count"))
    profile_segments = comprehensive_profile.groupBy("age_group", "gender", "preferred_category", "loyalty_level").agg(count("customer_id").alias("segment_size"), avg("total_spending").alias("segment_avg_spending"))
    demographic_result = demographic_analysis.collect()
    geographic_result = geographic_analysis.collect()
    profile_result = comprehensive_profile.collect()
    correlation_result = age_spending_correlation.collect()
    profile_data = {"demographic_profiles": [row.asDict() for row in demographic_result], "geographic_distribution": [row.asDict() for row in geographic_result], "customer_segments": [row.asDict() for row in profile_result[:100]], "age_spending_insights": [row.asDict() for row in correlation_result]}
    return JsonResponse(profile_data)

def analyze_sales_performance(request):
    sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "sales_data").option("user", "root").option("password", "password").load()
    product_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "products").option("user", "root").option("password", "password").load()
    employee_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/shop_db").option("dbtable", "employees").option("user", "root").option("password", "password").load()
    sales_products = sales_df.join(product_df, "product_id", "inner")
    sales_employees = sales_products.join(employee_df, "employee_id", "left")
    daily_performance = sales_employees.groupBy("sale_date").agg(sum("amount").alias("daily_revenue"), count("order_id").alias("daily_orders"), avg("amount").alias("avg_order_value"))
    monthly_performance = sales_employees.withColumn("sale_month", col("sale_date").substr(1, 7)).groupBy("sale_month").agg(sum("amount").alias("monthly_revenue"), count("order_id").alias("monthly_orders"), count("customer_id").alias("unique_customers"))
    product_performance = sales_employees.groupBy("product_id", "product_name", "category").agg(sum("quantity").alias("total_quantity"), sum("amount").alias("product_revenue"), count("order_id").alias("order_frequency"))
    top_products = product_performance.orderBy(desc("product_revenue")).limit(20)
    category_performance = sales_employees.groupBy("category").agg(sum("amount").alias("category_revenue"), sum("quantity").alias("category_quantity"), count("order_id").alias("category_orders"))
    employee_performance = sales_employees.groupBy("employee_id", "employee_name").agg(sum("amount").alias("employee_revenue"), count("order_id").alias("employee_orders"), avg("amount").alias("avg_sale_amount"))
    growth_analysis = monthly_performance.withColumn("prev_month_revenue", col("monthly_revenue").lag(1).over(window.orderBy("sale_month"))).withColumn("growth_rate", ((col("monthly_revenue") - col("prev_month_revenue")) / col("prev_month_revenue") * 100))
    seasonal_performance = sales_employees.withColumn("quarter", when(col("sale_date").substr(6, 2).isin("01", "02", "03"), "Q1").when(col("sale_date").substr(6, 2).isin("04", "05", "06"), "Q2").when(col("sale_date").substr(6, 2).isin("07", "08", "09"), "Q3").otherwise("Q4"))
    quarterly_analysis = seasonal_performance.groupBy("quarter").agg(sum("amount").alias("quarterly_revenue"), avg("amount").alias("avg_quarterly_order"))
    profit_analysis = sales_employees.withColumn("profit", col("amount") - col("cost")).groupBy("product_id", "product_name").agg(sum("profit").alias("total_profit"), avg("profit").alias("avg_profit_margin"))
    peak_performance_days = daily_performance.orderBy(desc("daily_revenue")).limit(10)
    conversion_analysis = sales_employees.groupBy("sale_date").agg(count("customer_id").alias("visitors"), count("order_id").alias("purchases")).withColumn("conversion_rate", col("purchases") / col("visitors") * 100)
    performance_metrics = {"total_revenue": sales_employees.agg(sum("amount")).collect()[0][0], "total_orders": sales_employees.count(), "avg_order_value": sales_employees.agg(avg("amount")).collect()[0][0], "unique_customers": sales_employees.select("customer_id").distinct().count()}
    daily_result = daily_performance.orderBy("sale_date").collect()
    monthly_result = monthly_performance.orderBy("sale_month").collect()
    product_result = top_products.collect()
    category_result = category_performance.orderBy(desc("category_revenue")).collect()
    performance_data = {"daily_performance": [row.asDict() for row in daily_result], "monthly_trends": [row.asDict() for row in monthly_result], "top_products": [row.asDict() for row in product_result], "category_analysis": [row.asDict() for row in category_result], "key_metrics": performance_metrics}
    return JsonResponse(performance_data)

基于大数据的商店购物趋势分析系统文档展示

在这里插入图片描述

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