探索性数据分析(EDA)通常涉及一系列步骤和技术,这些步骤和技术有助于理解数据、数据结构和不同变量之间的关系。EDA 中常见的步骤和技术包括:
- 数据收集(Data Collection):从数据库、文件、外部 API 等不同来源收集数据。
- 数据清洗(Data Cleaning):
- 处理缺失值:补充或删除缺失数据。
- 处理异常值:识别和处理异常值。
- 数据类型转换:确保使用正确的数据类型进行分析(例如,将字符串转换为日期)。
- 数据清洗(Data Cleaning):
- 数据画像(Data Profilling):
- 使用描述性统计对数据集进行汇总。
- 理解数据的基本结构(行数/列数、值的范围等)。
- 数据画像(Data Profilling):
- 单变量分析(Univariate Analysis):
- 分析单个变量。
- 使用均值、中位数、众数、方差、标准差等度量方法。
- 可视化:使用直方图、箱形图、条形图对分类数据进行分析。
- 单变量分析(Univariate Analysis):
- 双变量/多变量分析(Bivariate/Multivariate Analysis):
- 探索两个或多个变量之间的关系。
- 散点图、成对图用于连续变量。
- 交叉表格、堆叠条形图用于分类变量。
- 定量数据的相关性分析。
- 双变量/多变量分析(Bivariate/Multivariate Analysis):
- 分组分析(Grouped Analysis):
- 基于类别或组聚合数据。
- 分析不同群体之间的模式或差异。
- 分组分析(Grouped Analysis):
- 时间序列分析(Time Series Analysis):
- 分析按时间顺序收集或索引的数据点。
- 识别趋势、季节性和周期。
- 时间序列分析(Time Series Analysis):
- 模式和异常识别(Identifing Patterns and Anomalies):
- 识别数据中出现的任何模式。
- 检测异常或不想要的值。
- 模式和异常识别(Identifing Patterns and Anomalies):
- 特征工程(Feature Engineering):创建新变量或修改现有变量以提高数据集对建模的适用性。
- 数据可视化(Data Visualization):
- 利用各种图表和图形对数据进行可视化。
- 相关性用热力图,时间序列用折线图等。
- 数据可视化(Data Visualization):
- 假设检验(Hypothesis Testing):根据数据模式制定和测试假设。
这些步骤中的每一步都可能涉及各种工具和编程语言,Python 和 R 是最流行的数据分析语言。Python 中的 Pandas、NumPy、Matplotlib、Seaborn 以及 R 中的 dplyr、ggplot2 等库通常用于 EDA 任务。根据数据的性质和所处理的具体问题,所使用的具体技术和工具可能会有很大差异。
3. 基于泰坦尼克号数据集的案例实现
这里,我们将使用比较有名的泰坦尼克号数据作为示例数据集(获取方式见文末)。按照上面的步骤指导 ChatGPT 帮我完成整个探索性分析案例。接下来,我将通过9个步骤指导 ChatGPT 帮我完成基于泰坦尼克号数据集的 EDA。
Step 1:数据收集(Data Collection)
这一步,我直接将数据集上传到聊天窗口,然后给 ChatGPT 以下指令:
ChatGPT:
首先,我将加载数据集并初步了解它的结构,例如行数和列数、每列中的数据类型,以及前几行数据,从而了解我们正在处理的内容。让我们从这个初始步骤开始。
import pandas as pd# Load the datasettitanic_data = pd.read_csv(r'datasets/titanic.csv')# Display the basic information and the first few rows of the datasettitanic_data.info()titanic_data.head()
通过输出,我们可以看出,泰坦尼克号数据集由418行和12列组成。以下是这些列的简要概述:
- PassengerId: Unique ID for each passenger.
- Survived: Survival status (0 = No, 1 = Yes).
- Pclass: Ticket class (1 = 1st class, 2 = 2nd class, 3 = 3rd class).
- Name: Passenger’s name.
- Sex: Passenger’s sex.
- Age: Passenger’s age.
- SibSp: Number of siblings/spouses aboard.
- Parch: Number of parents/children aboard.
- Ticket: Ticket number.
- Fare: Passenger fare.
- Cabin: Cabin number.
- Embarked: Port of Embarkation (C = Cherbourg, Q = Queenstown, S = Southampton).
从初步检查来看,很明显:
- “年龄”、“票价”和“客舱”列含有缺失值。
- 每一列的数据类型似乎都合适,既有数值(整数和浮点数)数据,也有分类(对象)数据。
Step 2:数据清洗(Data Cleaning)
同样给它一个指令(后续每一步都会给 ChatGPT 指令,故不再赘述):
ChatGPT:
基本就是根据我的指令分步骤进行分析,具体实现如下:
- 检测缺失值
# Inspecting missing valuesmissing_values = titanic_data.isnull().sum()missing_values
输出:
PassengerId 0Survived 0Pclass 0Name 0Sex 0Age 86SibSp 0Parch 0Ticket 0Fare 1Cabin 327Embarked 0dtype: int64
- 检查数据类型
# Checking data typesdata_types = titanic_data.dtypesdata_types
输出:
PassengerId int64Survived int64Pclass int64Name objectSex objectAge float64SibSp int64Parch int64Ticket objectFare float64Cabin objectEmbarked objectdtype: object
- 根据汇总统计信息识别潜在异常值
# Identifying potential outliers by looking at summary statisticssummary_statistics = titanic_data.describe()summary_statistics
基于上述分析及输出,我们可以得到:
缺失值(Missing Values)
- Age: 86 missing values.
- Fare: 1 missing value.
- Cabin: 327 missing values.
数据类型(Data Types)
每一列的数据类型似乎都合适:
- 数值数据(整型和浮点型):PassengerId, Survived, Pclass, Age, SibSp, Parch, and Fare。
- 分类/字符串数据(对象类型):Name, Sex, Ticket, Cabin, and Embarked。
潜在异常值(Potential Outliers)
从汇总统计来看:
Age
列的范围很广(0.17——76岁),考虑到多样化的乘客人口统计数据,这是合理的。
SibSp
和Parch
的范围都比较宽,但这反映了家庭规模的不同。
Fare
的范围也比较显著,最大值为512.3292,这似乎异常高,可能是一个异常值。
为了进一步检查潜在的异常值,特别是对 Fare
列,我们可以创建箱形图。这将为我们提供数据分布的可视化表示,并有助于识别极值。
我们将从潜在异常值的可视化检查开始,特别关注 Fare
和 Age
列,因为它们是关键的数值变量。我将为这些列创建箱形图,从而直观地检查分布并识别任何异常值。
暂无评论内容