分析数据集以更好地了解和获取洞察是任何数据科学项目中的重要步骤。ChatGPT可以帮助简化和加快这样的分析。
在这里,我们将使用ChatGPT对一个样本数据集进行探索性数据分析。我们将了解特征的分布情况,感兴趣的特征如何随其他特征变化,以及更多内容。
要跟随并访问ChatGPT,您需要一个OpenAI账户。如果您还没有账户,可以注册一个免费账户。
加载数据集并获取基本信息
seaborn库中有一些准备好的数据集可以进行分析。我们将使用 tips 数据集。
Prompt: 告诉我更多关于seaborn库中内置的 `tips` 数据集。
了解数据集的内容是一个很好的起点。让我们从以下几点开始:
- 将数据集加载到pandas的数据框中,以及
- 获取列的基本信息和摘要统计信息,以更好地了解数据集。
Prompt: 让我们使用 `tips` 数据集。编写代码将数据集读取到pandas的数据框中,并获取可用字段的基本信息和摘要统计信息。
import seaborn as sns
import pandas as pd
# 从Seaborn加载 'tips' 数据集
tips_data = sns.load_dataset('tips')
# 从加载的数据集创建一个Pandas数据框
tips_df = pd.DataFrame(tips_data)
# 显示数据框的前几行
print("数据集 'tips' 的前几行数据:")
print(tips_df.head())
# 获取字段的基本信息
print("\n数据集 'tips' 的信息:")
print(tips_df.info())
# 获取数值字段的摘要统计信息
print("\n数值字段的摘要统计信息:")
print(tips_df.describe())
我们可以看到我们对数据集有相当丰富的摘要:
数据集 'tips' 的前几行数据:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
数据集 'tips' 的信息:
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 total_bill 244 non-null float64
1 tip 244 non-null float64
2 sex 244 non-null category
3 smoker 244 non-null category
4 day 244 non-null category
5 time 244 non-null category
6 size 244 non-null int64
dtypes: category(4), float64(2), int64(1)
memory usage: 7.4 KB
None
数值字段的摘要统计信息:
total_bill tip size
count 244.000000 244.000000 244.000000
mean 19.785943 2.998279 2.569672
std 8.902412 1.383638 0.951100
min 3.070000 1.000000 1.000000
25% 13.347500 2.000000 2.000000
50% 17.795000 2.900000 2.000000
75% 24.127500 3.562500 3.000000
max 50.810000 10.000000 6.000000
从汇总统计数据中,我们对数据集中的数值特征有了一个概念。我们知道了数值特征的最小值和最大值,平均值和中位数,以及百分位值。数据中没有缺失值,所以我们可以继续下一步。
探索数据集 – 什么、为什么和如何
现在我们对数据集有了一个概念,让我们进一步探索。
这个探索性数据分析的目标是更好地理解小费行为。为此,我们可以提供有用的可视化工具。这些应该有助于我们理解小费金额与数据集中各个分类变量之间的关系。
因为这是一个简单的数据集进行分析,让我们提示ChatGPT给我们一组进一步分析这个数据集的步骤。
提示:分析的目标是通过一些简单的可视化工具来获得一些关于小费行为的见解。为此提供一些步骤。
ChatGPT提供的数据探索步骤都是有效的。因此,我们将使用这些步骤,逐步更好地理解数据集。我们将提示ChatGPT生成代码,尝试运行生成的代码,并根据需要进行修改。
探索小费金额的分布
作为第一步,让我们可视化小费金额的分布。
提示:编写代码来绘制小费金额的分布。
ChatGPT给出了以下代码,用于生成直方图和核密度图,帮助我们对小费金额的分布有一个概念:
import matplotlib.pyplot as plt
# 创建小费金额的直方图
plt.figure(figsize=(8, 6))
sns.histplot(data=tips_data, x='tip', kde=True)
plt.title("小费金额分布")
plt.xlabel("小费金额")
plt.ylabel("频率")
plt.show()
基于分类变量分析小费行为
数据集中有很多分类变量。为了更好地理解这些类别变量的不同值的平均小费金额,绘制一个简单的条形图会有所帮助。
提示:使用所有可用的分类变量(’sex’、’smoker’、’day’和’time’)。编写代码来生成条形图,以理解小费行为。使用子图,这样我们可以在一个图中显示所有四个条形图。
以下是代码。代码运行没有错误;我只需要修改图像的大小:
# 定义要分析的分类变量
categorical_vars = ['sex', 'smoker', 'day', 'time']
# 为每个分类变量创建子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 5))
fig.suptitle("基于分类变量的小费行为", fontsize=16)
# 为每个分类变量生成条形图
for ax, var in zip(axes.flatten(), categorical_vars):
sns.barplot(data=tips_data, x=var, y='tip', ax=ax)
ax.set_xlabel(var.capitalize())
ax.set_ylabel("平均小费金额")
plt.tight_layout()
plt.show()
从这些图表中,我们可以看到性别和吸烟行为似乎不会影响小费的给出(这是预期的)。而日期和时间似乎会有影响。周末和晚餐的平均小费金额似乎稍高一些。
可视化总账单与小费金额之间的关系
现在,让我们看一下总账单如何影响支付的小费金额。
提示:我想了解总账单和小费金额之间的关系。请给我生成适当图表的代码。我相信一个简单的散点图会有帮助。
这是生成所需散点图的代码:
# 创建总账单与小费金额的散点图
plt.figure(figsize=(6, 4))
sns.scatterplot(data=tips_data, x='total_bill', y='tip')
plt.title("总账单与小费金额")
plt.xlabel("总账单")
plt.ylabel("小费金额")
plt.show()
我们可以看到总账单和小费金额之间存在一定的正相关性。
可视化聚会规模与小费金额之间的关系
作为下一步,让我们尝试可视化聚会规模与小费金额之间的关系。
提示:现在,我想了解小费金额随用餐人数(聚会规模)的变化。选择哪种图表好:条形图还是小提琴图?
由于我们还想了解小费金额的分布情况,让我们继续创建一个小提琴图。
提示:太棒了!请编写生成此可视化的代码。
这是代码:
# 创建聚会规模与小费金额的小提琴图
plt.figure(figsize=(6, 4))
sns.violinplot(data=tips_data, x='size', y='tip')
plt.title("聚会规模与小费金额")
plt.xlabel("聚会规模")
plt.ylabel("小费金额")
plt.show()
根据时间和日期理解小费行为
接下来,让我们了解时间和日期如何影响小费行为。
提示:我想了解小费行为如何根据时间和日期的不同而变化。有什么好的可视化方式?还请编写生成所需可视化的代码。
这段代码展示了如何使用日期作为索引,并聚合午餐和晚餐(一天中的时间)的小费金额均值:
# 创建根据时间和日期的平均小费金额的透视表
pivot_table = tips_data.pivot_table(values='tip', index='day', columns='time', aggfunc='mean')
# 创建基于时间和日期的小费行为热力图
plt.figure(figsize=(8, 6))
sns.heatmap(pivot_table, cmap='YlGnBu', annot=True, fmt=".2f", cbar=True)
plt.title("根据时间和日期的小费行为")
plt.xlabel("时间")
plt.ylabel("日期")
plt.show()
从热力图中,我们可以看到周日晚餐的平均小费金额略高于其他时间段。一般来说,对于同一天而言,晚餐的小费金额平均要高于午餐。
我们还可以看到,周六和周日的午餐数据不足。因为我们只有244条记录,所以可能没有任何周末午餐的记录。让我们继续验证一下。
提示:我想得到在周末点午餐的客户数。编写代码来过滤`tips_data`数据框并获取此计数。
以下是过滤数据框并获取仅包含周末午餐记录的子集的代码:
# 过滤周末午餐的数据
weekend_lunch_data = tips_data[(tips_data['time'] == '午餐') & (tips_data['day'].isin(['周六', '周日']))]
# 获取在周末点午餐的客户数
count = weekend_lunch_data['size'].count()
print("在周末点午餐的客户数:", count)
我们看到我们没有任何记录,所以我们的分析到目前为止是正确的:
在周末点午餐的客户数:0
就这样结束!我们通过与ChatGPT交互来探索了`tips`数据集,并生成了一些有用的可视化结果。
总结
在本文中,我们学习了如何利用ChatGPT进行数据探索。如果您对将ChatGPT整合到您的数据科学工作流中感兴趣,请查看本指南。它将通过一个示例项目以及使用ChatGPT进行数据科学实验的提示和最佳实践,有效地利用ChatGPT。
Bala Priya C是来自印度的开发人员和技术作家。她喜欢在数学、编程、数据科学和内容创作的交叉领域工作。她的兴趣和专长领域包括DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编码和咖啡!目前,她正在通过撰写教程、指南、观点文章等,与开发者社区学习和分享知识。