原文:https://towardsdatascience.com/exploratory-data-analysis-eda-a-practical-guide-and-template-for-structured-data-abfbf3ee3bd9
“很多时候,最困难的不是画画,而是在一张白纸上画什么,这让人很困惑。”
同样地,对于数据科学,人们通常想知道在收到数据集后如何开始。这就是探索性数据分析(EDA)的用武之地。
根据维基百科,EDA“是一种通常采用可视化的方法分析数据集以总结其主要特征的方法”。用自己的话来说,就是在你开始从数据中提取洞察力之前,先了解你的数据,对数据有一定程度的熟悉。
由于EDA对于所有数据科学项目来说都是至关重要的初始步骤,懒惰的我决定编写一个代码模板(code template),用于在结构化数据集上执行EDA。中心思想是减少编码时间,更多地关注数据本身的分析。
EDA 在数据科学过程中的位置在我们深入研究EDA之前,首先必须了解EDA在整个数据科学过程中的位置。
维基百科的数据科学流程图
参考维基百科的流程图,数据收集完成后,在清理前进行一些处理,然后执行EDA。注意,在EDA之后,我们可能会回到处理和清理数据的阶段,也就是说,这可能是一个迭代过程。随后,我们可以使用清理过的数据集和来自EDA的知识来执行建模和报告。
因此,我们可以这样理解EDA的目标:
为了理解数据并从数据中找到线索,
- 为我们的模型制定假设和假说;
- 检查数据的质量,以便在必要时进一步处理和清洗。
为了更好地理解和说明 EDA 的概念,以下我们将使用SmartNoteBook来探索Kaggle上的数据集商店销售“train.csv”。由于该数据集的问题描述是为了预测商店销售额,因此,我们本次的EDA目标是:
- 检查有助于预测销售额的特征;
- 检查可能影响我们预测模型的异常或异常值。
我们的代码模板(code template)须执行下列步骤:
- 预览数据
- 检查条目和列类型的总数
- 检查任何空值
- 检查重复条目
- 数值数据的图形分布图(单变量和成对联合分布)
- 分类数据的计数分布图
- 按日、月、年频率分析数值型数据的时间序列
导入必要的依赖如下:
importpandasaspd
importnumpyasnp
importmatplotlib
importmatplotlib.pyplotasplt
importseabornassns
importmissingno
%matplotlibinline
初步数据处理
首先,我们读入数据集并生成数据的简单预览和统计信息。
df=pd.read_csv('train.csv')
df.info()
df.head()
来自SmartNoteBook的单元格输出
输出显示,我们有大约100万个条目,总共9列。没有空值,但某些列的数据类型需要更改。正如我们将在后面看到的,正确设置数据类型可以帮助我们进行数据科学处理。简而言之,有三种常见的数据类型(分类型、数值型和日期时间类型),我们对每种类型都有不同的EDA过程。
在我们的初步处理中,我们按以下方式更改了数据类型:
- 将标识符 Store 设置为 String。
- 对于分类(categorical)列,也就是那些可能的值数量有限且通常是固定的列,我们将它们的类型设置为“分类”。例如,性别、血型和国家都是分类数据。
- 对于数值型(numeric)列,我们可以将其类型设置为int64(整数)或 float64(浮点数)。例如,销售额、体温和人数都是数值型类型数据。
- 将Date设置为 datetime64数据类型。
#setidentifier"Store"asstring
df['Store']=df['Store'].astype('str')
#setcategoricaldata
df['DayOfWeek']=df['DayOfWeek'].astype('category')
df['Open']=df['Open'].astype('category')
df['Promo']=df['Promo'].astype('category')
df['StateHoliday']=df['StateHoliday'].astype(str).str.strip().astype('category')
df['SchoolHoliday']=df['SchoolHoliday'].astype('category')
#setdatetimedata
df['Date']=pd.to_datetime(df['Date'])
开始EDA
在设置了数据类型之后,我们就可以开始玩了(EDA)。
为了建立party,我们只需要复制、粘贴并运行包含各种函数的代码模板(code template),然后运行接受Pandas DataFrame作为输入的函数eda。
eda(df)
就是这样!简单吧!
现在让我们浏览一下输出的显著部分,以了解如何利用EDA结果。
缺失值和重复项在我们的示例中,没有缺失值的条目。
但是,如果有缺失值,代码将生成一个类似于下面的图表。注意CustomerID和Description下面的空白; 这些是缺少的值。因此,只需一瞥,我们就能够知道缺失值问题的程度。