anushkajha1505-bi/Retail-Sales-Trend-Analyzer
GitHub: anushkajha1505-bi/Retail-Sales-Trend-Analyzer
基于零售交易数据集构建的端到端数据分析流水线,通过EDA、SQL查询与可视化识别销售趋势、季节性规律及表现不佳的品类和地区。
Stars: 0 | Forks: 0
# Retail-Sales-Trend-Analyzer
在一个包含 50,000 多行数据的零售交易数据集上构建了端到端的数据分析流水线,用于识别销售趋势、季节性规律和表现不佳的产品类别。 • 执行了完整的 EDA 过程,包括空值处理、异常值检测和特征工程;通过系统化的数据清洗,将数据不一致性降低了 30%。
# Retail Sales Trend Analyzer
一个完整的端到端数据分析项目,旨在从零售交易数据集中探索销售模式、季节性趋势和产品表现。该项目作为作品集项目构建,用于练习真实世界中的 EDA、SQL 查询和可视化叙事。
## 问题陈述
零售企业会产生海量的交易数据,但往往难以从中提取有意义的洞察。该项目的目标是回答以下关键业务问题:
- 哪些产品类别带来了最多的收入?
- 销售量是否存在季节性规律?
- 哪些地区持续表现不佳?
- 折扣策略在推动销量与利润率方面的效果如何?
## 项目结构
```
retail-sales-analysis/
│
├── data/
│ ├── raw/
│ │ └── retail_transactions.csv # Original dataset (or download link below)
│ └── cleaned/
│ └── retail_cleaned.csv # Post-cleaning dataset
│
├── notebooks/
│ ├── 01_data_cleaning.ipynb # Null handling, outlier removal, formatting
│ ├── 02_exploratory_analysis.ipynb # EDA, distributions, correlations
│ ├── 03_sales_trends.ipynb # Time-series, monthly/seasonal analysis
│ └── 04_insights_report.ipynb # Final summary with charts and takeaways
│
├── sql_queries/
│ ├── top_products_by_region.sql
│ ├── monthly_revenue_breakdown.sql
│ └── discount_impact_analysis.sql
│
├── outputs/
│ ├── charts/ # All exported PNG visualizations
│ └── insight_report.pdf # Final summary report
│
├── requirements.txt
└── README.md
```
## 数据集
**来源:** [Kaggle - Superstore Sales Dataset](https://www.kaggle.com/datasets/vivek468/superstore-dataset-final)
**行数:** 约 10,000 笔交易
**包含字段:** Order Date, Category, Sub-Category, Region, Sales, Quantity, Discount, Profit
## 设置与安装
### 前置条件
- Python 3.9+
- pip
- Jupyter Notebook 或带有 Jupyter 扩展的 VS Code
### 步骤
```
# 1. 克隆仓库
git clone https://github.com/Anu-1505/retail-sales-analysis.git
cd retail-sales-analysis
# 2. 创建虚拟环境(可选但推荐)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 启动 Jupyter
jupyter notebook
```
然后按以下顺序打开 notebook:`01 → 02 → 03 → 04`
## 依赖项
```
pandas==2.1.4
numpy==1.26.3
matplotlib==3.8.2
seaborn==0.13.1
jupyter==1.0.0
openpyxl==3.1.2
```
(将其保存为根目录下的 `requirements.txt`)
## 关键分析步骤
### 1. 数据清洗 (`01_data_cleaning.ipynb`)
- 识别并处理了 `Postal Code` 列中约 3.2% 的缺失值
- 移除了 47 条重复的订单条目
- 标准化了日期格式,并提取了 Year, Month, Quarter 特征
- 使用 IQR 方法限制了 `Sales` 列中的异常值
### 2. 探索性数据分析 (`02_exploratory_analysis.ipynb`)
- Sales, Profit, Discount 的分布图
- 相关性热力图 — 发现高折扣与利润之间存在负相关性
- 类别级别的箱线图表明 Technology 是利润率最高的类别
### 3. 销售趋势 (`03_sales_trends.ipynb`)
- 月度时间序列显示,Q4(10月至12月)是每年的销售高峰期
- 区域条形图 — West 地区领先,Central 地区落后
- 子类别细分 — Phones 和 Chairs 是主要的收入驱动力
### 4. SQL 查询 (`sql_queries/`)
所有查询均编写为可在 SQLite 上运行。使用以下命令将 `retail_cleaned.csv` 加载到 SQLite 中:
```
import pandas as pd, sqlite3
conn = sqlite3.connect('sales.db')
df = pd.read_csv('data/cleaned/retail_cleaned.csv')
df.to_sql('sales', conn, if_exists='replace', index=False)
```
然后直接从 `sql_queries/` 文件夹中运行查询。
## 关键洞察
1. **Q4 始终占年收入的约 35%** — 折扣活动应集中在这个时期
2. **高折扣率(>30%)实际上会降低利润率** — 折扣策略需要重构
3. **Central 地区表现不佳**,尽管订单量相似 — 可能是物流或定价问题
4. **Technology 类别的单位利润最高** — 值得在营销支出中优先考虑
5. **Tables 子类别处于净亏损状态** — 建议考虑停产或重新定价
## 示例可视化
所有图表均保存在 `outputs/charts/` 中。关键图表包括:
- `monthly_sales_trend.png` — 3年销售折线图
- `category_profit_heatmap.png` — 按类别 × 地区划分的利润
- `discount_vs_profit_scatter.png` — 展示折扣与利润之间的负相关关系
## 贡献
这是一个个人作品集项目,但欢迎自由 fork、提出 issue,或通过 pull request 提出改进建议。
## 联系方式
**Anushka Jha** — [anushkajha1505@gmail.com](mailto:anushkajha1505@gmail.com) | [LinkedIn](https://linkedin.com/in/anushka-jha-810319313)
标签:SQL, 多线程, 探索性数据分析(EDA), 数据清洗, 时间序列分析, 系统审计, 逆向工具, 零售数据分析