数据治理——数据清洗

数据清洗(Data Cleaning)是大数据处理中的一个重要步骤,它涉及到识别并纠正或删除错误的、不完整、不准确或不相关的记录。数据清洗的目标是提高数据的质量,确保分析结果的有效性和可靠性。以下是一些常见的数据清洗步骤:

  1. 缺失值处理

    • 检查数据集中是否存在空值或者缺失值。isnull() 或者 isna() 方法  or  dropna() 方法
    • 对于缺失值,可以选择填充(使用平均值、中位数或其他统计方法)、删除或者预测填充。
      使用固定值:例如使用0或其他常数填充缺失值。
      
      df.fillna(0)
      ​使用统计值:如平均数、中位数或众数等。
      ​
      # 使用均值填充数值型列
      df['column_name'].fillna(df['column_name'].mean(), inplace=True)
      
      # 使用中位数填充
      df['column_name'].fillna(df['column_name'].median(), inplace=True)
      
      # 使用众数填充分类变量
      df['column_name'].fillna(df['column_name'].mode()[0], inplace=True)
      向前或向后填充:对于时间序列数据,可以考虑使用前一个或后一个观测值来填充缺失值。
      
      df.fillna(method='ffill')  # 向前填充
      df.fillna(method='bfill')  # 向后填充
  2. 噪声数据处理

    • 去除或修正那些明显错误的数据点,比如录入错误或者测量误差。
    • 使用算法来检测异常值,并决定如何处理这些异常值。
  3. 一致性检查

    • 确保数据在不同字段间的一致性。例如,日期格式应该统一,单位应该一致等。
      标准化日期格式:
      
      df['date_column'] = pd.to_datetime(df['date_column'], errors='coerce')
      
      指定日期格式:
      
      df['date_column'] = pd.to_datetime(df['date_column'], format='%Y-%m-%d', errors='coerce')
      
      # 假设有一列 'distance',其中有些值以米记录,有些以公里记录
      df['distance'] = df.apply(lambda row: row['distance'] * 1000 if row['unit'] == 'km' else row['distance'], axis=1)
      df.drop(columns=['unit'], inplace=True)  # 如果不再需要单位列,可以删除
    • 处理不同来源数据之间的冲突,使数据集之间能够正确地关联起来。
  4. 重复数据处理

    • 检查并合并重复的记录。有时候数据集中会包含完全相同的记录多次出现。
      df.duplicated(keep=False)查看是否有重复
    • 删除重复项,或者在保留一个副本的同时标记其他副本以备后用。
      df[df.duplicated()]
      df.drop_duplicated(keep="first", inplace=True)# 删除重复数据,并保留第一行
      df.reset_index(drop=True)# 将序号连贯
  5. 数据转换

    • 将数据转换成适合进一步分析的形式。这可能包括编码类别变量为数值,标准化数值范围等。
      df.info() # 观察各列的类型、缺失值情况
      df["列名"]=  df["列名"].astype("数据类型")
      df["列名"].head
    • 转换日期、货币和其他非数字数据为适当的格式以便于计算和分析。
  6. 数据标准化/规范化

    • 标准化数据,使其遵循特定的分布(如正态分布),或者将其缩放到一定的范围内(如0到1之间)。
  7. 数据增强

    • 通过增加额外的信息来丰富现有数据集。例如,通过外部数据库添加地理位置信息等。

数据清洗是一个迭代的过程,通常需要多次循环进行,直到数据集达到足够的质量标准。随着技术的发展,自动化工具和机器学习算法也被用来辅助数据清洗过程,以提高效率和准确性。

数据长度是否少于某个值,数据中某个 token 的比例超过某个阈值,数据的 zh 占比、en 占比、数字占比,数据是否有“http”字段,数据是否包含了“新冠”、“疫情”等低质量关键词,数据是否包含某些反动词汇,数据是否包含某些黄色字眼,等等等等。用启发式的规则过滤数据并不丢人,洗不干净数据才丢人。

但同时,必须注意到,用规则清洗或者过滤数据的时候,一定不要把数据搞成分布有偏的数据。比如、你觉着:“包含网址的数据质量低,而网址的英文占比高”,所以你把英文占比高的数据都去掉了。整挺好,模型成了单语模型。因此,用规则的时候,一定要多 check 下被滤出去的数据长什么样子,勤 vim 一下!

另外,数据脱敏也是数据清洗环节必须要做的一个工作。我们要尽可能的把训练数据中涉及到的人名、电话号码、邮箱等剔除出去,一旦被模型说出来,就构成了隐私侵犯,公司被罚的钱足够雇人把数据脱敏 N 遍了。更广义的,把数据的“转载自……”删掉,黄色信息、反动信息,references 等剔除出去,都可以视作数据脱敏工作的一部分。这个工作好像没任何奇淫巧技,老老实实的写正则匹配吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值