博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈
系统后端基于 Spark 大数据框架进行数据处理与分析,采用 Hadoop 实现分布式存储与计算,通过爬虫技术采集二手商品数据。前端使用 Vue 框架构建动态交互界面,数据可视化通过 ECharts 生成分析图表,推荐模块采用协同过滤算法实现个性化商品推荐。

功能模块
· 仪表盘模块
· 数据表格模块
· 分类分析模块
· 地域分析模块
· 热度分析模块
· 价格分析模块
· 标题词云模块
· 类型词云模块
· 个性化推荐模块
· 个人资料模块
· 我的收藏模块
· 我的评论模块

项目介绍
本系统是基于 Spark 与 Hadoop 大数据框架开发的二手商品数据分析可视化平台,通过爬虫技术采集闲鱼商品数据作为基础数据源。系统后端利用 Spark 进行数据处理与分析,Hadoop 实现分布式存储与计算,前端基于 Vue 框架构建动态交互界面,包含仪表盘、数据表格、分类分析、地域分析、热度分析、价格分析、标题词云、类型词云、个性化推荐、个人资料、我的收藏、我的评论等功能模块。平台通过 ECharts 图表直观展示商品价格趋势、分类分布、地域特征、热度变化等多维数据,并基于协同过滤算法为用户提供个性化商品推荐。用户可浏览筛选商品、查看分析图表、管理收藏与评论,实现二手商品数据的可视化分析与个性化服务。

2、项目界面

仪表盘
该页面为Spark咸鱼数据分析系统的仪表盘模块,展示总商品数、平均价格、热门分类、活跃用户等核心数据卡片,同时包含商品价格趋势折线图、分类销量分布环形图及热门商品排行表格,可直观呈现平台商品与用户的核心运营数据。
在这里插入图片描述
数据表格
该页面为Spark咸鱼数据分析系统的商品数据表格模块,提供关键词、分类、价格区间等筛选功能,以卡片形式展示商品信息,包含商品图片、标题、价格、地区及收藏操作,可让用户便捷浏览、筛选并管理平台商品数据。
在这里插入图片描述

分类分析页面功能概述
该页面为Spark咸鱼数据分析系统的分类分析模块,集成了分类总览柱状图、分类价格箱线图、热度与价格关系散点图以及分类TOP商品列表,可直观展示不同商品分类的数量分布、价格区间、热度与价格关联,并支持切换分类查看对应热门商品,助力多维度的商品分类数据可视化与分析。
在这里插入图片描述

地域分析页面功能概述
该页面为Spark咸鱼数据分析系统的地域分析模块,集成了城市总览柱状图、城市价格箱线图、城市维度热度与价格关系散点图以及城市TOP卖家列表,可直观展示不同城市的商品数量分布、价格区间、热度与价格关联,并支持切换城市查看对应热门卖家,助力多维度的地域商品数据可视化与分析。
在这里插入图片描述
热度分析页面功能概述
该页面为Spark咸鱼数据分析系统的热度分析模块,集成了热度趋势折线柱状图、按分类热度柱状图、按城市热度柱状图以及热门商品TOP列表,可直观展示商品热度随时间的变化趋势、不同分类与城市的热度分布,并呈现热门商品排行,助力多维度的商品热度数据可视化与分析。
在这里插入图片描述

