——探索性数据分析(EDA):由浅入深的完整指南
目录
一、探索性数据分析(EDA)概述
探索性数据分析(Exploratory Data Analysis,EDA)是一种用于理解数据的初步分析方法,重点是通过洞察的方式揭示数据的基本特征和潜在模式。EDA不依赖于任何预设模型或假设,而是通过本身数据的分布、趋势和关联性,帮助分析者理解数据的结构。
- 目的:通过图形化和统计方法,发现数据中的异常、趋势、关系及潜在模式。
- 工具:EDA的主要工具包括描述性统计、数据可视化和异常值分析等。
二、EDA的基本步骤
可以将EDA分为几个主要步骤:数据加载与清洗、描述性统计分析、数据可视化等。下面每个步骤进行详细讲解。
1. 数据加载与清理
1.1数据加载
首先,需要从不同的数据源(如CSV文件、数据库、API等)加载数据。在Python中,通常使用Pandas
库来处理数据加载。
import pandas as pd
# 加载数据
data = pd.read_csv('your_data.csv')
1.2 数据清理
数据清理是EDA的重要部分。数据通常包含缺失值、重复数据或异常值,这些问题需要被处理。
- 缺失值处理:可以用均值、中差、最值来替换缺失值,或者删除缺失值的行。
- 重复值处理:去除数据中的重复行。
# 删除重复行
data.drop_duplicates(inplace=True)
# 用均值填补缺失值
data.fillna(data.mean(), inplace=True)
2. 描述性统计分析
描述性统计分析帮助快速了解数据的基本特征,包括均值、标准差、顶点等统计量。
- 数据类型与结构:了解数据的维度、每列数据类型以及是否包含缺失值。
# 查看数据结构和基本信息
data.info()
pandas.DataFrame.info()
方法会显示以下信息:
- 行数和列数:数据框的总行数和列数。
- 每列的名称和数据类型:列名以及数据类型(如
int64
、float64
、object
)。 - 非空数据的数量:每列中非空数据的个数。
- 内存占用:数据框占用的内存大小。
#举个栗子
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 4 non-null float64
1 income 4 non-null float64
2 education 5 non-null object
dtypes: float64(2), object(1)
memory usage: 203.0+ bytes
- 描述性统计量:查看数据的中心趋势、离散程度等统计量。
# 查看描述性统计信息
data.describe()
pandas.DataFrame.describe()
方法用于生成数据得分列的统计摘要,通常用于了解数据的分布和趋势。它会返回每个得分列的以下统计量:
- count:非空值的数量。
- mean:均值(平均数)。
- std:标准差,数据的离散程度。
- min:最小值。
- 25%:第一个四分(25%的数据小于这个值)。
- 50%:中分配(50%的数据小于该值,通常等于第二四分分配)。
- 75%:第三个四分(75%的数据小于此值)。
- max:最大值。
#举个栗子
age income
count 4.000000 4.000000
mean 32.500000 67500.000000
std 6.454972 12990.381295
min 25.000000 50000.000000
25% 27.500000 57500.000000
50% 32.500000 65000.000000
75% 37.500000 72500.000000
max 40.000000 80000.000000
这些统计量有助于初步理解数据分布,评估是否存在明显的偏差或不规则性的问题。
3. 数据可视化
数据可视化是EDA的核心内容。通过观察图表,能够更容易发现数据中的模式和异常。常用的可视化方法包括:
- 单变量分析:分析单个变量的分布情况,常用的图表有直方图、箱线图、密度图等。
import seaborn as sns
import matplotlib.pyplot as plt
# 绘制单变量直方图
sns.histplot(data['column_name'], kde=True)
plt.show()
- 多变量分析:分析不同变量之间的关系,常用的图表包括散点图、热力图、成对关系图等。
# 绘制相关性热力图
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
plt.show()
4. 异常值检测
异常值是指在数据中与其他数据点差异过大的值,这些值可能是错误的,也可能是有意义的。在EDA阶段,识别异常值对于数据质量非常重要。
- 箱线图:箱线图可以帮助检测数据中的离群点。
# 绘制箱线图查看异常值
sns.boxplot(x=data['column_name'])
plt.show()
- Z-score:Z-score可以用于检测异常值,通常Z-score大于3的值被认为是异常值。
from scipy import stats
z_scores = stats.zscore(data.select_dtypes(include='number'))
data_cleaned = data[(z_scores < 3).all(axis=1)] # 删除Z-score大于3的行
三、EDA简单实践示例
假设有一个客户包含购买记录的数据集(sales_data.csv)。下文将一步一步完成 EDA 过程。
步骤1:加载数据并检查基本信息
# 加载数据
data = pd.read_csv('sales_data.csv')
# 检查数据的基本信息
print(data.info())
步骤2:描述性统计分析
# 查看数值型数据的基本统计量
print(data.describe())
步骤3:数据可视化
- 单变量分析:产品价格分布情况。
sns.histplot(data['price'], kde=True)
plt.title('价格分布')
plt.show()
- 多变量分析:分析购买金额与顾客年龄的关系。
sns.scatterplot(x='age', y='purchase_amount', data=data)
plt.title('购买金额与顾客年龄的关系')
plt.show()
步骤4:异常值检测
sns.boxplot(x=data['purchase_amount'])
plt.title('购买金额的箱线图')
plt.show()
四、常见的EDA工具与库
- Pandas:处理数据清理、加载、转换等任务的基础工具。
- Matplotlib 和 Seaborn:用于数据可视化,支持多种图表类型。
- Plotly:用于制作交互式图表。
- Pandas Profiling 和 Sweetviz:自动生成数据分析报告,快速了解数据。
五、总结
EDA是分析数据的第一步,帮助理解数据的结构和潜在模式。通过数据清理、描述性统计、数据可视化和异常值检测等方法,能够发现数据中的问题,并为后续的建模或分析打下基础。在进行EDA时,结合实际业务背景和数据的具体特点,逐步推进分析,从基础到深度,确保得出可靠的结论。
希望本文能够帮助您了解与理解FTP的上传以及下载操作,并在实际业务中灵活应用。但由于作者水平有限,难免有不足之处,若疏漏或谬误,欢迎留言指正!!!