如何利用 ChatGPT 進行自動數據清理和預處理

推薦:使用 NSDT場景編輯器助你快速搭建可二次編輯的3D應用場景

ChatGPT 已經成為一把可用于多種應用的瑞士軍刀,并且有大量的空間將 ChatGPT 集成到數據科學工作流程中。

如果您曾經在真實數據集上訓練過機器學習模型,您就會知道數據清理和預處理的步驟對于構建可靠的機器學習模型非常重要。在本指南中,我們將了解如何使用 ChatGPT 在示例數據集上執行這些任務。

我們將使用 UCI 機器學習存儲庫中的銀行營銷數據集,并提示 ChatGPT 執行以下操作:

  • 獲取并加載數據集
  • 檢查缺失值
  • 對分類變量進行編碼

您可以通過登錄您的 OpenAI 帳戶并開始新的 ChatGPT 會話來跟進。如果你愿意,你也可以在谷歌Colab中編碼。

獲取和加載數據集

數據集有幾個不同版本。我們將使用銀行滿.csv。

提示:今天我們將對真實數據集進行數據清理和預處理。編寫代碼以執行以下操作:1. 從 UCI 機器學習存儲庫中提取銀行營銷數據集。使用請求或 urllib 等庫。2. 下載 zip 文件,解壓縮內容,并將銀行已滿.csv文件讀取到 pandas 數據幀中(稱為數據)。

在數據集中獲取和讀取的代碼如下:

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

獲取數據集的基本信息

讓我們更好地理解數據集。

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

這輸出:

利用 ChatGPT 進行自動數據清理和預處理


截斷的輸出 data.head()

提示:使用 pandas 獲取數據幀的維度、列的描述性統計信息以及各種列的數據類型。

這一步并不需要提示 ChatGPT,因為 pandas 方法非常簡單。

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

我們有超過 45000 條記錄和 16 個特征(因為 17 個也包括輸出標簽)。

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

利用 ChatGPT 進行自動數據清理和預處理


數據.describe() 的截斷輸出

獲取各個列的數據類型的概述也很有幫助。當我們對分類變量進行編碼時,我們將仔細研究它們。

# Check data types of each column
print(data.dtypes)
Output >>>age           int64
job          object
marital      object
education    object
default      object
balance       int64
housing      object
loan         object
contact      object
day           int64
month        object
duration      int64
campaign      int64
pdays         int64
previous      int64
poutcome     object
y            object
dtype: object

到目前為止,我們已經了解了銀行營銷數據集。輸出標簽表示客戶是否會訂閱定期存款。該數據集包含多個要素,例如年齡、月份、教育程度、婚姻狀況、先前廣告系列的結果等。

檢查缺失值

提示:我想知道每列中缺失值的數量。請給我代碼來做這件事。使用熊貓。
# Check for missing values in each column
missing_values = data.isnull().sum()
print(missing_values)

下面是輸出:

Output >>>age          0
job          0
marital      0
education    0
default      0
balance      0
housing      0
loan         0
contact      0
day          0
month        0
duration     0
campaign     0
pdays        0
previous     0
poutcome     0
y            0
dtype: int64

此版本的銀行營銷數據集(包含超過 45000 條記錄)沒有任何缺失值。但實際上,大多數真實世界的數據集都有缺失值。您應該使用合適的插補技術來處理缺失值。

作為可選的練習,您可以在此處添加一個步驟,提示 ChatGPT 從列的子集中刪除一小部分值,以便您可以練習如何處理缺失值。

編碼分類變量

下一步是對數據集中的分類變量進行編碼。我們將首先獲取所有分類列的列表。

提示:提供代碼以獲取此數據集中所有分類列的列表。
# Count the number of categorical variables
categorical_columns = data.select_dtypes(include=['object']).columns
print(categorical_columns)
num_categorical_variables = len(categorical_columns)# Display the count
print("Number of categorical variables:", num_categorical_variables)

