zoukankan      html  css  js  c++  java
  • 数据分析——数据校验

      很多时候在数据分析之前,我们需要对样本进行校验,以确定样本的价值。

      先写入数据:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'一班':[90,80,66,75,99,55,76,78,98,None,90],
                       '二班':[75,98,100,None,77,45,None,66,56,80,57],
                       '三班':[45,89,77,67,65,100,None,75,64,88,99]})

    1完整性校验

    # 判断是否为缺失值(空值)
    df.isnull()

    # 统计出每一列的缺失值数目
    df.isnull().sum()

    # 每一列缺失比例
    df.isnull().sum()/df.shape[0]
    # 判断非空值的数目
    df.notnull().sum()

      笔记:这里也可以用到describe方法,如下:

    # 使用describe方法查看数据的完整性,统计出了非空值的数目
    df.describe().iloc[0,:]

      忘了describe方法的话,请查看《Python之Pandas知识点

    2时间跨度检验

      很多样本的时间数据并不是以datatime64类型存储的,此时我们得先进行“数据类型修改”

      详见:《Python之Pandas知识点》的4.3数据修改


      之后进行最大最小相减就OK了。

    print(date.max()-date.min())

    3重复检验

    # 二班和四班是相同的
    df1 = pd.DataFrame({'一班':[90,80,66,90,99,55,76,90,98,None,90],
                       '二班':[75,98,100,75,77,45,None,75,56,80,57],
                       '三班':[45,89,77,45,65,100,None,45,64,88,99],
                       '四班':[75,98,100,75,77,45,None,75,56,80,57]})

    3.1样本重复检验(行)

    DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

    • subset:表示以这几个特征为基础,对整体样本进行去重。默认为使用所有特征
    • keep:表示保留第几个重复的样本。只允许填入first(保留第一个),last(保留最后一个),False(只要存在重复均不保留)。默认为first
    • inplace:表示是否在原DataFrame上进行操作,会改变原数据。默认为False
    # 删除重复样本(行)
    df1.drop_duplicates()

    # 计算样本重复率
    (df1.shape[0] - df1.drop_duplicates().shape[0])/df1.shape[0]

    3.2特征重复检验(列)

      特征重复检验相比样本重复检验要麻烦一点,因为没有现成的函数可调用。

      需要用到相似度的概念,如下:

    • pearson相似度
    • spearman相似度
    • kendall相似度
    # 使用pandas的方法:DataFrame.corr(method='pearson')
    asso = df1.corr()
    # 输出asso,看一下是怎样的先
    print(asso)

      不难看出,这是一个对称矩阵,所以我们只需要判断右上半角的数据便可。

    # 输出应删除的columns,1.0可根据需求改动
    delCol = []
    for i in range(len(asso)):
        for j in range(i+1,len(asso)):
            if asso.iloc[i,j] == 1.0:
                delCol.append(asso.columns[j])
            
    print(delCol)

    最后,附上一段 ♦特征重复检验♦ 的自定义代码:

    # 输入DataFrame,输出特征重复的列名,可直接复制调用
    def drop_features(data,way = 'pearson',assoRate = 1.0):
        '''
        此函数用于求取相似度大于assoRate的两列中的一个,主要目的用于去除数值型特征的重复
        data:数据框,无默认
        assoRate:相似度,默认为1
        '''
        assoMat = data.corr(method = way)
        delCol = []
        length = len(assoMat)
        for i in range(length):
            for j in range(i+1,length):
                if asso.iloc[i,j] >= assoRate:
                    delCol.append(assoMat.columns[j])
        return(delCol)

      效果如下:

    drop_features(df1)

      是不是超好用,巨方便~~~不谢

    一个佛系的博客更新者,随手写写,看心情吧 (っ•̀ω•́)っ✎⁾⁾
  • 相关阅读:
    26个Jquery使用小技巧
    jQuery之浮动窗口
    Visual Studio 2010 TFS指南
    Python
    HTML5小菜
    记一次重构经历【转载】
    Python学习笔记
    Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列
    搜索分词实现
    UML概要
  • 原文地址:https://www.cnblogs.com/WoLykos/p/9368743.html
Copyright © 2011-2022 走看看