数据清洗

在AI产品开发过程中,数据是最重要的资产之一。自动化数据处理能够帮助我们:

  • 提高效率:自动化处理海量数据,无需人工逐条处理。
  • 确保数据质量:自动化的数据清洗和预处理能大大提升数据准确性。
  • 节省人力成本:通过编写自动化脚本,减少重复劳动,让团队专注于更有价值的工作。

尤其在 AI 数据准备阶段,数据清洗、合并和分析是基础而关键的步骤。使用 Python 的 pandas 库,可以快速高效地处理这些任务。这是一个强大的数据分析库,专门用于处理结构化数据。它提供了高效的数据结构,如DataFrameSeries,可以轻松地进行数据清洗、操作、分析和可视化。Pandas 支持从多种文件格式(如 CSV、Excel、SQL 数据库等)中读取数据,并提供了丰富的功能来处理缺失值、合并数据集、分组统计和时间序列分析等任务,是AI产品经理的常用“武器”之一。

数据清洗与预处理是自动化数据处理的重要环节。下面我们介绍几个常见的数据处理方法:

首先是处理缺失值

  • 填充缺失值:使用 `fillna()` 方法可以用指定值或方法(例如均值、中位数)填充缺失值。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中存在缺失值的列,计算每一列的均值,并用相应列的均值替换缺失值。请将填充缺失值后的数据保存到新文件 filled_example.csv 中。同时,请在代码中加入异常处理,并在处理完成后输出提示信息。

示例代码:

import pandas as pd

try:
    # 读取 CSV 文件
    df = pd.read_csv('example.csv')
    print("成功读取 'example.csv' 文件。")
    
    # 使用每一列的均值填充缺失值
    df_filled = df.fillna(df.mean())
    print("缺失值已使用各列的均值填充。")
    
    # 将填充后的数据保存到新文件
    df_filled.to_csv('filled_example.csv', index=False)
    print("填充后的数据已保存为 'filled_example.csv'.")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取 CSV 文件;
  • 通过 df.fillna(df.mean()) 计算每列均值并填充缺失值;
  • 使用 to_csv() 方法将处理后的 DataFrame 保存到新文件中;
  • 代码中加入了异常处理,以便在读取、处理或保存数据时出现问题时给出错误提示。
  • 删除缺失值使用 `dropna()` 方法可以删除包含缺失值的行或列。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中存在缺失值的行,请使用 dropna() 方法删除这些行,并将删除缺失值后的数据保存到新文件 cleaned_example.csv 中。请在代码中加入异常处理,确保在处理过程中如果出现错误能够给出详细的错误提示。

示例代码:

import pandas as pd

try:
    # 读取 CSV 文件
    df = pd.read_csv('example.csv')
    print("成功读取 'example.csv' 文件。")
    
    # 删除包含缺失值的行
    df_cleaned = df.dropna()
    print("已删除包含缺失值的行。")
    
    # 将处理后的数据保存到新文件
    df_cleaned.to_csv('cleaned_example.csv', index=False)
    print("处理后的数据已保存为 'cleaned_example.csv'.")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取 CSV 文件;
  • 通过 df.dropna() 删除所有包含缺失值的行;
  • 使用 to_csv() 方法将处理后的 DataFrame 保存到新文件中;
  • 加入异常处理,以便在读取、处理或保存数据时出现问题时给出错误提示。

数据清洗中的另一种常见情况是数据类型转换

  • 数据类型转换:由于不同数据来源格式可能不一致,需要用 `astype()` 将数据转换为合适的类型,确保后续分析的准确性。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。假设文件中有一列名为 "age" 的数据,该列的数据类型可能不是整数。请使用 astype() 方法将 "age" 列的数据转换为整数类型,并将转换后的数据保存到新文件 converted_example.csv 中。请在代码中加入异常处理,确保在处理过程中出现错误时能够输出详细的错误提示。

示例代码:

import pandas as pd

try:
    # 读取 CSV 文件
    df = pd.read_csv('example.csv')
    print("成功读取 'example.csv' 文件。")
    
    # 将 "age" 列转换为整数类型
    df['age'] = df['age'].astype(int)
    print("成功将 'age' 列转换为整数类型。")
    
    # 保存转换后的数据到新文件
    df.to_csv('converted_example.csv', index=False)
    print("转换后的数据已保存为 'converted_example.csv'.")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取 CSV 文件;
  • 利用 astype(int) 将 “age” 列转换为整数类型;
  • 使用 to_csv() 方法将转换后的 DataFrame 保存到新文件;
  • 使用 try-except 块进行异常捕获,以便在读取、转换或保存数据时发生错误时输出详细的错误信息。

