Data Analysis 总结笔记:Data Cleaning

数据清洗是数据分析非常关键的一个步骤,也是一个必须的步骤。

这里记录了主要是记录如果利用 Python 来理解原始数据以及清洗数据。比如说如何处理缺失值,如何处理字段乱码,如何统一日期格式等等。


Handling Missing Value


对于某个字段内的缺失值,我们首先要分析一下为什么会出现缺失值:是采集数据的时候没有记录下来?还是因为这个数值本来就不存在(比如初婚年龄但有些人还是未婚等等)?通常根据以上问题的不同情况,我们对于处理缺失值有以下三种方法:

  1. 利用其它数据源补全缺失值。

    如果缺失值是因为记录不全而产生的,那么我们可以尽可能地找找其他数据源看看是否能收集到该缺失值的真实值。这样才能最大程度地还原数据的真实性。

  2. 移除缺失值。

    我们可以选择移除整个 variable 或者移除整个 sample。通常如果缺失值占比不多,建议移除 sample。

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
  1. 替代缺失值。

    如果当前 variable 为 numeric variable 则可以选用当前 variable 的均值替代缺失值;如果当前 variable 为 categorical variable 则可以选用当前 variable 的最常见值替代缺失值。

DataFrame.replace(to_replace=None, value=NoDefault.no_default, inplace=False, limit=None, regex=False, method=NoDefault.no_default)

Data Standardization


原始数据可能存在数值不同,单位不同,类型不同等等情况。我们需要对原始数据的不同数值进行统一。

  1. 统一变量值。

    原始数据某个字段里的一个数据可能存在多种表达形式。比如说 NY, New York, N.Y. 等等都是指代城市纽约。这时我们需要统一用使用一种形式来表达,将其他形式替换为统一形式。

  2. 不同单位转换数值。

    原始数据中某个变量的数据如果是使用不同的单位,我们还需要对不同单位的数值进行转换统一使用一个单位进行计量。

  3. 转换变量类型。

    我们可以利用 DataFrame.dtypes 查看各变量的类型。如果变量类型不合理,我们转换变量类型,比如说变量 price 当前类型为 object, 那我们可以将其转换为 float 方便后续分析。

    DataFrame.astype(dtype, copy=True, errors='raise')
    

Normalization


如果两个相关变量的数量级差距过大,比如说变量 A 的范围是 0-100,而变量 B 的范围是10000- 50000,这种差距在后续分析时量级大的变量就会对整体结果产生更大的影响,这种情况会进而影响分析的准确性。这种情况我们可以通过对数据进行归一化处理,降低某个变量对结果影响过大。

如果你在后续分析中需要用到假设数据为正态分布的统计方法,我们也可以通过归一化处理数据使其满足条件。

归一化的方法通常有以下三种:

  1. x*=x/max, 当前值除以当前变量的最大值,range[0,1]。

  2. x*=x-min/max-min,当前值减去当前变量的最小值除以当前变量的最小值减去当前变量的最大值, range[0,1]。

  3. x*=x-mean/sigma, 当前值减去当前变量的均值除以标准差,range 一般为 [-3 * sigma, 3 * sigma],也可能超过这个范围。


Bining


有时候我们会对数值型变量分组以增加预测模型的准确性,同时也可以更好地理解数据的分布。

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)

Dummy Variable


对于类别型变量,有时候我们可以将其变成 dummy variable,这样就能将类别型变量用于后续的回归分析中。比如说有一个类型型变量是 gender, 这样我们可以将其变成两个变量 gender_male & gender_female,数值用0,1表示。

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
posted @ 2022-02-09 17:54  yukiwu  阅读(57)  评论(0编辑  收藏  举报