【数据分析】基于大数据的新疆特产销售数据可视化分析系统 | 大数据选题推荐 大数据实战项目 可视化大屏 Hadoop SPark java Python

45 阅读6分钟

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

基于大数据的新疆特产销售数据可视化分析系统介绍

本系统是一个基于大数据技术栈构建的新疆特产销售数据可视化分析平台,采用Hadoop分布式存储架构结合Spark计算引擎来处理海量销售数据。系统通过HDFS实现数据的分布式存储管理,利用Spark SQL进行高效的数据查询与统计分析,同时集成Pandas和NumPy库完成数据清洗与预处理工作。前端采用Vue框架搭配ElementUI组件库构建交互界面,通过Echarts图表库将分析结果以直观的可视化形式呈现,包括销售趋势图、地区分布图、品类占比饼图等多维度图表。后端提供Django和Spring Boot两种技术方案,Django版本利用Python生态优势简化大数据处理流程,Spring Boot版本则通过Spring+SpringMVC+Mybatis架构保证系统的稳定性与扩展性。系统核心功能涵盖系统首页的数据总览、我的信息模块的用户管理、系统管理模块的基础配置以及数据分析模块的深度挖掘,整体架构充分发挥Hadoop和Spark在处理TB级数据时的性能优势,为新疆特产销售业务提供全方位的数据支撑和决策依据。

基于大数据的新疆特产销售数据可视化分析系统演示视频

演示视频

基于大数据的新疆特产销售数据可视化分析系统演示图片

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

基于大数据的新疆特产销售数据可视化分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, avg, date_format, year, month, when
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, DoubleType, TimestampType
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
import json

