1.对数据进行类型转化
import pandas as pd
s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
s.astype(float, errors='ignore')------------------------可以将s转化为float类型,对于不能正常转化的值可以忽略掉
pd.to_numeric(s, errors='coerce')---------------------可以将s中的值转化为数字,不能转化的将会以NAN来代替
2.处理重复数据
df.drop_duplicates()去掉重复数据
df.drop_duplicates('column1', keep='last')去掉重复数据,但有条件限制:如果数据重复,保留column1字段中排在后面的那一个
3.判断缺失数据
s.isna()查看是否有缺失数据
4.填补缺失数据
.fillna(method=' '),其中参数method可取:
pad/ffill:用前一个非缺失值去填充该缺失值
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值(缺省默认这种方式)
5.填补空缺的数据如果遵循某种规律的话,可以采用深度学习的算法进行聚类、回归等方法找到规律,根据规律填缺失值。
6.特征数值化
如果是离散的值,可以通过特征与数值直接转换,比如df.replace({"N": 0, 'Y': 1})将N转化为0,将Y转化为1;
可以用方法进行转化: from sklearn.preprocessing
import LabelEncoder
le = LabelEncoder()
le.fit_transform(df['hypertension']);也可以fit()+trensform() 两种结果一样---------(fit对每种进行标记-标签名指原来的值.get_feature_names() ,transform根据标记对每一个进行转换);
7.特征二值化
pm25['bdays'] = np.where(pm25["Exposed days"] > pm25["Exposed days"].mean(), 1, 0)------------满足不等式bdays的值为1,不满足为0;
from sklearn.preprocessing
import Binarizer
bn = Binarizer(threshold=pm25["Exposed days"].mean())分为大于均值的和小于均值的两种
result = bn.fit_transform(pm25[["Exposed days"]])对两种进行归一化
等价于binarize(pm25[['Exposed days']], threshold=pm25['Exposed days'].mean());
8One-hot编码
pd.get_dummies(data):有多少种不同的值就会有多少个标签
对color这列进行编码,并去掉第一种状态,并合并到原数据中:df_dum = pd.get_dummies(persons['color'], drop_first=True) ,persons.merge(df_dum, left_index=True, right_index=True);
size_mapping = {'XL': 3, 'L': 2, 'M': 1}, df['size'] = df['size'].map(size_mapping);
from sklearn.preprocessing ;import OneHotEncoder ohe = OneHotEncoder() ;cl = ohe.fit_transform(df[['classlabel']]);
9.特征离散化
pd.cut(ages['years'],3)分成三部分,也就是三种离散特征;
pd.cut(ages['years'], 3, labels=[0, 1, 2])同时为每种特征添加标签;
pd.cut(ages2['years'], bins=[9, 30, 50, 300], labels=['Young', 'Middle', 'Senior'])分成指定的三部分范围中并添加标签;
from sklearn.preprocessing import KBinsDiscretizer
kbd = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform') # ④
trans = kbd.fit_transform(ages[['years']]) 对数据分成三类并对离散值转换
rnd = np.random.RandomState(42), X = rnd.uniform(-3, 3, size=100)随机生成-3——3之间的100个数
10.数据规范化
StandardScaler().fit_transform(iris.data)可以对数据进行标准化,把数据转化成正态分布;
np.mean(iris_std, axis=0)求每一列的均值;
MinMaxScaler().fit_transform(iris.data),数据中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,归一化也就是;
from sklearn.preprocessing import RobustScaler, MinMaxScaler
robust = RobustScaler()
robust_scaled = robust.fit_transform(X)
对数据的中心和范围使用更有鲁棒性的估计;
归一化
from sklearn.preprocessing import Normalizer
norma = Normalizer() # ③
norma.fit_transform([[3, 4]])
norma_max = Normalizer(norm='max'),
norma1 = Normalizer(norm='l1'),其中若为l1时,每个样本(每行)的值除以每个样本(每行)各值的绝对值之和
若为l2时,变换后每个样本(每行)的各维特征的平方和为1
若为max时,样本各个特征值除以样本中特征值最大的值
11.特征提取
线性回归中coef_和intercept_都是模型参数,即为w,coef_为w1到w4,intercept_为w0;
import numpy as np
from mlxtend.feature_selection import ExhaustiveFeatureSelector as EFS
efs = EFS(RandomForestRegressor(),min_features=1,max_features=5,scoring='r2',n_jobs=-1) # ⑥
efs.fit(np.array(mini_data),y_train)
mini_data.columns[list(efs.best_idx_)]
from mlxtend.feature_selection import ExhaustiveFeatureSelector
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
from sklearn.metrics import roc_auc_score
feature_selector = ExhaustiveFeatureSelector(RandomForestClassifier(n_jobs=-1), # ○11
min_features=2,
max_features=4,
scoring='roc_auc',
print_progress=True,
cv=2)
features = feature_selector.fit(np.array(train_features.fillna(0)), train_labels)
filtered_features= train_features.columns[list(features.best_idx_)]
递归特征消除:递归特征消除的主要思想是反复构建模型,然后选出最好的(或者最差的)特征(根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历了所有的特征;
根据某中检验方法,比如chi2 啦,选择k个最高分数的特征,属于单变量特征选择的一种,可以看做是一个估计器的预处理步骤;
from sklearn.feature_selection import RFE
rfe = RFE(RandomForestRegressor(), n_features_to_select=5) # ○12
rfe.fit(np.array(mini_data),y_train)
rfe.ranking_
VarianceThreshold(threshold=(0.8 * (1 - 0.8))),过滤器法的一种,去掉那些方差没有达到阈值的特征。默认情况下,删除零方差的特征;
from xgboost import XGBClassifier ,model = XGBClassifier() , model.fit(X,y) ,model.feature_importances_,得到特征重要性
12.特征抽取
主成分分析:from sklearn.decomposition import PCA ,import numpy as np ,pca = PCA()-----eg:pca = PCA(.95) , lower_dimensional_data = pca.fit_transform(mnist_data);
LDA:from sklearn.discriminant_analysis ,import LinearDiscriminantAnalysis as LDA, from sklearn.linear_model import LogisticRegression, lda = LDA(n_components=2) ,
X_train_lda = lda.fit_transform(X_train_std, y_train);
逻辑回归:lr = LogisticRegression() lr = lr.fit(X_train_lda, y_train);