登录
首页大数据时代数据处理中,偏态数据如何正态化?
数据处理中,偏态数据如何正态化?
2020-07-17
收藏

在数据处理过程中,经常会遇到偏态数据。我们都知道数据整体服从正态分布,那样本均值和方差则相互独立。因此大家都会希望数据事成正态分布的,但是现实情况却是:大多数情况下,数据都是偏态分布的,这时候就需要我们将偏态数据正态化。今天,小编跟大家分享的就是将偏态数据正态化的处理方法,希望对大家研究和学习偏态数据有所帮助。

一、正态分布和偏态分布

首先我们先来了解一下什么是正态分布,什么是偏态分布。

由图中可知,正态分布,两头低,中间高,整个形态是对称钟形的一个分布的状态。大量连续数据测量时,我们最希望的就是数据可以成这种状态,也就是正态分布,一个标准的正态分布是u(均值)=0.σ(标准差)=1.

横坐标代表随机变量X的一个取值,在均值(u=0)附近概率密度最大,越偏离均值,概率密度减小,不在(u-3σ,u+3σ)范围内的数据就属于统计学意义上的异常值了。

根据图中可以看出,偏态分布,分为两种情况,左偏又叫负偏态,以及右偏又叫正偏态,也可以用偏度来表示,偏度>0.也就是频数分布的高峰向左偏移,呈右(正)偏态分布;偏度<0.即频数分布的高峰向右偏移,呈左(负)偏态分布;|偏度|>1.呈高度偏态,0.5<|偏度|<1.呈中等偏态。

二、检验数据是否服从正态分布


rom scipy.stats import norm
sns.distplot(train['SalePrice'],fit=norm)
#均值和方差
(mu,sigma) = norm.fit(train['SalePrice'])
print('\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],
            loc='best')
plt.ylabel('Frequency')
plt.title('SalePrice distribution')

fig =plt.figure()
res = stats.probplot(train['SalePrice'], plot=plt)
plt.show()


三、偏态数据处理

如果检测到数据是呈偏态分布,我们需要将其其变换为正态分布,常用的几种变换方式为:

1、对数变换:即将原始数据X的对数值作为新的分布数据,适用于相乘关系的数据、高度偏态的数据

2、平方根变换:即即将原始数据X的平方根作为新的分布数据。适用于泊松分布(方差与均数近似相等)的数据、轻度偏态的数据

3、倒数变换1/x:即将原始数据X的倒数作为新的分析数据。适用于两端波动较大的数据

4、反正弦变换:即将原始数据X的平方根反正弦值做为新的分析数据。适用于百分比的数据、中度偏态的数据


#用对数化解决偏态 log(1+x)
train['SalePrice'] = np.log1p(train['SalePrice'])
sns.distplot(train['SalePrice'],fit=norm)
(mu, sigma) = norm.fit(train['SalePrice'])
print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))

#Now plot the distribution
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],
            loc='best')
plt.ylabel('Frequency')
plt.title('SalePrice distribution')

#Get also the QQ-plot
fig = plt.figure()
res = stats.probplot(train['SalePrice'], plot=plt)
plt.show()


数据分析咨询请扫描二维码

客服在线
立即咨询