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

简单可视化

数据集介绍见 数分基础(01)示例数据集Global_Superstore
可直接下载
在这里插入图片描述
本文接上一篇 数分基础(03-1)客户特征分析
运行本篇代码之前,先运行上一篇的代码。

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

1. 关于可视化

可视化并非主观设计,也不是追求形式,其本质是以最合适的方式呈现信息、辅助判断。

例如,分析销售额,先考虑的是条形图(柱状图),如果种类非常多,再考虑分布 —— 这基本是固定的思考范式,也能顺应受众的“潜意识”。

所以,可视化的逻辑框架是客观的,我们一般做的工作是在这个框架上补充和完善,不可过度追求“形式”。

2. 并排柱状图

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

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')

在这里插入图片描述

3. 堆叠柱状图

3.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')

在这里插入图片描述

3.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群体的利润为负值。同时也需要小心解释,因为刻度标记不再是等距的。因此使用对数刻度,是希望在特征值差异很大时候均衡展示。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotdotyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值