首页 > 编程知识 正文

数据校验算法,电子数据检验分析

时间:2023-05-04 21:48:07 阅读:183611 作者:2750

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

  先写入数据:

import pandas as pdimport numpy as npdf = 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(只要存在重复均不保留)。默认为firstinplace:表示是否在原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)

 

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

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。