spark = SparkSession.builder.appName("XinjiangSpecialtyAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "2g").config("spark.driver.memory", "1g").enableHiveSupport().getOrCreate()

@require_http_methods(["POST"])
def analyze_sales_trend(request):
    try:
        params = json.loads(request.body)
        start_date = params.get('start_date')
        end_date = params.get('end_date')
        product_category = params.get('category', 'all')
        sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/specialty_sales").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "sales_records").option("user", "root").option("password", "123456").load()
        sales_df = sales_df.filter((col("order_date") >= start_date) & (col("order_date") <= end_date))
        if product_category != 'all':
            sales_df = sales_df.filter(col("product_category") == product_category)
        sales_df = sales_df.withColumn("order_month", date_format(col("order_date"), "yyyy-MM"))
        monthly_stats = sales_df.groupBy("order_month").agg(sum("order_amount").alias("total_amount"),count("order_id").alias("order_count"),avg("order_amount").alias("avg_amount"))
        monthly_stats = monthly_stats.orderBy("order_month")
        result_pd = monthly_stats.toPandas()
        result_pd['total_amount'] = result_pd['total_amount'].round(2)
        result_pd['avg_amount'] = result_pd['avg_amount'].round(2)
        growth_rates = []
        for i in range(len(result_pd)):
            if i == 0:
                growth_rates.append(0)
            else:
                prev_amount = result_pd.iloc[i-1]['total_amount']
                curr_amount = result_pd.iloc[i]['total_amount']
                if prev_amount > 0:
                    growth_rate = ((curr_amount - prev_amount) / prev_amount) * 100
                    growth_rates.append(round(growth_rate, 2))
                else:
                    growth_rates.append(0)
        result_pd['growth_rate'] = growth_rates
        peak_month = result_pd.loc[result_pd['total_amount'].idxmax(), 'order_month']
        peak_amount = result_pd['total_amount'].max()
        total_revenue = result_pd['total_amount'].sum()
        avg_monthly_revenue = result_pd['total_amount'].mean()
        response_data = {'trend_data': result_pd.to_dict(orient='records'),'peak_month': peak_month,'peak_amount': float(peak_amount),'total_revenue': float(total_revenue),'avg_monthly_revenue': float(avg_monthly_revenue),'status': 'success'}
        return JsonResponse(response_data)
    except Exception as e:
        return JsonResponse({'status': 'error', 'message': str(e)})

@require_http_methods(["POST"])
def analyze_regional_distribution(request):
    try:
        params = json.loads(request.body)
        analysis_date = params.get('analysis_date', datetime.now().strftime('%Y-%m-%d'))
        top_n = params.get('top_n', 10)
        sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/specialty_sales").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "sales_records").option("user", "root").option("password", "123456").load()
        sales_df = sales_df.filter(col("order_date") <= analysis_date)
        regional_stats = sales_df.groupBy("province", "city").agg(sum("order_amount").alias("region_amount"),count("order_id").alias("region_orders"),avg("order_amount").alias("region_avg_amount"))
        regional_stats = regional_stats.orderBy(col("region_amount").desc())
        top_regions = regional_stats.limit(top_n)
        result_pd = top_regions.toPandas()
        result_pd['region_amount'] = result_pd['region_amount'].round(2)
        result_pd['region_avg_amount'] = result_pd['region_avg_amount'].round(2)
        total_amount_all = sales_df.agg(sum("order_amount").alias("total")).collect()[0]['total']
        result_pd['percentage'] = (result_pd['region_amount'] / total_amount_all * 100).round(2)
        province_summary = result_pd.groupby('province').agg({'region_amount': 'sum','region_orders': 'sum'}).reset_index()
        province_summary.columns = ['province', 'province_amount', 'province_orders']
        province_summary = province_summary.sort_values('province_amount', ascending=False)
        high_value_regions = result_pd[result_pd['region_avg_amount'] > result_pd['region_avg_amount'].median()]
        low_value_regions = result_pd[result_pd['region_avg_amount'] <= result_pd['region_avg_amount'].median()]
        response_data = {'regional_detail': result_pd.to_dict(orient='records'),'province_summary': province_summary.to_dict(orient='records'),'high_value_regions': high_value_regions[['province', 'city', 'region_avg_amount']].to_dict(orient='records'),'low_value_regions': low_value_regions[['province', 'city', 'region_avg_amount']].to_dict(orient='records'),'total_analyzed_amount': float(total_amount_all),'status': 'success'}
        return JsonResponse(response_data)
    except Exception as e:
        return JsonResponse({'status': 'error', 'message': str(e)})

@require_http_methods(["POST"])
def analyze_product_category(request):
    try:
        params = json.loads(request.body)
        start_date = params.get('start_date')
        end_date = params.get('end_date')
        min_sales = params.get('min_sales', 0)
        sales_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/specialty_sales").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "sales_records").option("user", "root").option("password", "123456").load()
        sales_df = sales_df.filter((col("order_date") >= start_date) & (col("order_date") <= end_date))
        category_stats = sales_df.groupBy("product_category", "product_name").agg(sum("order_amount").alias("product_amount"),sum("product_quantity").alias("product_quantity"),count("order_id").alias("product_orders"))
        category_stats = category_stats.filter(col("product_amount") >= min_sales)
        result_pd = category_stats.toPandas()
        result_pd['product_amount'] = result_pd['product_amount'].round(2)
        result_pd['avg_price'] = (result_pd['product_amount'] / result_pd['product_quantity']).round(2)
        total_amount_period = result_pd['product_amount'].sum()
        result_pd['category_percentage'] = (result_pd['product_amount'] / total_amount_period * 100).round(2)
        result_pd = result_pd.sort_values('product_amount', ascending=False)
        category_summary = result_pd.groupby('product_category').agg({'product_amount': 'sum','product_quantity': 'sum','product_orders': 'sum'}).reset_index()
        category_summary.columns = ['category_name', 'category_amount', 'category_quantity', 'category_orders']
        category_summary['category_percentage'] = (category_summary['category_amount'] / total_amount_period * 100).round(2)
        category_summary = category_summary.sort_values('category_amount', ascending=False)
        top5_products = result_pd.head(5)[['product_name', 'product_amount', 'product_quantity']].to_dict(orient='records')
        hot_categories = category_summary[category_summary['category_percentage'] >= 10]
        cold_categories = category_summary[category_summary['category_percentage'] < 5]
        response_data = {'product_detail': result_pd.to_dict(orient='records'),'category_summary': category_summary.to_dict(orient='records'),'top5_products': top5_products,'hot_categories': hot_categories.to_dict(orient='records'),'cold_categories': cold_categories.to_dict(orient='records'),'total_period_amount': float(total_amount_period),'status': 'success'}
        return JsonResponse(response_data)
    except Exception as e:
        return JsonResponse({'status': 'error', 'message': str(e)})

基于大数据的新疆特产销售数据可视化分析系统文档展示

在这里插入图片描述

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