ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于Hive的转转二手手机销量分析与预测-完整源码论文毕设项目

基于Hive的转转二手手机销量分析与预测-完整源码论文毕设项目

========【重要提示:主页置顶文章找我咨询】=======

博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,不断的进行新技术的项目实战👈

可定制,需求的各位可以先收藏起来

1. 项目概述

1.1 系统目标

本系统旨在构建一个基于Hive大数据平台转转二手手机销量分析与预测系统,能够从转转平台采集二手手机销售数据,利用Hive进行数据清洗、存储和多维度分析,并运用时间序列预测模型对未来销量进行预测,为平台运营决策和消费者选择提供数据支持。

1.2 系统用途

  • 数据分析:从品牌、价格区间、地区、时间等多个维度分析二手手机销量特征和规律

  • 销量预测:基于历史数据,使用ARIMA、指数平滑、移动平均等时间序列模型预测未来30天销量

  • 可视化展示:通过Web大屏和管理后台提供直观的数据展示和查询功能

1.3 整体流程

系统采用数据仓库分层架构(ODS → DWD → DWS → ADS),完整流程如下:

数据采集 → ETL处理 → 多维分析 → 模型预测 → 结果存储 → Web可视化展示

详细流程:

  1. 数据采集:使用Python爬虫采集转转平台二手手机数据(品牌、型号、价格、地区等)

  2. ETL处理:将原始数据上传至HDFS,通过Hive进行数据清洗、转换,构建ODS/DWD/DWS/ADS四层数据仓库

  3. 多维分析:使用Hive SQL对DWS层数据进行聚合分析,生成品牌、价格区间、地区、时间序列等维度分析结果

  4. 模型预测:从Hive加载时间序列数据,使用Python时间序列模型(ARIMA、指数平滑、移动平均)进行训练和预测

  5. 结果存储:将分析结果和预测结果保存到Hive ADS层表

  6. Web展示:通过Flask后端提供API接口,前端使用Vue.js和ECharts渲染数据可视化大屏和管理后台


2. 技术栈简述

2.1 数据存储与处理

  • Hadoop HDFS:分布式文件系统,存储原始数据和处理后的数据文件

  • Hive:数据仓库工具,提供SQL接口进行数据查询、清洗、聚合,支持数据仓库分层设计

  • Hive Beeline:通过JDBC连接Hive,执行SQL语句和数据查询

2.2 数据处理与分析

  • Python 3.x:主要编程语言,实现数据采集、ETL、分析和预测功能

  • Pandas:数据处理库,用于数据清洗、转换、聚合

  • NumPy:数值计算库,支持数组运算和统计分析

2.3 机器学习与预测

  • statsmodels:统计模型库,提供ARIMA和指数平滑等时间序列预测模型

  • scikit-learn:机器学习库,用于模型评估指标计算(MAE、RMSE等)

2.4 Web开发

  • Flask:Python Web框架,提供RESTful API接口,查询Hive数据并返回JSON格式结果

  • Vue.js 3:前端框架,构建响应式单页应用

  • ECharts 5:数据可视化库,渲染各种图表(折线图、柱状图、饼图等)

  • Axios:HTTP客户端库,前端与后端API通信

2.5 其他工具

  • Matplotlib/Seaborn:Python可视化库,生成静态分析图表

  • requests/BeautifulSoup:HTTP请求和HTML解析,用于数据爬取

  • PyYAML:配置文件解析


3. 项目结构总览

backend/ ├── main.py # 主入口文件,支持多模式运行(collect/etl/analysis/predict/visualize) ├── app.py # Flask Web应用,提供API接口和前端页面路由 ├── requirements.txt # Python依赖包列表 ├── config/ │ └── config.yaml # 系统配置文件(Hive连接、数据路径、参数等) ├── data/ │ ├── shared/ # 共享数据目录(原始CSV数据) │ └── users.json # 用户认证数据 ├── src/ # 源代码目录 │ ├── crawler/ # 数据采集模块 │ │ └── spider.py # 爬虫实现,采集转转平台数据 │ ├── etl/ # ETL数据处理模块 │ │ └── data_processor.py # 数据清洗、转换,构建Hive数据仓库分层 │ ├── analysis/ # 数据分析模块 │ │ └── analyzer.py # 多维度分析(品牌、价格、地区、时间序列等) │ ├── prediction/ # 销量预测模块 │ │ └── predictor.py # 时间序列模型训练与预测 │ ├── visualization/ # 可视化模块 │ │ └── visualizer.py # 生成静态图表 │ ├── utils/ # 工具模块 │ │ ├── hive_beeline.py # Hive连接和SQL执行工具 │ │ ├── config_loader.py # 配置加载工具 │ │ └── logger.py # 日志工具 │ └── auth/ # 认证模块 │ └── auth.py # 用户认证逻辑 ├── frontend/ # 前端文件目录 │ ├── index.html # 数据可视化大屏页面 │ ├── admin.html # 管理后台页面 │ ├── js/ │ │ ├── dashboard.js # 大屏前端逻辑(Vue.js) │ │ └── admin.js # 管理后台前端逻辑 │ └── css/ # 样式文件 ├── output/ # 输出目录 │ ├── analysis/ # 分析结果CSV文件 │ ├── prediction/ # 预测结果CSV文件 │ └── visualization/ # 可视化图表文件 └── logs/ # 日志文件目录