此外,重复值处理也是很常见的情况。

  • 去重:数据中可能存在重复记录,使用 `drop_duplicates()` 方法可以删除重复数据,保证数据集唯一性。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中可能存在的重复记录,请使用 drop_duplicates() 方法删除所有重复的行,确保数据集唯一性。请将处理后的数据保存到新文件 deduplicated_example.csv 中,同时在代码中加入异常处理,以便在处理过程中发生错误时输出详细的错误提示。

示例代码:

import pandas as pd

try:
    # 读取 CSV 文件
    df = pd.read_csv('example.csv')
    print("成功读取 'example.csv' 文件。")
    
    # 删除所有重复的记录
    df_dedup = df.drop_duplicates()
    print("已删除重复的记录。")
    
    # 将处理后的数据保存到新文件
    df_dedup.to_csv('deduplicated_example.csv', index=False)
    print("处理后的数据已保存为 'deduplicated_example.csv'.")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取 CSV 文件;
  • 通过 drop_duplicates() 方法删除所有重复的行,确保数据集唯一性;
  • 使用 to_csv() 方法将去重后的数据保存到新文件中;
  • 使用 try-except 块进行异常捕获,确保在读取、处理或保存数据过程中发生错误时输出详细的错误信息。

还有就是异常值处理,包括:

  • 异常值检测:可以结合箱线图等方法检测异常值。
  • 异常值替换或删除:异常值可能影响数据分析结果,可通过替换或删除来处理异常值。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取名为 data.csv 的数据文件。假设数据中有一列名为 "value" 的数值数据。请利用箱线图的方法检测 "value" 列中的异常值(即低于 Q1 - 1.5IQR 或高于 Q3 + 1.5IQR 的值),并将这些异常值替换为该列的中位数。请将处理后的数据保存为 processed_data.csv,并绘制处理前后 "value" 列的箱线图以供对比。同时,在代码中加入异常处理,确保在处理过程中如果出现错误能够输出详细的错误提示。

示例代码:

import pandas as pd
import matplotlib.pyplot as plt

try:
    # 读取数据文件
    df = pd.read_csv('data.csv')
    print("成功读取 'data.csv' 文件。")
    
    # 选择需要检测异常值的列
    col = "value"
    
    # 绘制原始数据的箱线图,观察异常值分布
    plt.figure(figsize=(6, 4))
    plt.boxplot(df[col], vert=False)
    plt.title("原始数据箱线图")
    plt.xlabel(col)
    plt.show()
    
    # 计算第一四分位数 (Q1) 和第三四分位数 (Q3)
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1  # 四分位距
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    
    # 计算中位数
    median_value = df[col].median()
    
    # 替换异常值:若数值小于 lower_bound 或大于 upper_bound,则替换为中位数
    df[col] = df[col].apply(lambda x: median_value if x < lower_bound or x > upper_bound else x)
    print("已将异常值替换为中位数。")
    
    # 绘制处理后数据的箱线图,验证异常值处理效果
    plt.figure(figsize=(6, 4))
    plt.boxplot(df[col], vert=False)
    plt.title("处理后数据箱线图")
    plt.xlabel(col)
    plt.show()
    
    # 将处理后的数据保存到新文件
    df.to_csv('processed_data.csv', index=False)
    print("处理后的数据已保存为 'processed_data.csv'。")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 数据读取:使用 pd.read_csv()data.csv 文件中读取数据。
  • 箱线图绘制:利用 matplotlib 绘制原始数据的箱线图,直观显示异常值分布。
  • 异常值检测:计算 Q1、Q3 和 IQR,利用常见的 1.5*IQR 规则确定异常值的下界和上界。
  • 异常值处理:使用 apply() 对指定列中的数据进行检查,将超出上下界的异常值替换为中位数。
  • 结果对比:绘制处理后数据的箱线图以验证效果,并将处理后的数据保存到 processed_data.csv 文件中。
  • 异常处理:利用 try-except 块捕获过程中可能发生的错误,并输出详细的错误信息。

练习:

假设示例中的example.csv是一个每天会生成的文件,请撰写提示词,让AI模型编写一个自动化脚本,完成:

  1. 删除重复记录的,并记录在以日期命名的日志文件中。
  2. 改用中位数(df.median())填充填充缺失值,并记录在以日期命名的日志文件中。
  3. 将新生成的csv文件保存为以日期命名的新文件。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。