专栏名称: 新语数据故事汇
《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。
51好读  ›  专栏  ›  新语数据故事汇

一文带您了解伪对数(Pseudo-Logarithm):可视化倾斜数据的黄金方法

新语数据故事汇  · 公众号  ·  · 2024-07-14 18:27

正文

偏斜数据是指分布高度不均匀的数据:当变量数据显示为直方图时,大部分数据点要么聚集在分布的左侧,长尾向右延伸(右偏斜),要么反之(左偏斜),或呈现更复杂的偏斜模式。偏斜数据对可视化,特别是热力图的绘制,提出了很大的挑战。通常情况下,人们会使用对数变换来处理这些数据。然而,经典对数变换无法处理零或负数,而伪对数变换则能够更好地处理和可视化这些数据。

为什么使用伪对数?

经典对数对零和负值无定义,这限制了其在许多应用中的使用。相比之下,伪对数(Pseudo-Logarithm)修正了经典对数的这一限制:它对所有实数都有定义,对于大绝对值使用带符号的对数,并在底数趋近于零时平滑过渡到零。

以10为底的伪对数(pseudo-log10)的定义是:

在下面的代码和图中,x轴上的值通过伪对数10变换映射到y轴上,用蓝线表示。相比之下,经典的对数10变换则用黑线绘制。

import numpy as npimport matplotlib.pyplot as plt
# 伪对数10变换函数def pseudo_log10(x): return np.log(x/2+np.sqrt(x*x/4+1))/np.log(10)
# 定义数据x = np.linspace(-15, 15, 400)y_pseudo_log10 = pseudo_log10(x)y_log10 = np.log10(x[200:])
# 创建图形plt.figure(figsize=(10, 6))
# 绘制伪对数10变换的曲线,绘制经典对数10变换的曲线plt.plot(x, y_pseudo_log10, label='Pseudo-log10 Transformation', color='blue')plt.plot(x[200:], y_log10, label='Classic log10 Transformation', color='black')
# 添加图例plt.legend()
# 添加标题和标签plt.title('Comparison of Pseudo-log10 and Classic log10 Transformations')plt.xlabel('x')plt.ylabel('Transformed value')
# 显示图形plt.grid(True)plt.show()

该图展示了伪对数变换的一些良好特性:

  • 伪 log10(x) 在所有实数上都有定义。

  • 伪 log10(0) = 0

  • 如果 x ≫ 0,则伪 log10(x) ≈ log10(x)

  • 如果 x ≪ 0,则伪 log10(x) ≈ −log10(|x|)

类似地,任何底数为 b 的伪对数(伪对数 b )可定义如下。

伪对数 b (x) 具有以下性质:

  • 伪对数b (0) = 0

  • 如果 x ≫ 0,则伪对数b (x) ≈ log b (x)

  • 如果 x ≪ 0,则伪对数b (x) ≈ −log b (|x|)

数据可视化中的伪对数

对数变换 是处理广泛分布数据的常用方法。它将 数据转换为更规范的分布 ,从而更容易可视化。我们先看一下对数变换和伪对数变换对分布的影响(没有找到合适的数据,下面数据是生成的):

import numpy as npimport matplotlib.pyplot as plt
# 生成1000个来自右偏分布的样本data = np.random.exponential(scale=2, size=1000)
# 定义伪对数变换函数def pseudo_log(x): return






请到「今天看啥」查看全文