当前位置:   article > 正文

【Python】数据分析.pandas数据预处理.标准化数据_pandas标准化数据

pandas标准化数据


数据分析.pandas数据预处理.标准化数据

不同特征之间往往具有不同的量纲,由此所造成的数值间的差异可能很大,在涉及空间距离计算或梯度下降法等情况的时候不对其进行处理会影响到数据分析结果的准确性。为了消除特征之间的量纲和取值范围差异可能会造成的影响,需对数据进行标准化处理,也可以称为规范化处理。

一、离差标准化数据

离差标准化是对原始数据的一种线性变换,结果是将原始数据的数值映射到[0,1]区间上。
X ∗ = X − m i n m a x − m i n X^*=\frac{X-min}{max-min} \quad X=maxminXmin
max为样本数据的最大值,min为样本数据的最小值,max-min为极差。

import pandas as pd
import numpy as np

# 读取数据
detail = pd.read_csv('data/detail.csv',index_col=0,encoding='gbk')

# 自定义离差标准化函数
def minmaxscale(data):
    data=(data-data.min())/(data.max()-data.min())
    return data

# 对菜品订单表售价和销量做离差标准化
data1 = minmaxscale(detail['counts'])
data2 = minmaxscale(detail['amounts'])
data3 = pd.concat([data1,data2],axis=1)

print('离差标准化之前销量和售价数据前五行为:\n',detail[['counts','amounts']].head())
print('离差标准化之后销量和售价数据前五行为:\n',data3.head())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述
通过离差标准化前后的对比,可以发现原先数值与映射的值相对应;而销量对应列变为了0,是因为只要出现在订单表上的数据都是同一个订单点的菜,最少份数是1,当数据和最小值相等时就会变为0;切菜品价格数据进行离差标准化后数之间的差值很小,是由于数据极差过大。

缺点:
当数据的极差过大时,离差标准化趋于0;
当数据发生更改后要重新确定[min,max]范围,以免引起系统报错。

返回顶部


二、标准差标准化数据

标准差标准化也叫零均值标准化或z分数标准化,通过该方法处理的数据均值为0,标准差为1。
X ∗ = X − X ‾ δ X^*=\frac{X-\overline{X}}{\delta} \quad X=δXX
X ‾ 为 原 始 数 据 的 平 均 值 , δ 为 原 始 数 据 的 标 准 差 。 \overline{X}为原始数据的平均值,\delta为原始数据的标准差。 Xδ

##自定义标准差标准化函数
def StandardScaler(data):
    data=(data-data.mean())/data.std()
    return data
##对菜品订单表售价和销量做标准化
data4=StandardScaler(detail['counts'])
data5=StandardScaler(detail['amounts'])
data6=pd.concat([data4,data5],axis=1)
print('标准差标准化之前销量和售价数据为:\n',
    detail[['counts','amounts']].head())
print('标准差标准化之后销量和售价数据为:\n',data6.head())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
通过对比可以发现,标准差标准化后的数值区间不限于[0,1],还会存在负值,同时保留了数数据的分布情况。

返回顶部


三、小数定标标准化数据

小数定标标准化是通过移动数据的小数位数,将数据映射到[-1,1]区间上,移动的小数位数取决于数据绝对值的最大值。
X ∗ = X 1 0 k X^*=\frac{X}{10^k} \quad X=10kX
k取决于数据绝对值的最大值。

##自定义小数定标差标准化函数
def DecimalScaler(data):
    data=data/10**np.ceil(np.log10(data.abs().max()))
    return data
##对菜品订单表售价和销量做标准化
data7=DecimalScaler(detail['counts'])
data8=DecimalScaler(detail['amounts'])
data9=pd.concat([data7,data8],axis=1)
print('小数定标标准化之前的销量和售价数据:\n',
    detail[['counts','amounts']].head())
print('小数定标标准化之后的销量和售价数据:\n',data9.head())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
根据小数定标标准化数据后,我们进行回头检测,abs()查出数据绝对值的最大值为178三位数,再使用np.log10()得到10为底的对数,最后用np.ceil()得出向上取整的最小整数3.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

返回顶部


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号