Python数据标准化实例分析
在数据分析与建模中,数据预处理对于算法的效果有着很大影响。其中,数据标准化是一种常见的预处理方式。本文将详细介绍Python中数据标准化的实现过程,并通过两个实例对标准化的作用进行说明。
一、数据标准化的介绍
数据标准化也称为数据缩放,是对数值型数据进行预处理的一种方式。数据标准化的目标是将不同规模的数据进行统一处理,以便更好地进行数据分析与建模。
常见的数据标准化方式有两种,分别是Z-score标准化和Min-Max标准化。其中,Z-score标准化是将数据标准化为均值为0,标准差为1的分布,Min-Max标准化是将数据标准化为指定区间内的数值,通常为[0,1]或[-1,1]区间。
二、Z-score标准化的实现
Z-score标准化的数学公式为:
$$x' = \frac{x-\mu}{\sigma}$$
其中,$x$为原始数据,$\mu$为数据的均值,$\sigma$为数据的标准差,$x'$为标准化后的数据。
在Python中,可以使用scikit-learn库提供的preprocessing模块来进行Z-score标准化。以一组含有500个随机数的数据集为例,示例如下:
from sklearn import preprocessing
import numpy as np
x = np.random.random(500)
x_mean, x_std = x.mean(), x.std()
x_scaled = preprocessing.scale(x)
以上代码中,首先引入preprocessing模块和numpy库。将生成的随机数保存在变量x中,使用x.mean()和x.std()方法求出数据的均值和标准差,在调用preprocessing模块的scale()函数进行数据标准化。结果保存在变量x_scaled中,可以通过调用x_scaled.mean()和x_scaled.std()来验证标准化的效果。
三、Min-Max标准化的实现
Min-Max标准化的数学公式为:
$$x' = \frac{x-min(x)}{max(x)-min(x)}$$
其中,$x$为原始数据,$min(x)$和$max(x)$分别为数据集的最小值和最大值,$x'$为标准化后的数据,通常标准化后的数据分布在[0,1]或[-1,1]区间内。
在Python中,同样可以使用scikit-learn库提供的preprocessing模块来进行Min-Max标准化。以一组含有500个随机数的数据集为例,示例如下:
from sklearn import preprocessing
import numpy as np
x = np.random.random(500)
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x.reshape(-1, 1))
以上代码中,首先引入preprocessing模块和numpy库。将生成的随机数保存在变量x中,使用preprocessing模块的MinMaxScaler()函数创建一个空的标准化对象。接下来,调用fit_transform()方法对数据进行标准化,结果保存在变量x_scaled中。
四、实例分析
下面通过两个实例进一步说明数据标准化的作用以及标准化方法的选择。
1、实例一
假设有一个含有50条数据的体检指标数据集,数据的字段包括身高、体重和血压等,其中身高的单位为cm,体重的单位为kg,血压的单位为mmHg。数据集如下:
身高(cm) | 体重(kg) | 血压(mmHg) |
---|---|---|
170 | 70 | 110 |
160 | 65 | 130 |
175 | 75 | 120 |
... | ... | ... |
如果直接对数据进行建模,对于身高、体重和血压三个字段来说,数据的规模存在较大差异,建模的效果可能会受到影响。因此,需要对三个字段进行数据标准化,将不同规模的数据统一处理。
根据数据的分布情况,可以选择Z-score标准化或MinMax标准化,通常情况下,Z-score标准化可以用于正态分布的数据集,而MinMax标准化适用于数据值域在一定范围内的数据集。在这个例子中,因为血压数值存在负值,因此可以选择MinMax标准化。
下面给出标准化的Python代码:
import pandas as pd
from sklearn import preprocessing
data = pd.read_csv('data.csv')
min_max_scaler = preprocessing.MinMaxScaler()
data[['身高', '体重', '血压']] = min_max_scaler.fit_transform(data[['身高', '体重', '血压']])
以上代码中,首先使用pandas库的read_csv()方法导入数据,将数据保存在data变量中。接下来,使用preprocessing模块的MinMaxScaler()方法创建一个标准化对象,用于对数据进行标准化。最后,调用fit_transform()方法对数据集中的'身高'、'体重'和'血压'三个字段进行标准化,结果保存在相应的列中。最终标准化后的数据集如下:
身高 | 体重 | 血压 |
---|---|---|
0.5454545 | 0.4117647 | 0.16666667 |
0.0909091 | 0.2352941 | 0.5 |
0.8181818 | 0.6470588 | 0.33333333 |
... | ... | ... |
可以看到,标准化后的数据集中所有数据的值都在[0,1]的区间内,数据集的规模得到了统一处理,可以用于后续的数据建模。
2、实例二
假设有一个含有100个随机数的数据集,数据的数值范围在[-10000,10000]之间,数据集如下:
数据 |
---|
23 |
-500 |
1000 |
... |
如果直接对数据进行分析,数据大小差异较大,对于分析结果的精度有影响。因此,需要对数据进行标准化处理,使得数据更加统一。
这个例子中,由于数据分布不一定满足正态分布或数值分布在一定范围内等条件,因此可以考虑使用Z-score标准化的方法。下面给出标准化的Python代码:
import numpy as np
from sklearn import preprocessing
x = np.random.randint(-10000, 10000, 100)
x_scaled = preprocessing.scale(x)
以上代码中,首先使用numpy库生成一个含有$100$个不同随机数的数组$x$,并将该数组保存在变量$x$中。接下来,使用preprocessing模块的scale()函数对数组$x$进行标准化,保存标准化后的结果在$x_scaled$变量中。
标准化后的数据集如下:
数据 |
---|
-0.5954398 |
-0.7569353 |
-0.1539672 |
... |
可以看到,标准化之后的数据值都分布在均值为0,标准差为1的区间内,规模也得到了缩放,方便后续的分析。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python数据标准化的实例分析 - Python技术站