使用 OpenAI 进行数据探索性分析(EDA)
探索性数据分析(Exploratory Data Analysis, 简称 EDA)是数据分析中不可或缺的环节,帮助分析师快速了解数据的分布、特征和潜在模式。传统的 EDA 通常需要手动编写代码或使用工具完成。现在,通过 OpenAI 的 GPT-4 模型,数据分析师可以快速完成描述性统计、数据可视化和特征工程等任务。本文将通过具体示例,展示如何利用 OpenAI 辅助完成高效的 EDA。
一、自动生成数据集的描述性统计分析
示例场景:
假设你有一个包含客户信息的数据集 customers.csv
,其中包含以下字段:
age
(客户年龄)income
(年收入)purchase_frequency
(年度购买频次)
我们希望快速生成该数据集的描述性统计信息。
操作步骤:
-
加载数据:
使用 Pandas 加载数据集,并将数据的一部分传递给 GPT-4 进行分析。import pandas as pd # 加载数据 df = pd.read_csv("customers.csv") # 查看数据前几行 print(df.head())
-
请求 GPT-4 生成描述性统计:
将数据表头及部分数据传递给 OpenAI 模型,询问模型生成描述性统计。from openai import ChatCompletion # 准备 API 请求 messages = [ {"role": "system", "content": "You are a data analysis assistant."}, {"role": "user", "content": f"Please generate descriptive statistics for the following data in Chinese:\n{df.head(10).to_string()}"} ] # 调用 GPT-4 模型 response = ChatCompletion.create( model="gpt-4", messages=messages ) # 打印结果 print(response["choices"][0]["message"]["content"])
-
结果示例:
GPT-4 会返回类似以下结果:
以下是您提供数据的描述性统计:
客户ID (CustomerID):
- 最小值 (Min): 101
- 最大值 (Max): 110
- 平均值 (Mean): 105.5
年龄 (Age):
- 最小值 (Min): 22岁
- 最大值 (Max): 50岁
- 平均值 (Mean): 34.4岁
性别 (Gender):
- 女性 (Female): 5人
- 男性 (Male): 5人
年收入 (Income (USD)):
- 最小值 (Min): 30000美元
- 最大值 (Max): 80000美元
- 平均值 (Mean): 53000美元
购买频率 (PurchaseFrequency (times/year)):
- 最小值 (Min): 6次/年
- 最大值 (Max): 25次/年
- 平均值 (Mean): 15次/年
去年消费(CLastYearSpending (USD)):
- 最小值 (Min): 1000美元
- 最大值 (Max): 5000美元
- 平均值 (Mean): 2510美元
其中,客户 ID (CustomerID)一般不进行统计分析。以上数据分析结果可为您提供用户画像、消费模式等分析所需要的重要依据。
二、数据可视化建议和图表生成
通过数据可视化,我们可以更直观地了解数据分布。使用 OpenAI 可以快速生成可视化建议和对应的代码。
示例场景:
我们希望根据客户的年龄和购买频次绘制散点图,分析两者的关系。
-
向 GPT-4 请求可视化建议:
在交互式工具中输入请求:我有一个数据集,包含年龄(Age)和购买频次(Purchase Frequency)。你能建议一个合适的可视化方式并提供对应的 Python 代码吗?
-
GPT-4 的建议:
GPT-4 会返回以下内容:为了分析年龄与购买频次之间的关系,可以使用散点图。以下是 Python 的绘图代码:
import matplotlib.pyplot as plt # 绘制散点图 plt.figure(figsize=(8, 5)) plt.scatter(df['Age'], df['purchase_frequency'], alpha=0.7, color='blue') plt.title('Age vs Purchase Frequency') plt.xlabel('Age') plt.ylabel('Purchase Frequency') plt.grid(True) plt.show()
-
执行代码并查看图表:
运行以上代码,你会看到一个散点图,展示客户年龄与购买频次的关系。
其他图表类型:
你还可以让 GPT-4 根据数据类型推荐合适的图表:
- 箱线图(Boxplot):用于查看收入分布和离群值。
- 柱状图(Bar chart):用于统计不同年龄段的用户数量。
- 热力图(Heatmap):用于显示变量之间的相关性。
三、高效的特征工程和变量选择
特征工程是提升模型性能的重要环节,GPT-4 可以根据数据的特性,自动生成特征工程和变量选择的建议。
示例场景:
我们希望创建一个新特征,用于衡量客户的“购买强度”,并自动选择最相关的变量用于后续分析。
-
让 GPT-4 提出特征工程建议:
我有以下字段:年龄(Age)、年收入(Income)、购买频次(Purchase Frequency)。你能帮我设计一个新的特征,衡量客户的购买强度吗?
-
GPT-4 的建议:
可以创建一个“购买强度”特征,计算公式为: Purchase Intensity = Purchase Frequency / Income 以下是 Python 实现:
# 创建购买强度特征 df['purchase_intensity'] = df['purchase_frequency'] / df['income'] print(df[['age', 'income', 'purchase_frequency', 'purchase_intensity']].head())
-
自动选择相关变量:
你可以让 GPT-4 基于特征相关性分析推荐关键变量:请根据以下数据表,分析变量之间的相关性,并推荐最重要的变量用于建模: {df.corr().to_string()}
-
GPT-4 的回答:
相关性分析结果显示: - Purchase Frequency 与 Age 的相关系数为 0.45。 - Purchase Frequency 与 Income 的相关系数为 -0.3。 推荐将 Age 和 Purchase Frequency 作为建模的主要变量。
总结
通过 OpenAI,数据分析师可以更轻松地完成以下 EDA 任务:
- 自动生成描述性统计信息:快速了解数据分布和特性。
- 数据可视化建议和代码生成:生成适合数据特性的可视化方案。
- 特征工程与变量选择:创建新特征并高效挑选关键变量。
这些功能可以帮助分析师节省大量时间,更专注于业务洞察和决策。如果你想将这些方法应用于实际项目,不妨尝试将 OpenAI 与 Python 的数据分析库结合,探索更多可能性!
附:示例数据(customer.csv
)内容:
以下是一个示例数据集 customer.csv
,包含客户信息。数据包含多个字段,如客户ID、年龄、性别、年收入、购买频率以及近一年购买金额等。你可以将其复制保存为 CSV 文件,用于数据分析练习。
CustomerID | Age | Gender | Income (USD) | PurchaseFrequency (times/year) | LastYearSpending (USD) |
---|---|---|---|---|---|
101 | 25 | Female | 35000 | 12 | 1500 |
102 | 32 | Male | 45000 | 20 | 2500 |
103 | 28 | Female | 50000 | 15 | 2200 |
104 | 40 | Male | 75000 | 8 | 1800 |
105 | 35 | Female | 62000 | 25 | 5000 |
106 | 22 | Male | 30000 | 18 | 1300 |
107 | 45 | Female | 80000 | 10 | 4000 |
108 | 29 | Male | 55000 | 22 | 2700 |
109 | 38 | Female | 47000 | 14 | 2100 |
110 | 50 | Male | 60000 | 6 | 1000 |
字段说明:
- CustomerID:客户的唯一标识。
- Age:客户年龄(单位:岁)。
- Gender:客户性别(Male 或 Female)。
- Income (USD):客户年收入(单位:美元)。
- PurchaseFrequency (times/year):客户在过去一年中购买商品的次数。
- LastYearSpending (USD):客户过去一年的总消费金额(单位:美元)。
将数据保存为 customer.csv
:
将以下内容保存到一个文件中,命名为 customer.csv
。
CustomerID,Age,Gender,Income (USD),PurchaseFrequency (times/year),LastYearSpending (USD)
101,25,Female,35000,12,1500
102,32,Male,45000,20,2500
103,28,Female,50000,15,2200
104,40,Male,75000,8,1800
105,35,Female,62000,25,5000
106,22,Male,30000,18,1300
107,45,Female,80000,10,4000
108,29,Male,55000,22,2700
109,38,Female,47000,14,2100
110,50,Male,60000,6,1000