========【重要提示:主页置顶文章找我咨询】=======
博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,不断的进行新技术的项目实战👈
可定制,需求的各位可以先收藏起来
1. 项目概述
1.1 系统目标
本系统旨在构建一个基于Hive大数据平台转转二手手机销量分析与预测系统,能够从转转平台采集二手手机销售数据,利用Hive进行数据清洗、存储和多维度分析,并运用时间序列预测模型对未来销量进行预测,为平台运营决策和消费者选择提供数据支持。
1.2 系统用途
数据分析:从品牌、价格区间、地区、时间等多个维度分析二手手机销量特征和规律
销量预测:基于历史数据,使用ARIMA、指数平滑、移动平均等时间序列模型预测未来30天销量
可视化展示:通过Web大屏和管理后台提供直观的数据展示和查询功能
1.3 整体流程
系统采用数据仓库分层架构(ODS → DWD → DWS → ADS),完整流程如下:
数据采集 → ETL处理 → 多维分析 → 模型预测 → 结果存储 → Web可视化展示
详细流程:
数据采集:使用Python爬虫采集转转平台二手手机数据(品牌、型号、价格、地区等)
ETL处理:将原始数据上传至HDFS,通过Hive进行数据清洗、转换,构建ODS/DWD/DWS/ADS四层数据仓库
多维分析:使用Hive SQL对DWS层数据进行聚合分析,生成品牌、价格区间、地区、时间序列等维度分析结果
模型预测:从Hive加载时间序列数据,使用Python时间序列模型(ARIMA、指数平滑、移动平均)进行训练和预测
结果存储:将分析结果和预测结果保存到Hive ADS层表
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.ARIMApredict_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 数据流转方式
数据流向:Hive表 → Flask API → JSON响应 → Vue.js前端 → ECharts图表
数据格式:Hive表存储结构化数据,API转换为JSON,前端解析为JavaScript对象
6.2 主要请求流程
数据大屏加载流程:
前端页面加载(
index.html)Vue.js应用初始化(
dashboard.js)调用
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→ 获取模型评估
后端通过
HiveBeeline查询对应的Hive表处理数据(去除表名前缀、过滤NaN、列名映射、类型转换)
返回JSON格式数据
前端接收数据,调用
render*Chart()方法使用ECharts渲染图表
管理后台数据浏览流程:
访问
/admin页面前端调用
GET /api/admin/tables?table=all后端查询所有Hive分析表和预测表
返回包含所有表数据的JSON对象
前端根据当前选择的表(
currentTable)显示对应数据表格
6.3 数据预处理
后端API在返回数据前会进行以下处理:
去除表名前缀:Hive返回的列名可能包含表名前缀(如
ads_brand_analysis.brand),需要去除过滤NaN值:使用
dropna()过滤包含NaN的行列名映射:将英文列名映射为中文(如
brand→品牌)类型转换:确保数值列为数值类型,日期列为日期格式
资料获取
========【重要提示:主页置顶文章找我】========