分類列列表還包括輸出標簽?y。但是,讓我們先關注其他分類變量。

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

仔細查看分類變量的值

接下來,讓我們看看每個分類變量采用的值。

提示:我想了解每個分類變量采用的各種值。給熊貓代碼來做到這一點。
# Get the different values and their counts for each categorical column
categorical_columns = ['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'poutcome']
for column in categorical_columns:value_counts = data[column].value_counts()print(f"Column: {column}")print(value_counts,"\n")

輸出很難解析:

Output >>>Column: job
blue-collar      9732
management       9458
technician       7597
admin.           5171
services         4154
retired          2264
self-employed    1579
entrepreneur     1487
unemployed       1303
housemaid        1240
student           938
unknown           288
Name: job, dtype: int64 ...
...
...
Column: poutcome
unknown    36959
failure     4901
other       1840
success     1511
Name: poutcome, dtype: int64 

可視化分類變量的值

讓我們提示 ChatGPT 創建一個可視化,以便更容易理解分類變量采用的值。

提示:我想要一個顯示每個分類變量取值的圖。排除輸出標簽 y。包括所有其他分類變量。

我們開始吧!

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

利用 ChatGPT 進行自動數據清理和預處理


分類變量的值

獨熱編碼

對于分類列的子集,我們可以使用獨熱編碼。

提示:給 pandas 代碼以對列列表執行獨熱編碼。

我們使用從熊貓到獨熱編碼以下列:get_dummies

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

利用 ChatGPT 進行自動數據清理和預處理


截斷的輸出 encoded_data['new_colums'].head()

定義自定義映射

對于“education”和“poutcome”(先前結果)等變量的列,而不是獨熱編碼,最好使用自定義映射在值之間進行一定程度的比較。

此外,當我們使用獨熱編碼來編碼一個分類變量時,該變量采用 k 個不同的值 k 個新列。對于像“月”這樣的分類列,如果不添加太多信息,這將是多余的。

因此,對于這兩種情況,我們將定義一個自定義映射,然后轉換值。我們可以提示 ChatGPT 獲取一個通用代碼片段,然后我們可以修改該代碼片段以定義特定列的映射。

提示:我想做一個自定義映射來編碼一些分類變量。首先給我一個通用代碼片段,該代碼片段定義了從分類列中的唯一值到一組不同輸出值的自定義映射。然后,我們應該使用此映射來轉換列中的值。
# Define the custom mapping dictionary
custom_mapping = {'category1': 'value1','category2': 'value2','category3': 'value3',# Add more categories and corresponding values as needed
}# Specify the categorical column
categorical_column = 'column_name'  # Replace 'column_name' with the actual column name# Perform the mapping using the custom mapping dictionary
data[categorical_column] = data[categorical_column].map(custom_mapping)

對于“月”列,讓我們像這樣轉換月份字符串:

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

讓我們將“結果”和“教育”列映射到數值,如下所示:

# Define the custom mapping for poutcome and education
poutcome_mapping = {'unknown': 0,'failure': 1,'other': 2,'success': 3
}education_mapping = {'unknown': 0,'primary': 1,'secondary': 2,'tertiary': 3
}# Perform ordinal encoding using pandas map
encoded_data['poutcome'] = encoded_data['poutcome'].map(poutcome_mapping)
encoded_data['education'] = encoded_data['education'].map(education_mapping)# Select the newly added columns
new_columns = ['month','poutcome', 'education']# Print the head of the newly added columns
print(encoded_data[new_columns].head(10))

對輸出標簽進行編碼

我們還將輸出標簽“是”和“否”分別映射到 1 和 0。

encoded_data['y'] = encoded_data['y'].replace({'no': 0, 'yes': 1})
print(encoded_data['y'])
Output >>>0        0
1        0
2        0
3        0
4        0..
45206    1
45207    1
45208    1
45209    0
45210    0
Name: y, Length: 45211, dtype: int64

回想一下,我們對“住房”、“默認”和“貸款”列使用了獨熱編碼。由于這些列還采用“是”和“否”值,因此您還可以將“是”和“否”分別映射到 1 和 0。

可視化類標簽的分布

檢查類標簽的分布也很有幫助,這樣我們就可以在需要時在構建模型時考慮類不平衡。

提示:我想了解類標簽的分布。請給我代碼以生成合適的圖。

以下是在Seaborn中生成計數圖的代碼:

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

利用 ChatGPT 進行自動數據清理和預處理


類標簽的分發

我們看到存在階級失衡。因此,如果要構建模型,則應確保使用適當的重采樣方法解決類不平衡問題。

通用數據清理和預處理管道

盡管數據清理和預處理需要開發人員的努力,但讓我們嘗試獲取一個通用的步驟序列,該步驟序列對于簡單的數據集來說相當有效。

提示:您能否根據我們到目前為止所做的工作給我一個通用的數據清理和預處理管道。獲取數據集的基本信息,檢查和處理缺失值,標識分類列,并對分類列進行編碼。只使用熊貓。

這是:

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

總結

可以看出,與 ChatGPT 協同作用的數據科學專業知識可以幫助使數據清理和預處理更簡單、更快捷。現在,您已經準備好了預處理的數據集,您可以通過在此銀行營銷數據集上構建一個簡單的預測模型來進一步實現這一點。

原文鏈接:如何利用 ChatGPT 進行自動數據清理和預處理 (mvrlink.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41338.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

有沒有比讀寫鎖更快的鎖

在之前的文章中,我們介紹了讀寫鎖,學習完之后你應該已經知道了讀寫鎖允許多個線程同時訪問共享變量,適用于讀多寫少的場景。那么在讀多寫少的場景中還有沒有更快的技術方案呢?還真有,在Java1.8這個版本里提供了一種叫S…

Docker安裝Skywalking APM分布式追蹤系統

Skywalking是一個應用性能管理(APM)系統,具有服務器性能監測,應用程序間調用關系及性能監測等功能,Skywalking分為服務端、管理界面、以及嵌入到程序中的探針部分,由程序中的探針采集各類調用數據發送給服務端保存,在管…

novnc 和 vnc server 如何實現通信?原理?

參考:https://www.codenong.com/js0f3b351a156c/

隨機微分方程

應用隨機過程|第7章 隨機微分方程 見知乎:https://zhuanlan.zhihu.com/p/348366892?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384

復習3-5天【80天學習完《深入理解計算機系統》】第七天

專注 效率 記憶 預習 筆記 復習 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區留言,一定盡快回復!(大家可以去看我的專欄,是所有文章的目錄)   文章字體風格: 紅色文字表示&#…

Linux與bash(基礎內容一)

一、常見的linux命令: 1、文件: (1)常見的文件命令: (2)文件屬性: (3)修改文件屬性: 查看文件的屬性: ls -l 查看文件的屬性 ls …

神經網絡基礎-神經網絡補充概念-33-偏差與方差

概念 偏差(Bias): 偏差是模型預測值與實際值之間的差距,它反映了模型對訓練數據的擬合能力。高偏差意味著模型無法很好地擬合訓練數據,通常會導致欠擬合。欠擬合是指模型過于簡單,不能捕捉數據中的復雜模式…

基于java在線讀書與分享論壇設計與實現

摘 要 互聯系統的技術在如今的社會中,應用的越來越廣泛,通過互聯系統我們可以更方便地進行辦公,也能夠在系統上就能處理很多日常的事務。互聯系統的技術的發展,也是人們日常中接觸更多的一項技術。隨著互聯系統的發展,…

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 摘要當前的檢測sota模型網絡架構swin Transformer和Vision Transformer的不同之處整體架構Patch Partition結構Linear Embedding結構Swin Transformer Block結構 Patch MergingW-MSAMSA模塊計算量W-M…

學習Vue:Vue3 VS Vue2

Vue 3作為Vue.js的最新版本,帶來了一系列令人激動的新特性和改進,讓開發者們在構建現代Web應用時體驗更加順暢和高效。本文將全面介紹Vue 3相對于Vue 2的改進,重點解釋Composition API的使用,以及新引入的Teleport和Suspense等特性…

Genoss GPT簡介:使用 Genoss 模型網關實現多個LLM模型的快速切換與集成

一、前言 生成式人工智能領域的發展繼續加速,大型語言模型 (LLM) 的用途范圍不斷擴大。這些用途跨越不同的領域,包括個人助理、文檔檢索以及圖像和文本生成。ChatGPT 等突破性應用程序為公司進入該領域并開始使用這項技術進行構建鋪平了道路。 大公司正…

如何發布自己的小程序

小程序的基礎內容組件 text&#xff1a; 文本支持長按選中的效果 <text selectable>151535313511</text> rich-text: 把HTML字符串渲染為對應的UI <rich-text nodes"<h1 stylecolor:red;>123</h1>"></rich-text> 小程序的…

MySql過濾重復數據

假設模型表是: 1. 根據單字段過濾: SELECT user_name, COUNT(*) as count FROM sys_user GROUP BY user_name HAVING count > 1;結果: 2. 根據多個字段查詢重復數據 SELECT user_name, email, COUNT(*) as count FROM sys_user GROUP BY user_name, email HAVING count…

[centos]設置主機名

1、設置 hostnamectl set-hostname 名字 2、查看是否生效 hostnamectl status 3、打開一個新鏈接就可以了

log4j教程_編程入門自學教程_菜鳥教程-免費教程分享

教程簡介 Log4j是Apache的一個開源項目&#xff0c;通過使用Log4j&#xff0c;我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件&#xff0c;甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等&#xff1b;我們也可以控制每一條日志的輸出格式&#xff1b;…

[python] 使用Jieba工具中文分詞及文本聚類概念

前面講述了很多關于Python爬取本體Ontology、消息盒InfoBox、虎撲圖片等例子&#xff0c;同時講述了VSM向量空間模型的應用。但是由于InfoBox沒有前后文和語義概念&#xff0c;所以效果不是很好&#xff0c;這篇文章主要是爬取百度5A景區摘要信息&#xff0c;再利用Jieba分詞工…

hive--給表名和字段加注釋

1.建表添加注釋 CREATE EXTERNAL TABLE test(loc_province string comment 省份,loc_city string comment 城市,loc_district string comment 區,loc_street string comment 街道,)COMMENT 每日數據處理后的表 PARTITIONED BY (par_dt string) ROW FORMAT SERDEorg.apache.had…

學習Vue:響應式原理與性能優化策略

性能優化是Vue.js應用開發中的一個關鍵方面&#xff0c;而深入了解響應式原理并采用有效的性能優化策略可以顯著提升應用的性能。本文將解釋響應式原理并介紹一些性能優化策略&#xff0c;旨在幫助您構建高性能的Vue.js應用。 響應式原理 Vue.js的響應式原理是通過利用Object.…

PHP在線客服系統推薦

在當今數字化時代&#xff0c;企業客戶服務的重要性不容忽視。為了提供卓越的客戶體驗&#xff0c;許多企業正在尋找PHP在線客服系統。這種系統不僅可以滿足客戶的需求&#xff0c;還能提升企業的形象。本文將深入探討PHP在線客服系統的一些有趣話題。 理解PHP在線客服系統 PHP…

71 # 協商緩存的配置:通過內容

對比&#xff08;協商&#xff09;緩存 比較一下再去決定是用緩存還是重新獲取數據&#xff0c;這樣會減少網絡請求&#xff0c;提高性能。 對比緩存的工作原理 客戶端第一次請求服務器的時候&#xff0c;服務器會把數據進行緩存&#xff0c;同時會生成一個緩存標識符&#…