数据分析 数据分析——数据校验 数据校验 很多时候在数据分析之前,我们需要对样本进⾏校验,以确定样本的价值。 先写⼊数据: 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⽅法的话,请查看《》 2时间跨度检验 时间跨度检验 很多样本的时间数据并不是以datatime64类型存储的,此时我们得先进⾏"数据类型修改" 详见:《》的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]) r