在统计分析领域,进行数据处理之前,预处理工作的重要性不言而喻,也是大家提问比较集中的问题之一。今天针对数据预处理流程做出整理,每一部分都做了代码示例和详细的注释,大家可以参考。
一、数据预览importpandasaspdimportnumpyasnpdata=pd.read_csv(path,sep=,,header=0,encoding=gbk,usecols=[col1,col2,col3])#导入数据,把path改成文件路径;数据中有中文的话,就用encoding=gbk,没有中文的话就用encoding=utf-8;usecols是可以让我们选择哪几列data.head()#查看前五行data.info()#查看各字段的信息,其中包含行数、是否为空、字符类型data.shape#查看数据集行列分布,几行几列data.describe()#查看数据的描述性统计,其中包括总数、均值、标准方差、最小最大、第一四分位数、中位数
检查是否有重复值:
d=0foriintrain.duplicated():ifi!=False:d+=1print("d:",d)二、数据清洗2.1缺失值处理
data.isnull()#元素级别的判断,把对应的所有元素的位置都列出来,元素为空或者NA就显示True,否则就是Falsedata.isnull().any(axis=0)#查看各列是否存在空值,True表示有空值,axis=0代表是查看列,axis=1是查看行是否存在控制data.isnull().any(axis=0).sum()#计算含有空值的列数,若把axis=0改成axis=1,则是计算含有空值的行数data[column_name].isnull().sum()#将某一列中为空或者NA的个数统计出来,把column_name改成字段名
缺失值的处理我们在课上讲过,有三种常用的方法:删除、替换、插补。
2.11删除法删除法一般是删除观测样本或者量,法适用于某些变量有较严重缺失,但总体的样本量够大,并且删除个别样本对研究目标影响不大的情况。在kaggle中,处理缺失数据有一个这样的建议条件:如果数据的缺失少于15%,并且该变量未见有关键作用,就可以删除。
deldata[column_name]#删除某一列data[column_name].dropna()#删除某一行为空值或者NA的元素data.drop(data.columns[[0,1]],axis=1,inplace=True)#删除第1,2列,inplace=True表示直接就在内存中替换了,不用二次赋值生效。data.dropna(axis=0)#删除带有空值的行data.dropna(axis=1)#删除带有空值的列2.12替换法
缺失值所在变量是数值型时,就可以考虑用均值来替换;为非数值型变量时,通常可以考虑使用中位数、众数来替换。
data[column_name]=data[column_name].fillna(num)#将该列中的空值或者NA填充为num.其中num是某位数字,这个代码用于用数字进行替换。data[column_name][data[column_name].isnull()]=data[column_name].dropna().mode().values#如果该列是字符串的,就将该列中出现次数最多的字符串赋予空值,mode()函数就是取出现次数最多的元素data[column_name].fillna(method=pad)#使用前一个数值替代空值或者NA,就是NA前面最近的非空数值替换data[column_name].fillna(method=bfill,limit=1) #使用后一个数值替代空值或者NA,limit=1就是限制如果几个连续的空值,只能最近的一个空值可以被填充。data[column_name].fillna(data[column_name].mean())#使用平均值进行填充data=data.fillna(data.mean())#将缺失值全部用该列的平均值代替,这个时候一般已经提前将字符串特征转换成了数值。2.13插补法
使用删除法和替换法不可避免的会存在信息损失的问题。并且多数时候数据结构也会发生一些变动,所以有时会导致产生有偏的结果。这时候就可以考虑用插补法。常用的插补法有回归插补,多重插补、拉格朗日插补法等,要根据情况而选择插补。常用的拉格朗日插值法可以参考: