拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于Django的电子产品销售数据分析与可视化系统:技术栈、背景意义与核心代码

基于Django的电子产品销售数据分析与可视化系统:技术栈、背景意义与核心代码 温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义在数字经济时代电子产品销售行业积累了海量的交易数据包括用户行为、产品销量、库存变化、营销活动效果等。然而原始数据本身价值有限只有通过系统性的分析与可视化呈现才能转化为可指导商业决策的洞察力。本项目旨在构建一个基于Django的Web应用实现对电子产品销售数据的自动化分析、多维统计与交互式可视化。其核心意义在于数据驱动决策帮助管理者从宏观趋势如月度销售额、品类占比到微观细节如热销单品、用户画像全面掌握业务状况优化采购、定价与营销策略。效率提升替代传统手工报表实现数据处理的自动化与可视化报告的实时生成大幅节省人力与时间成本。技术实践价值作为一个全栈项目它完整涵盖了现代Web开发的核心流程包括后端业务逻辑、数据库设计、RESTful API构建以及前端数据可视化是学习与实践Python、Django、数据分析及前端技术的优秀案例。2. 技术栈详解本系统采用经典且高效的“Django后端 现代前端库”技术架构确保系统的健壮性、可扩展性与良好的用户体验。2.1 后端技术栈 (Backend)Django (4.x)作为核心Web框架提供强大的ORM、Admin后台、路由、模板引擎及安全机制快速构建稳健的后端服务。Django REST Framework (DRF)用于构建RESTful API为前端提供结构化的数据接口支持序列化、视图集、权限认证等高级功能。数据库PostgreSQL(生产推荐)关系型数据库用于存储用户、产品、订单等结构化业务数据。SQLite(开发/演示)轻量级数据库便于本地快速启动与测试。Pandas NumPyPython数据分析核心库在Django视图或自定义管理命令中用于数据清洗、聚合、转换与复杂计算。Celery Redis(可选)用于处理异步任务如生成大型报表、发送邮件和缓存提升系统响应速度。2.2 前端技术栈 (Frontend)HTML5 / CSS3 / JavaScript (ES6)前端开发基础。Bootstrap 5响应式CSS框架快速构建美观、一致的UI组件与布局。Chart.js 或 ECharts强大的JavaScript图表库。本项目示例将使用Chart.js因其轻量、易用且与Django模板集成简单。Chart.js适合构建折线图、柱状图、饼图、雷达图等常见图表。ECharts(备选)功能更强大支持更复杂的地理地图、热力图、关系图等。Ajax (Fetch API 或 axios)用于从前端异步调用后端API动态获取JSON数据并更新图表实现无刷新交互。2.3 开发与部署版本控制Git包管理pip requirements.txt部署可部署于Linux服务器使用Nginx Gunicorn 服务Django应用。3. 核心代码实现以下将分模块展示系统的关键代码片段涵盖数据模型、视图逻辑、API接口及前端图表集成。3.1 数据模型 (Models)在models.py中定义核心业务实体。# products/models.py from django.db import models from django.contrib.auth.models import User class Category(models.Model): 产品类别 name models.CharField(max_length100, uniqueTrue) description models.TextField(blankTrue) def __str__(self): return self.name class Product(models.Model): 电子产品 category models.ForeignKey(Category, on_deletemodels.CASCADE, related_nameproducts) name models.CharField(max_length200) brand models.CharField(max_length100) price models.DecimalField(max_digits10, decimal_places2) cost models.DecimalField(max_digits10, decimal_places2) # 成本用于计算利润 stock models.IntegerField(default0) created_at models.DateTimeField(auto_now_addTrue) def __str__(self): return f{self.brand} {self.name} class Order(models.Model): 销售订单 ORDER_STATUS [ (pending, 待处理), (paid, 已支付), (shipped, 已发货), (delivered, 已送达), (cancelled, 已取消), ] order_number models.CharField(max_length50, uniqueTrue) customer_name models.CharField(max_length100) customer_email models.EmailField() total_amount models.DecimalField(max_digits12, decimal_places2) status models.CharField(max_length20, choicesORDER_STATUS, defaultpending) created_at models.DateTimeField(auto_now_addTrue) def __str__(self): return self.order_number class OrderItem(models.Model): 订单明细项 order models.ForeignKey(Order, on_deletemodels.CASCADE, related_nameitems) product models.ForeignKey(Product, on_deletemodels.PROTECT) quantity models.PositiveIntegerField() unit_price models.DecimalField(max_digits10, decimal_places2) # 下单时的单价 property def subtotal(self): return self.quantity * self.unit_price def str(self): return f{self.product.name} x{self.quantity}/code/pre 3.2 数据分析与聚合视图 (Views) 在views.py中编写核心业务逻辑使用Pandas进行数据聚合。 analytics/views.py from django.shortcuts import render from django.db.models import Sum, Count, Avg from django.utils import timezone from datetime import timedelta import pandas as pd from products.models import Order, OrderItem, Product, Category def sales_dashboard(request): 销售数据仪表板视图 1. 基础统计使用Django ORM聚合 total_sales Order.objects.filter(statusdelivered).aggregate(Sum(total_amount))[total_amount__sum] or 0 total_orders Order.objects.filter(statusdelivered).count() avg_order_value total_sales / total_orders if total_orders 0 else 0 2. 近期趋势最近30天 thirty_days_ago timezone.now() - timedelta(days30) recent_orders Order.objects.filter(created_at__gtethirty_days_ago, statusdelivered) 使用Pandas进行更灵活的时间序列分析 orders_df pd.DataFrame(list(recent_orders.values(created_at, total_amount))) if not orders_df.empty: orders_df[created_at] pd.to_datetime(orders_df[created_at]) orders_df.set_index(created_at, inplaceTrue) daily_sales orders_df.resample(D).sum().fillna(0) # 准备给Chart.js的数据 dates daily_sales.index.strftime(%Y-%m-%d).tolist() amounts daily_sales[total_amount].tolist() else: dates, amounts [], [] 3. 品类销售排行 category_sales ( OrderItem.objects .select_related(product__category) .values(product__category__name) .annotate(total_soldSum(quantity), revenueSum(unit_price)) .order_by(-revenue)[:5] ) categories [item[product__category__name] for item in category_sales] revenues [float(item[revenue]) for item in category_sales] context { total_sales: total_sales, total_orders: total_orders, avg_order_value: avg_order_value, dates: dates, amounts: amounts, categories: categories, revenues: revenues, } return render(request, analytics/dashboard.html, context)/code/pre 3.3 RESTful API 接口 (DRF) 使用Django REST Framework为前端提供数据接口。 api/serializers.py from rest_framework import serializers from products.models import Product, Order class ProductSalesSerializer(serializers.ModelSerializer): 产品销售序列化器 total_sold serializers.IntegerField(read_onlyTrue) total_revenue serializers.DecimalField(max_digits12, decimal_places2, read_onlyTrue) class Meta: model Product fields [id, name, brand, price, total_sold, total_revenue] api/views.py from rest_framework.views import APIView from rest_framework.response import Response from django.db.models import Sum, Count from products.models import Product, OrderItem from .serializers import ProductSalesSerializer class TopProductsAPIView(APIView): 获取热销产品排行榜API def get(self, request): 统计每个产品的总销量和销售额 product_stats ( OrderItem.objects .select_related(product) .values(product_id, product__name, product__brand, product__price) .annotate( total_soldSum(quantity), total_revenueSum(unit_price) ) .order_by(-total_sold)[:10] # 取前10名 ) # 手动构建序列化数据 data [] for stat in product_stats: data.append({ id: stat[product_id], name: stat[product__name], brand: stat[product__brand], price: stat[product__price], total_sold: stat[total_sold], total_revenue: stat[total_revenue], }) return Response(data)/code/pre 3.4 前端可视化集成 (HTML/JavaScript with Chart.js) 在Django模板中集成Chart.js通过Ajax调用API或直接使用模板变量渲染图表。 analytics/dashboard.html {% extends base.html %} {% load static %} {% block content %} div classcontainer mt-4 h1电子产品销售数据仪表板/h1 !-- 关键指标卡片 -- div classrow mb-4 div classcol-md-4 div classcard text-white bg-primary div classcard-body h5 classcard-title总销售额/h5 p classcard-text display-6¥{{ total_sales|floatformat:2 }}/p /div /div /div !-- 更多卡片... -- /div !-- 销售额趋势图 (Chart.js) -- div classrow mb-4 div classcol-12 div classcard div classcard-header近30天销售额趋势/div div classcard-body canvas idsalesTrendChart height100/canvas /div /div /div /div !-- 品类收入分布图 -- div classrow div classcol-md-6 div classcard div classcard-header品类收入分布/div div classcard-body canvas idcategoryRevenueChart/canvas /div /div /div /div /div script srchttps://cdn.jsdelivr.net/npm/chart.js/script script // 销售额趋势图 (折线图) const salesCtx document.getElementById(salesTrendChart).getContext(2d); const salesChart new Chart(salesCtx, { type: line, data: { labels: {{ dates|safe }}, // 从Django视图传入的日期列表 datasets: [{ label: 日销售额 (¥), data: {{ amounts|safe }}, // 从Django视图传入的金额列表 borderColor: rgb(75, 192, 192), tension: 0.1, fill: false }] }, options: { responsive: true, plugins: { legend: { display: true } }, scales: { y: { beginAtZero: true, ticks: { callback: function(value) { return ¥ value.toLocaleString(); } } } } } }); // 品类收入分布图 (饼图) const categoryCtx document.getElementById(categoryRevenueChart).getContext(2d); const categoryChart new Chart(categoryCtx, { type: pie, data: { labels: {{ categories|safe }}, datasets: [{ data: {{ revenues|safe }}, backgroundColor: [ #FF6384, #36A2EB, #FFCE56, #4BC0C0, #9966FF ] }] }, options: { responsive: true, plugins: { legend: { position: top }, tooltip: { callbacks: { label: function(context) { let label context.label || ; if (label) label : ; label ¥ context.raw.toLocaleString(); return label; } } } } } }); /script {% endblock %} 4. 总结与展望 本文详细介绍了基于Django构建电子产品销售数据分析与可视化系统的技术栈选型、项目背景与商业价值并提供了从数据模型、业务逻辑到前后端集成的核心代码实现。 通过此系统您可以 快速搭建利用Django的“开箱即用”特性快速构建起数据管理与分析的后台。 深度分析结合Pandas在服务端进行灵活的数据处理与聚合。 直观展示通过Chart.js等库将数据转化为交互式图表提升数据沟通效率。 持续扩展该系统架构清晰易于扩展未来可集成用户行为分析、库存预测、推荐算法等更高级的AI功能。 建议读者在理解上述代码的基础上从搭建Django项目环境开始逐步实现各模块并尝试导入真实的销售数据集进行测试从而全面掌握全栈数据可视化应用的开发流程。
返回列表