Python 数据可视化实战:多维度销售数据分析与图表绘制
原创 IT小本本 https://mp.weixin.qq.com/s/1-f0nrER_RJbHmC0iIEXMw 2025年03月27日 11:30 北京
本文将通过一个完整的实战案例。读取现有的excel数据,演示如何使用 Python 生成模拟数据、构建多维度分析模型,并结合 matplotlib、seaborn 等库实现 9 种专业图表的绘制。
一、数据读取与存储
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import Circle
import mplfinance as mpf
1. 数据
销售数据:包含 5 大地区 × 5 大品类 × 12 个月的模拟数据,包含销售额、利润、销售量、客户满意度等指标。
股价数据: 2023 年 1 月的股票交易数据,包含开盘价、最高价、最低价、收盘价和成交量。
with pd.ExcelWriter('sales_data.xlsx') as writer:
df.to_excel(writer, sheet_name='销售数据', index=False)
stock_df.to_excel(writer, sheet_name='股价数据', index=False)
sales_data.xlsx 数据内容:
二、数据可视化方案
我们将通过 9 种图表类型,从不同维度解析销售数据:
三、核心图表解析
以下是对代码中各个可视化图表的详细讲解,帮助读者理解不同图表类型的作用及实现原理:
1. 区域销售对比(条形图)
图表类型:垂直条形图
实现方式:
region_sales = sales_df.groupby('地区')['销售额'].sum().sort_values(ascending=False)
sns.barplot(x=region_sales.index, y=region_sales.values)
核心功能:
通过
groupby
按地区聚合销售额总和使用
sort_values
降序排列,突出高销售区域Seaborn的
barplot
自动生成带颜色主题的条形图
分析价值:快速识别销售额最高的地区(如华东),发现区域市场差异。
2. 品类销售分布(柱状图)
图表类型:单色柱状图
代码亮点:
sns.barplot(..., color='green') # 统一颜色
plt.xticks(rotation=45) # 标签倾斜防止重叠
设计选择:
使用单一颜色避免多分类颜色干扰
45度标签旋转提升可读性
业务意义:对比不同产品类别(如电子产品 vs 日用品)的销售额贡献。
3. 月度销售趋势(折线图)
关键代码:
monthly_sales = sales_df.groupby('日期')['销售额'].sum()
plt.plot(..., marker='o') # 添加数据点标记
数据处理:
按日期聚合每日销售额总和
未显式重采样,需确保日期格式为连续序列
趋势洞察:识别销售高峰月份(如11月可能受促销影响)。
4. 品类占比(饼图)
可视化优化:
plt.pie(..., autopct='%1.1f%%', startangle=90) # 显示百分比,调整起始角度
plt.axis('equal') # 强制圆形显示
适用场景:展示整体销售构成,但超过5个分类时建议改用条形图。
5. 销售额-利润关系(散点图)
代码细节:
plt.scatter(..., alpha=0.5) # 半透明点处理重叠
分析维度:
X/Y轴分别映射销售额和利润
点透明度避免高密度区域遮盖
潜在发现:识别离群点(如高销售额低利润的异常订单)。
6. 品类趋势叠加(面积图)
数据重塑:
category_monthly = sales_df.pivot_table(...) # 生成日期-类别矩阵
图表特性:
面积堆叠显示总量趋势
颜色区分品类贡献比例
趋势解读:观察不同品类随时间的增长/衰退模式(如服饰类季节性波动)。
7. 地区占比(圆环图)
实现技巧:
plt.pie(..., wedgeprops=dict(width=0.5)) # 控制环宽
plt.gca().add_patch(Circle(...)) # 中心挖空
对比优势:相比饼图,更突出中心区域的可注释空间。
8. 多维指标(雷达图)
关键步骤:
- 数据标准化:
region_metrics_norm = (region_metrics - min) / (max - min)
- 角度计算:
angles = np.linspace(0, 2*np.pi, len(metrics))
分析价值:综合比较不同地区在销售额、利润等多指标上的均衡性。
9. 三维关系(气泡图)
维度映射:
X轴:销售额
Y轴:利润
气泡大小:销售量
代码实现:
s=data['销售量']/50 # 缩放气泡尺寸
alpha=0.7 # 透明叠加
业务洞察:发现高销售量但低利润的问题组合(需深入分析定价策略)。
知识拓展
- 布局管理:
plt.tight_layout() # 自适应间距 plt.subplots_adjust(hspace=0.4, wspace=0.3) # 手动调整
- 样式统一:
sns.set_style("whitegrid") # 网格背景 plt.rcParams.update({'font.size': 10}) # 统一字体
- 输出质量:
plt.savefig(..., dpi=300, bbox_inches='tight') # 高清保存
通过组合这些图表,可构建完整的销售分析看板,覆盖分布、趋势、构成、关联等多维度分析需求。实际应用中需根据数据特点调整图表类型,例如时序预测可加入ARIMA模型折线,地理数据可转换地图可视化。
四、技术实现亮点
中文支持优化
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
plt.rcParams['axes.unicode_minus'] = False # 负号显示
图表布局管理
plt.tight_layout() # 自动调整子图间距
plt.savefig('sales_analysis.png', dpi=300, bbox_inches='tight') # 高质量保存
数据预处理
日期格式标准化(
freq='ME'
生成月末日期)异常值处理(股价数据
price = max(price + change, 50)
)数据聚合(
groupby
和pivot_table
灵活组合)
五、图表选择建议
分析维度 |
推荐图表类型 |
适用场景 |
---|---|---|
对比分析 |
条形图/柱状图 |
地区/品类销售额对比 |
结构分析 |
饼图/圆环图 |
市场份额占比 |
趋势分析 |
折线图/面积图 |
月度销售变化 |
多维分析 |
雷达图 |
综合指标评估 |
关系分析 |
散点图/气泡图 |
指标相关性探索 |
时间序列 |
K线图 |
金融数据可视化 |