关闭

『Python思考』数据检查和校验的函数_不断更新_不断改进

标签: python思考Python学习Python工作数据挖掘
902人阅读 评论(0) 收藏 举报
分类:

        注:如有疑问或好的建议,可以在评论区评论


        最近的工作经常跟数据打交道,在工作的过程中也渐渐明白到数据是非常容易出错的,其中一些方面是因为从别人那里接收到的数据本身就有问题,要么是数据出错、要么是格式不符合我们的要求,后者只需要把我们要求的格式跟对方说明白就可以了,但是说起来容易做起来却很难,所以实际上往往还是要自己来进行数据预处理,而且我们进行数据预处理后也要对数据进行检查和校验,以免在这一步就出错了;而前者则要复杂得多,数据出错的原因是多方面的,也许只是对方在录入数据的时候多写了几个空格、或者把英文大写写成小写亦或其它种种原因,在此不赘述。

        另一方面则是我们写代码对数据进行各种处理的时候出现问题,要么是不小心写错了代码,如把要处理的数据的变量名写错成另一数据,要么是使用的函数得到的结果跟我们想要的并不一样,要么是对数据处理的思路出了问题,凡此种种均都会对数据的正确性造成破坏。

        因此数据检查和校验是非常重要的事。

        在网上找了找,发现 python 中好像并没有相关的库,但是由于使用 python 来进行数据分析和数据挖掘的需求越来越大,因此对于数据检查和校验的需求也越来越大,所以准备写一个用于数据检查和校验的简单的函数,如果以后随着功能越来越强大则会再改成类、甚至是到时有足够能力的话,则把它变为一个开源的库。

        参考资料或参考资料备用:

        一组python用于验证数据的函数

        python使用schema库进行数据校验



        思考区:

        # 本函数目前主要针对 pandas 的 DataFrame 对象,在后期将会陆续完善其它数据类型

# 考虑到本函数的输出信息量会比较大,因此应当设定输出信息量的级别。级别按重要性从大到小排列,级别越低输出的信息越少,但输出的信息越重要、关键,而且每个级别的输出信息都是向下兼容的。如级别二的输出信息会包括级别一的全部输出信息。

        本函数主要分为两大部分:数据检查和数据验证

        1、数据检查:

        1.1、数据的类型

        如果数据类型跟我们想要的不一样,那么毫无疑问是数据有问题,所以应该最优先检验

        1.2、数据元素的类型

        有的时候数据元素的类型也非常重要,如 DataFrame 对象中的每一列中的每个数据类型是不是我们想要的也是需要验证的,如果发现类型不对,那毫无疑问也是数据出了问题

        1.3、验证读取到的中文数据是不是乱码

由于 python2.X 对中文的支持并不好,因为读取中文数据往往会出现乱码,也往往很让人头痛,所以这一步的检查是必需的


        2、数据校验:

        2.1、统计数据中的空行数量

        空行:指该行上所有列的值均为 NaN ,而至少有一列的值不为 NaN 则称为 数据缺失行(暂定)

一般来说,我们的数据集是不应该有空行的,空行对我们的意义并不大(至少目前还没遇到过这种情况)也就意味着如果出现了空行,极有可能是数据出问题了。

        2.2、数据缺失行的数量

        一般来说,数据集出现缺失值是很正常的事,但是为什么还是要统计其数量呢?一是为了避免在写代码的时候由于手抖,将本来是将 NaN 赋值给某个数的,但却变成了赋值为某一整列了;二是为了对整个数据集有个大概的概念,便于自己对整个数据集的了解(当然,如果将其可视化的话,效果会更好,所以在后期将会加上这个功能)


        代码区:

def check_data(data):
    """
    检查和校验数据
    """
    try:
        print "数据:", data

        print "数据类型为:", type(data)

        # 求数据长度
        if isinstance(data, int) or isinstance(data, float):
            print "这是整数或浮点数, 没有长度"
        else:
            print "数据长度为:", len(data)
    except:
        print "遇到未知错误!"

    if isinstance(data, pd.DataFrame):
        print data.describe()
        for i in data:
            print "这是%s列" % i, data[i]
            print data[i].sum()

    print "数据检查函数运行结束"
    print "-" * 70







            

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:51089次
    • 积分:1526
    • 等级:
    • 排名:千里之外
    • 原创:106篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    最新评论