欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 数分基础(03-2)客户特征分析-简单可视化

数分基础(03-2)客户特征分析-简单可视化

2025/5/14 6:36:18 来源:https://blog.csdn.net/dotdotyy/article/details/141651657  浏览:    关键词:数分基础(03-2)客户特征分析-简单可视化

文章目录

  • 简单可视化
    • 1. 并排柱状图
    • 2. 堆叠柱状图
      • 2.1 画图
      • 2.2 对数刻度

简单可视化

接上一篇 数分基础(03-1)客户特征分析,运行本篇代码之前,先运行上一篇的代码。

为了能够对比和总览三个客户群体Cluster 0 - Cluster 1 的特征,上一篇末尾使用了并排柱状图,并排单图中对比多个群体在多个特征上的差异。

1. 并排柱状图

三个群体在每个特征上的数据并排展示,便于直接对比,快速发现群体之间的特征差异。

import matplotlib.pyplot as plt
import numpy as np# 设置 Pandas 显示浮点数格式,禁用科学计数法
pd.set_option('display.float_format', '{:.2f}'.format)# 定义特征和群体标签
features = ['Avg Total Sales', 'Avg Total Quantity', 'Avg Total Profit', 'Avg Discount']
cluster_labels = ['Cluster 0', 'Cluster 1', 'Cluster 2']# 将数据转为数组格式,便于绘制
values = cluster_summary[features].values.T# 创建图表
fig, axes = plt.subplots(1, 4, figsize=(18, 5))  # 设置为一行四列的图表布局# 为每个特征绘制并列的柱状图
colors = ['skyblue', 'lightgreen', 'salmon']  # 颜色配置
for i, ax in enumerate(axes):ax.bar(cluster_labels, values[i], color=colors, width=0.5)ax.set_title(features[i])ax.set_xlabel('Clusters')ax.set_ylabel('Values')# 调整布局
plt.tight_layout()
plt.show()# 还原 Pandas 默认显示设置(可选)
pd.reset_option('display.float_format')

在这里插入图片描述

2. 堆叠柱状图

2.1 画图

在一张图上直观展示各个群体的多项特征,方便对比,例如各群体在各特征上的总体情况和比例差异。

import matplotlib.pyplot as plt
import numpy as np# 定义特征和群体标签
features = ['Avg Total Sales', 'Avg Total Quantity', 'Avg Total Profit', 'Avg Discount']
cluster_labels = ['Cluster 0', 'Cluster 1', 'Cluster 2']# 将数据转为数组格式,便于绘制
values = cluster_summary[features].values.T# 设置柱状图的宽度和位置
bar_width = 0.25
index = np.arange(len(features))# 创建图表
fig, ax = plt.subplots(figsize=(14, 8))# 为每个群体绘制柱状图
colors = ['skyblue', 'lightgreen', 'salmon']  # 颜色配置
for i, cluster in enumerate(cluster_labels):ax.bar(index + i * bar_width, values[:, i], bar_width, label=cluster, color=colors[i])# 设置标题和标签
ax.set_xlabel('Features', fontsize=14, labelpad=10)
ax.set_ylabel('Values', fontsize=14, labelpad=10)
ax.set_title('Comparison of Clusters', fontsize=16, pad=20)
ax.set_xticks(index + bar_width)
ax.set_xticklabels(features, fontsize=12, rotation=45)
ax.legend(title='Clusters', fontsize=12, title_fontsize='13')# 调整图表布局和外观
plt.style.use('ggplot')  # 使用更加现代的样式
fig.patch.set_facecolor('white')  # 设置背景颜色
ax.grid(True, which='both', linestyle='--', linewidth=0.5)  # 调整网格线
plt.tight_layout(pad=2)  # 调整布局以防止裁剪和重叠plt.show()# 还原 Pandas 默认显示设置(可选)
pd.reset_option('display.float_format')

在这里插入图片描述

2.2 对数刻度

但是可以发现,由于不同特征的差异,某些特征的值相差较大,例如Avg Total Sales 平均总销售额,与折扣相比,数值非常高,导致较小的特征,例如Avg Discount 在图中几乎不可见,影响了整体的可读性

可以使用对数刻度

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# 确保使用 Unicode 负号
plt.rcParams['axes.unicode_minus'] = True# 定义特征和群体标签
features = ['Avg Total Sales', 'Avg Total Quantity', 'Avg Total Profit', 'Avg Discount']
cluster_labels = ['Cluster 0', 'Cluster 1', 'Cluster 2']# 将数据转为数组格式,便于绘制
values = cluster_summary[features].values.T# 设置柱状图的宽度和位置
bar_width = 0.25
index = np.arange(len(features))# 创建图表
fig, ax = plt.subplots(figsize=(14, 8))# 应用更加现代的样式
plt.style.use('ggplot')# 设置背景颜色为白色
fig.patch.set_facecolor('white')# 为每个群体绘制柱状图
colors = ['skyblue', 'lightgreen', 'salmon']  # 颜色配置
for i, cluster in enumerate(cluster_labels):ax.bar(index + i * bar_width, values[:, i], bar_width, label=cluster, color=colors[i])# 使用对数刻度
plt.yscale('log')# 设置标题和标签
ax.set_xlabel('Features', fontsize=14, labelpad=10)
ax.set_ylabel('Values', fontsize=14, labelpad=10)
ax.set_title('Comparison of Clusters', fontsize=16, pad=20)
ax.set_xticks(index + bar_width)
ax.set_xticklabels(features, fontsize=12, rotation=45)
ax.legend(title='Clusters', fontsize=12, title_fontsize='13')# 调整网格线
ax.grid(True, which='both', linestyle='--', linewidth=0.5)# 调整布局以防止裁剪和重叠
plt.tight_layout(pad=2)plt.show()# 还原 Pandas 默认显示设置(可选)
pd.reset_option('display.float_format')

在这里插入图片描述
对数刻度,通过对数变换来缩放数据值,使得视觉表示更加均衡。对每个数据点应用对数函数,缩小了高值和低值之间的诗句差距。例如,如果一个数据集包含1,10,100,1000,当使用线性刻度时,1000会显得非常突出,但在对数刻度下,数值的间距会缩小,可以使得不同数量级数据在同一图上得到较好地表示。

但要求所有数据必须为正数,所以前面代码会有些小问题,因为cluster 2群体的利润为负值。同时也需要小心解释,因为刻度标记不再是等距的。因此使用对数刻度,是希望在特征值差异很大时候均衡展示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词