偏斜数据是指分布高度不均匀的数据:当变量数据显示为直方图时,大部分数据点要么聚集在分布的左侧,长尾向右延伸(右偏斜),要么反之(左偏斜),或呈现更复杂的偏斜模式。偏斜数据对可视化,特别是热力图的绘制,提出了很大的挑战。通常情况下,人们会使用对数变换来处理这些数据。然而,经典对数变换无法处理零或负数,而伪对数变换则能够更好地处理和可视化这些数据。
为什么使用伪对数?
经典对数对零和负值无定义,这限制了其在许多应用中的使用。相比之下,伪对数(Pseudo-Logarithm)修正了经典对数的这一限制:它对所有实数都有定义,对于大绝对值使用带符号的对数,并在底数趋近于零时平滑过渡到零。
以10为底的伪对数(pseudo-log10)的定义是:
在下面的代码和图中,x轴上的值通过伪对数10变换映射到y轴上,用蓝线表示。相比之下,经典的对数10变换则用黑线绘制。
import numpy as np
import matplotlib.pyplot as plt
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))
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()
该图展示了伪对数变换的一些良好特性:
类似地,任何底数为
b
的伪对数(伪对数
b
)可定义如下。
伪对数
b
(x) 具有以下性质:
数据可视化中的伪对数
对数变换
是处理广泛分布数据的常用方法。它将
数据转换为更规范的分布
,从而更容易可视化。我们先看一下对数变换和伪对数变换对分布的影响(没有找到合适的数据,下面数据是生成的):
import numpy as np
import matplotlib.pyplot as plt
data = np.random.exponential(scale=2, size=1000)
def pseudo_log(x):
return