特征缩放
标准化
使数据服从标准正态分布,均值为0,方差为1。
做数据挖掘,pandas和numpy库肯定是要引入的,这里就省略了。
from sklearn.preprocessing import StandardScaler
import warnings
warnings.filterwarnings("ignore")
mydata = pd.DataFrame([[-1,2],[-0.5,6],[0,10],[1,18]])
sca = StandardScaler()
res = sca.fit_transform(mydata)
print(res)
StandardScaler: 缺失值保持不变;不能传入一维数组;比较常用,因为异常值对其影响小。
归一化
把数据缩放到一个特定的取值范围,默认[0,1]
from sklearn.preprocessing import MinMaxScaler
mydata = pd.DataFrame([[-1,2],[-0.5,6],[0,10],[1,18]])
# 归一化到[0,1]
sca = MinMaxScaler()
res = sca.fit_transform(mydata)
print(res)
# 归一化到其他范围
sca = MinMaxScaler(feature_range=(10,20))
res = sca.fit_transform(mydata)
print(res)
MinMaxScaler: 缺失值保持不变;不能传入一维数组;适用于数据范围需要转化到特定区间。
不破坏稀疏性的缩放
用每个数除以最大的绝对值,把数据缩放到[-1,1],0保持不变。
from sklearn.preprocessing import MaxAbsScaler
mydata = pd.DataFrame([[-1,2],[-0.5,6],[0,10],[1,18]])
sca = MaxAbsScaler()
res = sca.fit_transform(mydata)
print(res)
MaxAbsScaler: 适用于数据范围压缩到[-1,1],且不破坏数据的稀疏性。
减少异常值影响的缩放
使用的是中位数、四分位数范围(IQR),可以减小异常值、极端值的影响。
from sklearn.preprocessing import RobustScaler
mydata = pd.DataFrame([[-1,2],[-0.5,6],[0,10],[1,18]])
sca = RobustScaler()
res = sca.fit_transform(mydata)
print(res)
适用于异常值多、噪声多的情况。
缺失值处理
读取数据
mydata = pd.read_csv("xxx.csv",index_col=0)
mydata.head()
查看缺失值(空值)分布在哪些列
mydata.info()
查看缺失值的比例
mydata.Age.isnull().value_counts()
mydata.Age.isnull().value_counts(normalize = True)
填充缺失值
以下两种写法都可以,我个人偏好第二种。
mydata.Age = mydata.Age.fillna(mydata.Age.median())
mydata.Age.fillna(mydata.Age.median(), inplace=True)
复习一下中位数、平均值、众数的写法:
mydata.median() # 默认按列求
mydata.median(axis=1) # 按行求
mydata.median(numeric_only=True)
mydata.mean()
mydata.mode()
删除缺失值
df.dropna() # 默认删除带有空值的行
df.dropna(axis = 1) # 删除带有空值的列
df.dropna(inplace = True) # 直接修改原数据
df.dropna(how = ‘all’) # 只有所有值都为空时,才删除该行(列)