当前位置:   article > 正文

如何利用 ChatGPT 进行自动数据清理和预处理_chatgpt实现自动数据清理

chatgpt实现自动数据清理
推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景

ChatGPT 已经成为一把可用于多种应用的瑞士军刀,并且有大量的空间将 ChatGPT 集成到数据科学工作流程中。

如果您曾经在真实数据集上训练过机器学习模型,您就会知道数据清理和预处理的步骤对于构建可靠的机器学习模型非常重要。在本指南中,我们将了解如何使用 ChatGPT 在示例数据集上执行这些任务。

我们将使用 UCI 机器学习存储库中的银行营销数据集,并提示 ChatGPT 执行以下操作:

  • 获取并加载数据集
  • 检查缺失值
  • 对分类变量进行编码

您可以通过登录您的 OpenAI 帐户并开始新的 ChatGPT 会话来跟进。如果你愿意,你也可以在谷歌Colab中编码。

获取和加载数据集

数据集有几个不同版本。我们将使用银行满.csv。

提示:今天我们将对真实数据集进行数据清理和预处理。编写代码以执行以下操作:1. 从 UCI 机器学习存储库中提取银行营销数据集。使用请求或 urllib 等库。2. 下载 zip 文件,解压缩内容,并将银行已满.csv文件读取到 pandas 数据帧中(称为数据)。

在数据集中获取和读取的代码如下:

  1. import pandas as pd
  2. import urllib
  3. import zipfile
  4. # URL of the dataset
  5. url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip"
  6. # Fetch and extract the dataset
  7. urllib.request.urlretrieve(url, "bank.zip")
  8. with zipfile.ZipFile("bank.zip", "r") as zip_ref:
  9. zip_ref.extractall()
  10. # Load the dataset into a pandas DataFrame
  11. data = pd.read_csv("bank-full.csv", delimiter=";",skipinitialspace=True)

获取数据集的基本信息

让我们更好地理解数据集。

  1. # Display the first few rows of the dataset
  2. print(data.head())

这输出:

利用 ChatGPT 进行自动数据清理和预处理


截断的输出 data.head()

提示:使用 pandas 获取数据帧的维度、列的描述性统计信息以及各种列的数据类型。

这一步并不需要提示 ChatGPT,因为 pandas 方法非常简单。

  1. # Get the dimensions of the dataset (rows, columns)
  2. print(data.shape)
Output >>> (45211, 17)

我们有超过 45000 条记录和 16 个特征(因为 17 个也包括输出标签)。

  1. # Get statistical summary of numerical columns
  2. print(data.describe())

利用 ChatGPT 进行自动数据清理和预处理


数据.describe() 的截断输出

获取各个列的数据类型的概述也很有帮助。当我们对分类变量进行编码时,我们将仔细研究它们。

  1. # Check data types of each column
  2. print(data.dtypes)
  1. Output >>>
  2. age int64
  3. job object
  4. marital object
  5. education object
  6. default object
  7. balance int64
  8. housing object
  9. loan object
  10. contact object
  11. day int64
  12. month object
  13. duration int64
  14. campaign int64
  15. pdays int64
  16. previous int64
  17. poutcome object
  18. y object
  19. dtype: object

到目前为止,我们已经了解了银行营销数据集。输出标签表示客户是否会订阅定期存款。该数据集包含多个要素,例如年龄、月份、教育程度、婚姻状况、先前广告系列的结果等。

检查缺失值

提示:我想知道每列中缺失值的数量。请给我代码来做这件事。使用熊猫。
  1. # Check for missing values in each column
  2. missing_values = data.isnull().sum()
  3. print(missing_values)

下面是输出:

  1. Output >>>
  2. age 0
  3. job 0
  4. marital 0
  5. education 0
  6. default 0
  7. balance 0
  8. housing 0
  9. loan 0
  10. contact 0
  11. day 0
  12. month 0
  13. duration 0
  14. campaign 0
  15. pdays 0
  16. previous 0
  17. poutcome 0
  18. y 0
  19. dtype: int64

此版本的银行营销数据集(包含超过 45000 条记录)没有任何缺失值。但实际上,大多数真实世界的数据集都有缺失值。您应该使用合适的插补技术来处理缺失值。

作为可选的练习,您可以在此处添加一个步骤,提示 ChatGPT 从列的子集中删除一小部分值,以便您可以练习如何处理缺失值。

编码分类变量

下一步是对数据集中的分类变量进行编码。我们将首先获取所有分类列的列表。

提示:提供代码以获取此数据集中所有分类列的列表。
  1. # Count the number of categorical variables
  2. categorical_columns = data.select_dtypes(include=['object']).columns
  3. print(categorical_columns)
  4. num_categorical_variables = len(categorical_columns)
  5. # Display the count
  6. print("Number of categorical variables:", num_categorical_variables)