价格分析页面功能概述
该页面为Spark咸鱼数据分析系统的价格分析模块,集成了价格趋势折线柱状图、价格区间分布柱状图、城市价格概览柱状图、分类价格概览柱状图以及价格-热度相关数值展示,可直观呈现商品价格随时间的变化、不同价格区间的商品分布、各城市与分类的价格概况,并体现价格与热度的关联程度,助力多维度的商品价格数据可视化与分析。
在这里插入图片描述
标题词云页面功能概述
该页面为Spark咸鱼数据分析系统的标题词云模块,集成了商品标题词云可视化展示功能,同时提供类型词云切换入口,可直观呈现商品标题中的高频词汇分布,帮助快速把握商品标题的关键词特征与流行表述,助力商品标题文本特征的可视化分析。
在这里插入图片描述
类型词云页面功能概述
该页面为Spark咸鱼数据分析系统的类型词云模块,集成了商品分类类型词云可视化展示功能,可直观呈现不同商品分类类型的出现频次分布,帮助快速把握平台商品的主要类别结构与热门类型特征,助力商品分类类型数据的文本可视化分析。
在这里插入图片描述
个性化推荐页面功能概述
该页面为Spark咸鱼数据分析系统的个性化推荐模块,集成了协同过滤推荐算法,以卡片形式展示推荐商品,包含商品图片、名称、分类、价格、地点等信息,并提供查看详情入口,可根据用户偏好精准推送相关商品,助力实现平台的个性化商品推荐与用户精准匹配。
在这里插入图片描述
个人资料页面功能概述
该页面为Spark咸鱼数据分析系统的个人资料模块,集成了用户基础信息展示、数据统计展示、账户信息详情展示功能,同时提供编辑资料入口以及个人资料、我的收藏、我的评论等行为记录的切换选项,可方便用户查看与管理自身账号信息和相关行为数据,助力平台的用户信息管理与个性化服务。
在这里插入图片描述
我的收藏页面功能概述
该页面为Spark咸鱼数据分析系统的我的收藏模块,集成了收藏商品卡片展示功能,卡片包含商品名称、价格、发布地点、收藏时间等信息,同时提供删除收藏的操作入口,可方便用户查看、管理已收藏的商品,助力平台用户的商品收藏行为管理与后续浏览。
在这里插入图片描述
我的评论页面功能概述
该页面为Spark咸鱼数据分析系统的我的评论模块,集成了用户评论内容展示功能,包含关联商品信息、评分、发布时间等内容,同时提供公开状态切换与删除操作入口,可方便用户查看、管理自身发表的评论,助力平台用户的评论行为管理与内容维护。
在这里插入图片描述

3、项目说明

一、技术栈简要说明
系统后端基于 Spark 大数据框架进行数据处理与分析,采用 Hadoop 实现分布式存储与计算,通过爬虫技术采集二手商品数据作为基础数据源。前端使用 Vue 框架构建动态交互界面,数据可视化通过 ECharts 生成分析图表,推荐模块采用协同过滤算法实现个性化商品推荐,整体架构充分发挥大数据技术优势,为海量二手商品数据的存储、计算与可视化分析提供坚实技术支撑。

二、功能模块详细介绍

· 仪表盘模块
该页面为系统的核心数据总览界面,展示总商品数、平均价格、热门分类、活跃用户等核心指标卡片,同时集成商品价格趋势折线图、分类销量分布环形图及热门商品排行表格,可直观呈现平台商品与用户的核心运营数据,为运营决策提供宏观数据支撑。

· 数据表格模块
该页面提供商品数据的精细化浏览与筛选功能,支持关键词搜索、分类筛选、价格区间筛选等多维度条件查询。商品以卡片形式展示,包含商品图片、标题、价格、地区及收藏操作,方便用户便捷浏览、筛选并管理平台商品数据。

· 分类分析模块
该页面集成分类总览柱状图、分类价格箱线图、热度与价格关系散点图以及分类TOP商品列表,可直观展示不同商品分类的数量分布、价格区间、热度与价格关联,支持切换分类查看对应热门商品,助力多维度的商品分类数据可视化与分析。

· 地域分析模块
该页面集成城市总览柱状图、城市价格箱线图、城市维度热度与价格关系散点图以及城市TOP卖家列表,可直观展示不同城市的商品数量分布、价格区间、热度与价格关联,支持切换城市查看对应热门卖家,助力多维度的地域商品数据可视化与分析。

· 热度分析模块
该页面集成热度趋势折线柱状图、按分类热度柱状图、按城市热度柱状图以及热门商品TOP列表,可直观展示商品热度随时间的变化趋势、不同分类与城市的热度分布,并呈现热门商品排行,助力多维度的商品热度数据可视化与分析。

· 价格分析模块
该页面集成价格趋势折线柱状图、价格区间分布柱状图、城市价格概览柱状图、分类价格概览柱状图以及价格-热度相关数值展示,可直观呈现商品价格随时间的变化、不同价格区间的商品分布、各城市与分类的价格概况,并体现价格与热度的关联程度,助力多维度的商品价格数据可视化与分析。

· 标题词云模块
该页面集成商品标题词云可视化展示功能,同时提供类型词云切换入口,可直观呈现商品标题中的高频词汇分布,帮助快速把握商品标题的关键词特征与流行表述,助力商品标题文本特征的可视化分析。

