zoukankan      html  css  js  c++  java
  • 数据预处理函数

    下面列举一些数据预处理的函数,方便以后查看,本人菜鸟一枚,如有不正之处请予以更正。

    1 train.head(5)     #显示前5行数据
    2 train.tail(5)     #显示后5行
    3 train.columns     #查看列名
    4 train.info()      #查看各字段的信息
    5 train.shape       #查看数据集行列分布,几行几列
    6 train.describe()  #查看数据的大体情况

    输出每个列丢失值也即值为NaN的数据和,并从多到少排序:
     1 total = train.isnull().sum().sort_values(ascending=False)
     2 print(total)
     3 结果:
     4 Cabin          687
     5 Age            177
     6 Embarked         2
     7 Fare             0
     8 Ticket           0
     9 Parch            0
    10 SibSp            0

    对缺失数据的处理有很多方法,如《机器学习实战》里提到:

    使用可用特征的均值来填补缺失值;
    使用特殊值来填补缺失值,如-1;
    忽略有缺失值的样本;
    使用相似样本的均值添补缺失值;
    使用另外的机器学习算法预测缺失值。
     1 #使用中位数填补
     2 train['Fare'] = train['Fare'].fillna(train['Fare'].median())
     3 
     4 使用平均数填补
     5 train['Age'] = train['Age'].fillna(train['Age'].mean())
     6 
     7 #使用出现次数最多的值填补
     8 train.product_type[train.product_type.isnull()]=train.product_type.dropna().mode().values
     9 
    10 #去掉一列
    11 train = train.drop(['Cabin'], axis = 1)
    12 
    13 #去掉这个特征为空的行
    14 #当然后面可以加上inplace=True表示直接就在内存中替换了不用再赋值个train_new,但是本人多次删除掉几个行,发现有问题时又需要重新建立已经分析好的train,很浪费时间,个人认为还是重新开辟一个比较好
    15 train_new = train.drop(train[train['Embarked'].isnull()].index)
    16 
    17 #返回已经去掉重复行的数据集
    18 train.drop_duplicates()
    
    
     1 #统计某一列中各个元素值出现的次数
     2 train['MSSubClass'].value_counts()
     3  #
     4 #列出数据的偏斜度
     5 train['MSSubClass'].skew()
     6 
     7 #列出数据的峰度
     8 train['MSSubClass'].kurt()  
     9 
    10 #计算两个列的相关度
    11 train['LotFrontage'].corr(train['LotArea'])
    12 
    13 #观察两个列的值的二维图
    14 x = 'GrLivArea';y = 'SalePrice'
    15 data = pd.concat([train[y], train[x]], axis=1)
    16 data.plot.scatter(x=x, y=y, ylim=(0,800000));#这里800000为y的最大值
    17 
    18 #计算所有特征值每两个之间的相关系数,并作图表示。
    19 corrmat = train.corr()#得到相关系数
    20 f,ax = plt.subplots(figsize = (12,9))
    21 sns.heatmap(corrmat, vmax = .8, square = True)#热点图
    22 
    23 #取出相关性最大的前十个,做出热点图表示
    24 k = 10 #number of variables for heatmap
    25 cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
    26 cm = np.corrcoef(train[cols].values.T)
    27 sns.set(font_scale=1.25)
    28 hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f',     annot_kws={'size': 10}, yticklabels=cols.values,    xticklabels=cols.values)
    29 plt.show()
     1 #浮点型数值转换为整型
     2 train['Age']=train['Age'].astype(int)
     3 
     4 #字符串的替换--映射
     5 train['MSZoning']=train['MSZoning'].map({'RL':1,'RM':2,'RR':3,}).astype(int)
     6 train['Embarked'] = train['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)
     7 #一般建议将map拿出来
     8 title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}
     9 train['Title'] = train['Title'].map(title_mapping)
    10 train['Title'] = train['Title'].fillna(0)
    11 
    12 #将字符串特征列中的内容分别提出来作为新的特征出现,表现为0、1。
    13 train= pd.get_dummies(houseprice)
    14 
    15 #将连续型特征值分块,每一块用数字标识
    16 train.loc[ train['Fare'] <= 7.91, 'Fare'] = 0
    17 train.loc[(train['Fare'] > 7.91) & (train['Fare'] <= 14.454), 'Fare'] = 1
    18 train.loc[(train['Fare'] > 14.454) & (train['Fare'] <= 31), 'Fare']   = 2
    19 train.loc[ train['Fare'] > 31, 'Fare'] = 3
    20 train['Fare'] = train['Fare'].astype(int)
    
    
     1 下面这个数值转换是将数值进行log计算,使分布的数值显常态
     2 train['SalePrice'] = np.log(train['SalePrice'])
     3 
     4 而有时这样的log不可行,就需要使用log(x+1)来 处理,至于原因请点击链接
     5 train["SalePrice"] = np.log1p(train["SalePrice"])
     6 
     7 #将偏斜度大于0.75的数值列log转换,使之尽量符合正态分布。
     8 skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) #compute skewness
     9 skewed_feats = skewed_feats[skewed_feats > 0.75]
    10 skewed_feats = skewed_feats.index
    11 all_data[skewed_feats] = np.log1p(all_data[skewed_feats])

    标准化归一化概念不再赘述,实际使用时最主要的还是要了解什么时候需要标准化,什么时候用归一化,还需要清楚当前数据适合什么标准化方式等等。
    在sklearn.preprocessing 介绍的标准化方式有:
    1 1. preprocessing.scale()、preprocessing.StandardScaler(),使数据集呈现标准正态分布,即mean = 0,且标准差std = 12 2. MinMaxScaler 、MaxAbsScaler,前者使数据集分布在[0,1],后者分布在[-1,1]。这种方式通常在(1) 特征的标准差较小 (2) 可以使稀疏数据集中的0值继续为0,这两种情况下使用。
    3 3. preprocessing.QuantileTransformer(),将数据映射到[0,1]之间均匀分布,会破坏原数据之间的相关特性。
    4 4. 归一化方式:preprocessing.normalize(),将样本缩放成单位向量,(1)需要使用二次方程,比如点积或者其他核方法计算样本对之间的相似性(2)常用于文本分类和内容聚类的向量空间模型的基础。

    删除特别大的‘血糖’异常值
    1 train.drop(train.index[[i for i in train.index if train.iloc[i,columns-1]>30]],inplace=True)
    2 合并数据集
    3 train2 = pd.concat([train, test], axis=0)







    参考:https://blog.csdn.net/weixin_42029738/article/details/80257888


  • 相关阅读:
    XMPP协议之消息回执解决方案
    使用js在网页上记录鼠标划圈的小程序
    数据库SQL,NoSQL之小感悟
    MongoDB安装与使用体验
    缓存遇到的数据过滤与分页问题
    Tomcat shutdown执行后无法退出进程问题排查及解决
    Apache Ignite之集群应用测试
    Ignite性能测试以及对redis的对比
    学习AOP之深入一点Spring Aop
    学习AOP之认识一下Spring AOP
  • 原文地址:https://www.cnblogs.com/51python/p/10183696.html
Copyright © 2011-2022 走看看