三、从 Excel 到 Python 数据整理实例

本实例是通过采集工具从电商中搜索关键词“运动鞋”采集的实时数据集,如图 3-5-1所示。 图 3-5-1 “运动鞋”数据集
(一)缺失数据处理 采集的数据集由于某些原因可能有缺失,一般有两种处理方式:一是删除,即把含有缺失值的数据删除;另一种是填充,即把缺失的那部分数据根据上下文用某个值代替。具体步骤分别用 Excel 和 Python 进行演示,便于大家比较学习。 1. Excel 实现 在 Excel 中查找数据集空单元格的快捷方式是【Ctrl+G】,在弹出的对话框中选择“空值”(见图 3-5-2),确定就会把所有空值选中。具体步骤如下: (1)使用快捷方式【Ctrl+A】选中表格中要查找空值的单元格区域; (2)使用快捷方式【Ctrl+G】,选择“空值”项后确定; 图 3-5-2 选择“空值”
(3)最后通过定位条件把空值筛选出来; (4)空值筛选出来以后可以采取删除或填充处理。
2. Python 实现 在 Python 中直接调用 info()方法就会返回每一列的缺失情况。 (1)导入图 3-5-1 所示的数据,结果如图 3-5-3 所示。 图 3-5-3 导入数据 (2)调用 info()检查数据的缺失情况,结果如图 3-5-4 所示。 图 3-5-4 检查数据缺失情况
Python 中缺失值一般用 null 表示,从用 info()查找缺失值结果来看,“标签”列有 1 835个非 null 值,而其他列都是 2 010 个非 null 值,说明这一列有 175 个 null 值。 (3)使用 dropna()函数删除空值操作。 函数形式:dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)参数设置: axis:轴。0 或‘index’,表示按行删除;1 或‘columns’,表示按列删除。 how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。 thresh:非空元素最低数量,int 型,默认为 None。如果该行/列中,非空元素数量小于这 个值,就删除该行/列。 subset:子集,列表,元素为行或者列的索引。如果 axis=0 或者‘index’,subset 中元素为列的索引;如果 axis=1 或者‘column’,subset 中元素为行的索引。由 subset 限制的子区域,是判断是否删除该行/列的条件判断区域。 inplace:是否原地替换,布尔值,默认为 False。如果为 True,则在原 DataFrame 上进行 操作,返回值为 None。 删除空值后的结果如图 3-5-5 所示。 图 3-5-5 删除空值后的结果 (4)使用 fillna()函数对数据表的所有缺失值进行填充操作。 函数形式:fillna(value=None,method=None,axis=None, inplace=False,limit=None, downcast=None) 参数说明: value:用于填充的空值的值。 method:{'backfill','bfill','pad','fill',None},default None,定义填充空值的方法。pad/ ffill 表示用前面行/列的值,填充当前行/列的空值;backfill / bfill 表示用后面行/列的值,填 充当前行/列的空值。 axis:轴。0 或‘index’,表示按行删除;1 或‘columns’,表示按列删除。inplace:是否原地替换,布尔值,默认为 False。如果为 True,则在原 DataFrame 上进行操作,返回值为 None。 limit:int,default None。如果 method 被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果 method未被指定,在该 axis 下,最多填充前 limit 个空值(不论空值连续区间是否间断)。 downcast:dict,default is None,字典中的项为无,为类型向下转换规则。或者为字符串 “infer”,此时会在合适的等价类型之间进行向下转换,比如 float64 to int64 if possible。完成填充后数据行为 2010 行,如图 3-5-6 所示。 图 3-5-6 填充后的结果
(二)异常数据处理 异常值是指样本中的个别值,其数值明显偏离其余观测值。异常值也称为离群点,异常值的分析也称为离群点分析。在异常值处理之前需要对异常值进行识别,一般多采用单变量散点图或是箱线图来达到目的,利用图形来判断数值是否为正常值范围。异常值处理的常用方法有:删除含有异常值的记录、视为缺失值、平均值修正。 1. 简单统计量分析 可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。如客户年龄的最大值为 199岁,则该变量的取值存在异常。 2. 原则 如果数据服从正态分布,在 原则下,异常值被定义为一组测定值中与平均值的偏差超 过 3 倍标准差的值。在正态分布的假设下,距离平均值 之外的值出现的概率为,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。 3. 箱型图分析 箱型图提供了识别异常值的一个标准:异常值通常被定义为小于 或大于 的值。 称为下四分位数,表示全部观察值中有 1/4 的数据取值比它小; 称为上四分位数,表示全部观察值中有 1/4 的数据取值比它大; IQR 称为四分位数间距,是上四分位数 与下四分位数 之差,其间包含了全部观察值的一半。 箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达 25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性,如图 3-5-7 所示。 图 3-5-7 箱型图