· 类型词云模块
该页面集成商品分类类型词云可视化展示功能,可直观呈现不同商品分类类型的出现频次分布,帮助快速把握平台商品的主要类别结构与热门类型特征,助力商品分类类型数据的文本可视化分析。

· 个性化推荐模块
该页面集成协同过滤推荐算法,以卡片形式展示推荐商品,包含商品图片、名称、分类、价格、地点等信息,并提供查看详情入口,可根据用户偏好精准推送相关商品,助力实现平台的个性化商品推荐与用户精准匹配。

· 个人资料模块
该页面集成用户基础信息展示、数据统计展示、账户信息详情展示功能,同时提供编辑资料入口以及个人资料、我的收藏、我的评论等行为记录的切换选项,可方便用户查看与管理自身账号信息和相关行为数据,助力平台的用户信息管理与个性化服务。

· 我的收藏模块
该页面集成收藏商品卡片展示功能,卡片包含商品名称、价格、发布地点、收藏时间等信息,同时提供删除收藏的操作入口,可方便用户查看、管理已收藏的商品,助力平台用户的商品收藏行为管理与后续浏览。

· 我的评论模块
该页面集成用户评论内容展示功能,包含关联商品信息、评分、发布时间等内容,同时提供公开状态切换与删除操作入口,可方便用户查看、管理自身发表的评论,助力平台用户的评论行为管理与内容维护。

三、项目总结
本系统是基于 Spark 与 Hadoop 大数据框架开发的闲鱼二手商品数据分析可视化平台,利用爬虫技术采集海量二手商品数据作为基础数据源。系统后端充分发挥 Spark 的数据处理能力与 Hadoop 的分布式存储优势,前端基于 Vue 框架构建动态交互界面,涵盖仪表盘、数据表格、分类分析、地域分析、热度分析、价格分析、标题词云、类型词云、个性化推荐、个人资料、我的收藏、我的评论等十二大功能模块。平台通过 ECharts 图表直观展示商品价格趋势、分类分布、地域特征、热度变化等多维度数据,并基于协同过滤算法为用户提供个性化商品推荐。用户可便捷浏览筛选商品数据、查看各类分析图表、管理个人收藏与评论,实现对二手商品数据的全面可视化分析与个性化服务。整体系统架构充分融合大数据技术与可视化分析手段,为二手商品交易平台的数据运营与用户体验优化提供了完整的技术解决方案。

4、核心代码


import json
from datetime import datetime, timedelta
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.http import require_GET
from django.db.models import Avg, Max, Min, Count, Q
from django.db.models.functions import TruncDay, TruncWeek, TruncMonth
from .models import Product, ProductView, Category, City

def price_analysis(request):
    """价格分析模块主页面"""
    return render(request, 'analysis/price_analysis.html')