主要文件职责说明:

  • main.py:命令行入口,通过--mode参数选择运行模式(数据采集/ETL/分析/预测/可视化)

  • app.py:Flask应用,提供数据查询API和前端页面服务

  • src/etl/data_processor.py:实现数据仓库ODS/DWD/DWS/ADS四层表的创建和数据加载

  • src/analysis/analyzer.py:实现多维度Hive SQL分析和结果保存

  • src/prediction/predictor.py:实现时间序列模型训练、评估和未来销量预测

  • src/utils/hive_beeline.py:封装Hive Beeline连接,支持SQL执行和数据查询


=======【重要提示:主页置顶文章找我咨询】=========

4. 主要功能模块说明

4.1 数据采集模块(crawler/spider.py)

功能:从转转平台采集二手手机销售数据

  • 爬取字段:品牌、型号、成色、价格、销售时间、地区、销量、浏览量、评论数等

  • 实现方式:使用requests和BeautifulSoup解析HTML,支持分页采集和反爬虫策略

  • 调用关系:独立运行,生成CSV文件保存到data/shared/

4.2 ETL数据处理模块(etl/data_processor.py)

功能:数据清洗、转换和加载,构建Hive数据仓库分层架构

  • ODS层:原始数据表(ods_rephone_raw),直接映射HDFS上的CSV文件

  • DWD层:明细数据层(dwd_rephone_clean),清洗后的数据,去除无效值和重复数据

  • DWS层:汇总数据层,按品牌、地区、价格区间等维度汇总(dws_brand_sales_daily、dws_region_sales_daily、dws_price_range_sales)

  • ADS层:应用数据层(ads_brand_analysis),面向应用的分析结果表

  • 实现方式:使用Hive SQL的INSERT OVERWRITE进行数据转换和聚合,通过HiveBeeline执行SQL

  • 调用关系:被main.py的etl模式调用,依赖Hive和HDFS环境

4.3 数据分析模块(analysis/analyzer.py)

功能:多维度销量分析,生成分析结果并保存到Hive ADS层表

  • 品牌分析:统计各品牌总销量、平均价格、销售额、市场占比

  • 价格区间分析:按价格区间(0-1000、1000-2000等)统计销量分布

  • 地区分析:统计各地区销量、平均价格、销售额

  • 时间序列分析:按日期汇总销量、平均价格、销售额,生成时间序列数据

  • 成色分析:按成色等级统计销量分布

  • 品牌趋势分析:按品牌和月份分析销量变化趋势

  • 汇总报告:生成整体统计数据(总销量、品牌数量、平均价格等)

  • 实现方式:使用Hive SQL聚合查询,结果保存到对应的ADS层表

  • 调用关系:被main.py的analysis模式调用,依赖ETL模块生成的DWS层数据

4.4 销量预测模块(prediction/predictor.py)

功能:基于时间序列数据构建预测模型,预测未来30天销量

  • 模型类型:

    • ARIMA模型:自回归积分滑动平均模型,处理趋势和季节性

    • 指数平滑模型(Holt-Winters):适用于具有趋势和季节性的时间序列

    • 移动平均模型:简单滑动平均预测

  • 模型评估:计算MAE(平均绝对误差)、RMSE(均方根误差)、MAPE(平均绝对百分比误差)

  • 预测结果:保存到ads_future_forecast表,包含预测日期、预测销量、预测类型

  • 实现方式:从Hive加载时间序列数据,使用statsmodels库训练模型,评估后保存结果到Hive

  • 调用关系:被main.py的predict模式调用,依赖分析模块生成的时间序列数据

4.5 Web服务模块(app.py)

功能:提供RESTful API接口,供前端查询分析结果和预测数据

  • 数据查询API:

    • /api/data/summary:获取汇总统计数据

    • /api/analysis/brand:获取品牌分析数据

    • /api/analysis/region:获取地区分析数据

    • /api/analysis/price:获取价格区间分析数据

    • /api/analysis/timeseries:获取时间序列数据

    • /api/prediction/future:获取未来预测数据

    • /api/prediction/evaluation:获取模型评估数据

    • /api/admin/tables:获取所有Hive表数据(管理后台使用)

  • 实现方式:通过HiveBeeline查询Hive表,将结果转换为JSON格式返回,处理列名映射和NaN值过滤

  • 调用关系:前端通过axios调用API,后端查询Hive返回数据

4.6 前端可视化模块