分类列列表还包括输出标签 y。但是,让我们先关注其他分类变量。

  1. Output >>>
  2. Index(['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact',
  3. 'month', 'poutcome', 'y'],
  4. dtype='object')
  5. Number of categorical variables: 10

仔细查看分类变量的值

接下来,让我们看看每个分类变量采用的值。

提示:我想了解每个分类变量采用的各种值。给熊猫代码来做到这一点。
  1. # Get the different values and their counts for each categorical column
  2. categorical_columns = ['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'poutcome']
  3. for column in categorical_columns:
  4. value_counts = data[column].value_counts()
  5. print(f"Column: {column}")
  6. print(value_counts,"\n")

输出很难解析:

  1. Output >>>
  2. Column: job
  3. blue-collar 9732
  4. management 9458
  5. technician 7597
  6. admin. 5171
  7. services 4154
  8. retired 2264
  9. self-employed 1579
  10. entrepreneur 1487
  11. unemployed 1303
  12. housemaid 1240
  13. student 938
  14. unknown 288
  15. Name: job, dtype: int64
  16. ...
  17. ...
  18. ...
  19. Column: poutcome
  20. unknown 36959
  21. failure 4901
  22. other 1840
  23. success 1511
  24. Name: poutcome, dtype: int64

可视化分类变量的值

让我们提示 ChatGPT 创建一个可视化,以便更容易理解分类变量采用的值。

提示:我想要一个显示每个分类变量取值的图。排除输出标签 y。包括所有其他分类变量。

我们开始吧!

  1. import matplotlib.pyplot as plt
  2. # Get the different values and their counts for each categorical column
  3. categorical_columns = ['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'poutcome']
  4. # Set up the subplot grid
  5. fig, axes = plt.subplots(3, 3, figsize=(10,8))
  6. # Iterate over each categorical column and plot the value counts
  7. for i, column in enumerate(categorical_columns):
  8. row = i // 3
  9. col = i % 3
  10. value_counts = data[column].value_counts()
  11. ax = axes[row, col]
  12. value_counts.plot(kind='bar', ax=ax)
  13. ax.set_xlabel(column)
  14. ax.set_ylabel('Count')
  15. ax.set_title(f'{column.title()} Value Counts')
  16. # Adjust spacing between subplots
  17. plt.tight_layout()
  18. # Show the plot
  19. plt.show()

利用 ChatGPT 进行自动数据清理和预处理


分类变量的值

独热编码

对于分类列的子集,我们可以使用独热编码。

提示:给 pandas 代码以对列列表执行独热编码。

我们使用从熊猫到独热编码以下列:get_dummies

  1. # Select the categorical columns (excluding education and poutcome)
  2. categorical_columns = ['job', 'marital', 'default', 'housing', 'loan', 'contact']
  3. # Perform one-hot encoding
  4. encoded_data = pd.get_dummies(data, columns=categorical_columns)
提示:我想打印出新添加列的前几行。编写代码以执行相同的操作。
  1. # Select the newly added columns
  2. new_columns = encoded_data.columns.difference(data.columns)
  3. # Print the head of the newly added columns
  4. print(encoded_data[new_columns].head())

利用 ChatGPT 进行自动数据清理和预处理


截断的输出 encoded_data['new_colums'].head()

定义自定义映射

对于“education”和“poutcome”(先前结果)等变量的列,而不是独热编码,最好使用自定义映射在值之间进行一定程度的比较。

此外,当我们使用独热编码来编码一个分类变量时,该变量采用 k 个不同的值 k 个新列。对于像“月”这样的分类列,如果不添加太多信息,这将是多余的。

因此,对于这两种情况,我们将定义一个自定义映射,然后转换值。我们可以提示 ChatGPT 获取一个通用代码片段,然后我们可以修改该代码片段以定义特定列的映射。

提示:我想做一个自定义映射来编码一些分类变量。首先给我一个通用代码片段,该代码片段定义了从分类列中的唯一值到一组不同输出值的自定义映射。然后,我们应该使用此映射来转换列中的值。
  1. # Define the custom mapping dictionary
  2. custom_mapping = {
  3. 'category1': 'value1',
  4. 'category2': 'value2',
  5. 'category3': 'value3',
  6. # Add more categories and corresponding values as needed
  7. }
  8. # Specify the categorical column
  9. categorical_column = 'column_name' # Replace 'column_name' with the actual column name
  10. # Perform the mapping using the custom mapping dictionary
  11. data[categorical_column] = data[categorical_column].map(custom_mapping)

对于“月”列,让我们像这样转换月份字符串:

  1. # Define the mapping dictionary for months
  2. month_mapping = {
  3. 'jan': 1,
  4. 'feb': 2,
  5. 'mar': 3,
  6. 'apr': 4,
  7. 'may': 5,
  8. 'jun': 6,
  9. 'jul': 7,
  10. 'aug': 8,
  11. 'sep': 9,
  12. 'oct': 10,
  13. 'nov': 11,
  14. 'dec': 12
  15. }
  16. # Map the values in the month column
  17. encoded_data['month'] = encoded_data['month'].map(month_mapping)

让我们将“结果”和“教育”列映射到数值,如下所示:

  1. # Define the custom mapping for poutcome and education
  2. poutcome_mapping = {
  3. 'unknown': 0,
  4. 'failure': 1,
  5. 'other': 2,
  6. 'success': 3
  7. }
  8. education_mapping = {
  9. 'unknown': 0,
  10. 'primary': 1,
  11. 'secondary': 2,
  12. 'tertiary': 3
  13. }
  14. # Perform ordinal encoding using pandas map
  15. encoded_data['poutcome'] = encoded_data['poutcome'].map(poutcome_mapping)
  16. encoded_data['education'] = encoded_data['education'].map(education_mapping)
  17. # Select the newly added columns
  18. new_columns = ['month','poutcome', 'education']
  19. # Print the head of the newly added columns
  20. print(encoded_data[new_columns].head(10))

对输出标签进行编码

我们还将输出标签“是”和“否”分别映射到 1 和 0。

  1. encoded_data['y'] = encoded_data['y'].replace({'no': 0, 'yes': 1})
  2. print(encoded_data['y'])
  1. Output >>>
  2. 0 0
  3. 1 0
  4. 2 0
  5. 3 0
  6. 4 0
  7. ..
  8. 45206 1
  9. 45207 1
  10. 45208 1
  11. 45209 0
  12. 45210 0
  13. Name: y, Length: 45211, dtype: int64

回想一下,我们对“住房”、“默认”和“贷款”列使用了独热编码。由于这些列还采用“是”和“否”值,因此您还可以将“是”和“否”分别映射到 1 和 0。

可视化类标签的分布

检查类标签的分布也很有帮助,这样我们就可以在需要时在构建模型时考虑类不平衡。

提示:我想了解类标签的分布。请给我代码以生成合适的图。

以下是在Seaborn中生成计数图的代码:

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # Plot the distribution of output labels
  4. sns.countplot(data=data, x='y')
  5. plt.xlabel('Output Label')
  6. plt.ylabel('Count')
  7. plt.title('Output Label Distribution')
  8. plt.show()

利用 ChatGPT 进行自动数据清理和预处理


类标签的分发

我们看到存在阶级失衡。因此,如果要构建模型,则应确保使用适当的重采样方法解决类不平衡问题。

通用数据清理和预处理管道

尽管数据清理和预处理需要开发人员的努力,但让我们尝试获取一个通用的步骤序列,该步骤序列对于简单的数据集来说相当有效。

提示:您能否根据我们到目前为止所做的工作给我一个通用的数据清理和预处理管道。获取数据集的基本信息,检查和处理缺失值,标识分类列,并对分类列进行编码。只使用熊猫。

这是:

  1. import pandas as pd
  2. # Load the dataset into a DataFrame
  3. data = pd.read_csv('data.csv')
  4. # Step 1: Basic Info
  5. print(data.info())
  6. # Step 2: Missing Values
  7. missing_values = data.isnull().sum()
  8. print(missing_values)
  9. # Step 3: Handle Missing Values
  10. # Identify columns with missing values
  11. columns_with_missing_values = missing_values[missing_values > 0].index
  12. # Impute missing values using fillna() or other suitable method
  13. data[columns_with_missing_values] = data[columns_with_missing_values].fillna(data[columns_with_missing_values].mean())
  14. # Step 4: Get Categorical Columns
  15. categorical_columns = data.select_dtypes(include=['object']).columns
  16. # Step 5: Encode Categorical Columns
  17. # Perform ordinal encoding or one-hot encoding using pandas' get_dummies() function
  18. encoded_data = pd.get_dummies(data, columns=categorical_columns)
  19. # Print the encoded data
  20. print(encoded_data.head())

总结

可以看出,与 ChatGPT 协同作用的数据科学专业知识可以帮助使数据清理和预处理更简单、更快捷。现在,您已经准备好了预处理的数据集,您可以通过在此银行营销数据集上构建一个简单的预测模型来进一步实现这一点。

原文链接:如何利用 ChatGPT 进行自动数据清理和预处理 (mvrlink.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/90380?site
推荐阅读
相关标签
  

闽ICP备14008679号