@require_GET
def get_price_metrics(request):
    """获取价格分析核心指标"""
    try:
        days = int(request.GET.get('days', 30))
        category_id = request.GET.get('category_id', '')
        
        # 基础查询
        time_threshold = datetime.now() - timedelta(days=days)
        product_qs = Product.objects.filter(created_at__gte=time_threshold)
        
        if category_id:
            product_qs = product_qs.filter(category_id=category_id)
        
        # 聚合指标
        stats = product_qs.aggregate(
            avg_price=Avg('price'),
            max_price=Max('price'),
            min_price=Min('price'),
            total_count=Count('id')
        )
        
        # 计算中位数
        prices = list(product_qs.order_by('price').values_list('price', flat=True))
        if prices:
            n = len(prices)
            median = prices[n // 2] if n % 2 else (prices[n // 2 - 1] + prices[n // 2]) / 2
        else:
            median = 0
        
        # 计算趋势(与上周期对比)
        prev_start = time_threshold - timedelta(days=days)
        prev_qs = Product.objects.filter(
            created_at__gte=prev_start,
            created_at__lt=time_threshold
        )
        if category_id:
            prev_qs = prev_qs.filter(category_id=category_id)
        
        prev_avg = prev_qs.aggregate(avg=Avg('price'))['avg'] or 0
        curr_avg = stats['avg_price'] or 0
        trend = round(((curr_avg - prev_avg) / prev_avg * 100) if prev_avg else 0, 1)
        
        # 价格-热度相关度(简化计算)
        heat_data = list(product_qs.exclude(view_count=0).values('price', 'view_count')[:200])
        correlation = calculate_simple_correlation(heat_data) if len(heat_data) > 1 else 0.45
        
        return JsonResponse({
            'code': 200,
            'data': {
                'avgPrice': round(stats['avg_price'] or 0, 2),
                'maxPrice': round(stats['max_price'] or 0, 2),
                'minPrice': round(stats['min_price'] or 0, 2),
                'medianPrice': round(median, 2),
                'totalCount': stats['total_count'],
                'priceTrend': trend,
                'priceHeatCorrelation': round(correlation, 2)
            }
        })
    except Exception as e:
        return JsonResponse({'code': 500, 'message': str(e)})

@require_GET
def get_price_trend(request):
    """获取价格趋势数据"""
    try:
        trend_type = request.GET.get('type', 'daily')
        days = int(request.GET.get('days', 30))
        category_id = request.GET.get('category_id', '')
        
        time_threshold = datetime.now() - timedelta(days=days)
        product_qs = Product.objects.filter(created_at__gte=time_threshold)
        
        if category_id:
            product_qs = product_qs.filter(category_id=category_id)
        
        # 按时间分组
        if trend_type == 'daily':
            trunc_func = TruncDay('created_at')
        elif trend_type == 'weekly':
            trunc_func = TruncWeek('created_at')
        else:
            trunc_func = TruncMonth('created_at')
        
        trend_data = product_qs.annotate(
            period=trunc_func
        ).values('period').annotate(
            avg_price=Avg('price'),
            max_price=Max('price'),
            min_price=Min('price'),
            count=Count('id')
        ).order_by('period')
        
        result = {
            'dates': [item['period'].strftime('%Y-%m-%d') if item['period'] else '' for item in trend_data],
            'avgPrices': [round(item['avg_price'] or 0, 2) for item in trend_data],
            'maxPrices': [round(item['max_price'] or 0, 2) for item in trend_data],
            'minPrices': [round(item['min_price'] or 0, 2) for item in trend_data],
            'counts': [item['count'] for item in trend_data]
        }
        
        return JsonResponse({'code': 200, 'data': result})
    except Exception as e:
        return JsonResponse({'code': 500, 'message': str(e)})

@require_GET
def get_price_range(request):
    """获取价格区间分布"""
    try:
        category_id = request.GET.get('category_id', 'all')
        ranges = [
            {'min': 0, 'max': 100, 'label': '0-100元'},
            {'min': 100, 'max': 500, 'label': '100-500元'},
            {'min': 500, 'max': 1000, 'label': '500-1000元'},
            {'min': 1000, 'max': 3000, 'label': '1000-3000元'},
            {'min': 3000, 'max': 5000, 'label': '3000-5000元'},
            {'min': 5000, 'max': 10000, 'label': '5000-10000元'},
            {'min': 10000, 'max': None, 'label': '10000元以上'}
        ]
        
        product_qs = Product.objects.all()
        if category_id != 'all':
            product_qs = product_qs.filter(category_id=category_id)
        
        result = []
        for r in ranges:
            if r['max']:
                count = product_qs.filter(price__gte=r['min'], price__lt=r['max']).count()
            else:
                count = product_qs.filter(price__gte=r['min']).count()
            
            result.append({
                'range': r['label'],
                'count': count
            })
        
        return JsonResponse({'code': 200, 'data': result})
    except Exception as e:
        return JsonResponse({'code': 500, 'message': str(e)})

@require_GET
def get_city_price_overview(request):
    """获取城市价格概览"""
    try:
        limit = int(request.GET.get('limit', 10))
        
        city_stats = City.objects.annotate(
            avg_price=Avg('product__price'),
            max_price=Max('product__price'),
            min_price=Min('product__price'),
            product_count=Count('product')
        ).filter(product_count__gt=0).order_by('-avg_price')[:limit]
        
        result = {
            'cities': [city.name for city in city_stats],
            'avgPrices': [round(city.avg_price or 0, 2) for city in city_stats],
            'maxPrices': [round(city.max_price or 0, 2) for city in city_stats],
            'minPrices': [round(city.min_price or 0, 2) for city in city_stats],
            'counts': [city.product_count for city in city_stats]
        }
        
        return JsonResponse({'code': 200, 'data': result})
    except Exception as e:
        return JsonResponse({'code': 500, 'message': str(e)})




5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