功能:数据可视化大屏和管理后台

  • 数据大屏(dashboard.js):

    • 核心指标展示:总销量、品牌数量、平均价格、总销售额

    • 图表展示:品牌销量排行、价格区间分布、地区销量分布、时间序列趋势、未来30天预测、模型性能评估

    • 实现方式:Vue.js管理数据状态,ECharts渲染图表,通过axios调用后端API获取数据

  • 管理后台(admin.js):

    • 表数据浏览:查看所有Hive分析表和预测表的数据

    • 实现方式:表格形式展示Hive表数据,支持多表切换


5. 关键接口或核心逻辑说明

5.1 Hive连接与SQL执行(utils/hive_beeline.py)

功能:封装Hive Beeline连接,提供SQL执行和数据查询接口

  • execute(sql): 执行DDL/DML SQL语句(CREATE TABLE、INSERT等),通过Docker容器执行beeline命令

  • query(sql): 执行SELECT查询,返回pandas DataFrame,通过解析beeline输出获取查询结果

  • 调用方式:各模块通过HiveBeeline()创建实例,调用connect()连接后执行SQL

5.2 ETL数据仓库构建(etl/data_processor.py)

核心方法:

  • init_database(): 创建Hive数据库

  • create_ods_table(): 创建ODS层原始数据表

  • clean_and_transform(): 数据清洗转换,生成DWD层数据(过滤NULL、价格异常值等)

  • aggregate_data(): 数据聚合,生成DWS层汇总表

  • generate_ads_data(): 生成ADS层应用数据

  • 调用方式:运行python main.py --mode etl执行完整ETL流程

5.3 多维度分析(analysis/analyzer.py)

核心方法:

  • analyze_by_brand(): 品牌维度分析,使用GROUP BY和窗口函数计算市场占比

  • analyze_by_price_range(): 价格区间分析,使用CASE WHEN分类统计

  • analyze_by_region(): 地区维度分析

  • analyze_by_time(): 时间序列分析,按日期聚合

  • _save_to_hive(): 将分析结果保存到Hive表,处理列名映射和数据格式

  • 调用方式:运行python main.py --mode analysis执行所有分析任务

5.4 时间序列预测(prediction/predictor.py)

核心方法:

  • load_time_series_data(): 从Hive加载时间序列数据

  • split_train_test(): 按时间顺序划分训练集和测试集(默认8:2)

  • predict_arima(): ARIMA模型预测,使用statsmodels.ARIMA

  • predict_exponential_smoothing(): 指数平滑模型预测

  • predict_moving_average(): 移动平均模型预测

  • evaluate_models(): 模型评估,计算MAE、RMSE、MAPE指标

  • forecast_future(): 未来30天销量预测

  • _save_to_hive(): 保存预测结果和评估结果到Hive表

  • 调用方式:运行python main.py --mode predict执行预测流程

5.5 Flask API接口(app.py)

主要接口:

  • 所有/api/analysis/*接口:查询对应的Hive ADS层分析表,过滤NaN值,映射列名为中文,返回JSON

  • /api/prediction/future?days=30:查询未来预测表,支持days参数指定天数

  • /api/admin/tables?table=all:查询所有Hive表数据,支持table参数指定单个表

  • 调用方式:前端通过HTTP GET请求调用,返回JSON格式数据


6. 前后端交互概述

6.1 数据流转方式

  1. 数据流向:Hive表 → Flask API → JSON响应 → Vue.js前端 → ECharts图表

  2. 数据格式:Hive表存储结构化数据,API转换为JSON,前端解析为JavaScript对象

6.2 主要请求流程

数据大屏加载流程:

  1. 前端页面加载(index.html)

  2. Vue.js应用初始化(dashboard.js)

  3. 调用loadAllData()方法,并行发起多个API请求:

    • GET /api/data/summary→ 获取汇总统计

    • GET /api/analysis/brand→ 获取品牌分析

    • GET /api/analysis/region→ 获取地区分析

    • GET /api/analysis/price→ 获取价格分析

    • GET /api/analysis/timeseries?limit=30→ 获取时间序列

    • GET /api/prediction/future?days=30→ 获取未来预测

    • GET /api/prediction/evaluation→ 获取模型评估

  4. 后端通过HiveBeeline查询对应的Hive表

  5. 处理数据(去除表名前缀、过滤NaN、列名映射、类型转换)

  6. 返回JSON格式数据

  7. 前端接收数据,调用render*Chart()方法使用ECharts渲染图表

管理后台数据浏览流程:

  1. 访问/admin页面

  2. 前端调用GET /api/admin/tables?table=all

  3. 后端查询所有Hive分析表和预测表

  4. 返回包含所有表数据的JSON对象

  5. 前端根据当前选择的表(currentTable)显示对应数据表格

6.3 数据预处理

后端API在返回数据前会进行以下处理:

  • 去除表名前缀:Hive返回的列名可能包含表名前缀(如ads_brand_analysis.brand),需要去除

  • 过滤NaN值:使用dropna()过滤包含NaN的行

  • 列名映射:将英文列名映射为中文(如brand→品牌)

  • 类型转换:确保数值列为数值类型,日期列为日期格式

资料获取

========【重要提示:主页置顶文章找我】========

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进