独家 | 自动化探索性因素分析(EDA)来更快更好地理解数据

ecb90c391cb278a557c800b3a1da43d0.png

作者:Mochamad Kautzar Ichramsyah
翻译:陈超

校对:赵茹萱

本文约3900字,建议阅读10分钟
本文将会用常用的iris数据集来学习如何在R和Python中实现探索性因素分析的过程。

c1f4b215aeffe052ce2620139f58a232.png 图片来自Charlotte Karlsen, Unsplash

什么是EDA?

EDA是我们更好地理解数据集的重要方式之一。几乎所有的数据分析和数据科学专家都在产生新观点或者数据建模之前先做EDA。在现实生活中,依赖于数据集的复杂度和完整性,这个过程会花费大量时间。当然,变量越多,我们在下一步开始前就需要探索越多才能获得结论。

这就是为什么我们会用R或者Python这些最常见的数据分析程序语言,一些包能够帮我们更快更容易地完成EDA,但不会做得更好。为什么呢?因为它只会给我们展示一个结论,我们需要深入探索我们觉得“有趣”的变量。

“80/20规则”适用:80%的数据分析师或科学家的宝贵时间花在简单的查找、清理和组织数据上,只剩下20%的时间用于执行分析。

我们需要哪一个库呢?

在R中我们可以用这些库:

1. dataMaid

2. DataExplorer

3. SmartEDA

在Python中,我们可以使用这些库:

1. ydata-profiling

2. dtale

3. sweetviz

4. autoviz

让我们试用一下上面列出的每个库,看看他们长什么样子以及如何帮助我们做探索性数据分析!在本文中,我将会用常用的iris数据集来学习如何在R和Python中编码。

在R中你可以使用以下代码加载iris数据集:

# iris is part of R's default, no need to load any packages
df = iris
# use "head()" to show the first 6 rows
head(df)

3789f80e1888769a4181cf9144b4255b.png 

e08c8b7476f2766cfa6fc703993b6c02.png

图1。 在R中加载' iris '数据集

在Python中,你可以使用以下代码来加载iris数据集:

# need to import these things first
from sklearn.datasets import load_iris
import numpy as np
import pandas as pd
# use load_iris
iris = load_iris()
# convert into a pandas data frame
df = pd.DataFrame(
  data= np.c_[iris['data'], iris['target']],
  columns= iris['feature_names'] + ['species']
)
# set manually the species column as a categorical variable
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)
# use ".head()" to show the first 5 rows
df.head()

17c7f5f17176920f14441982baee1e57.png 

a3342ceb186f9ff42e250d62f6560c46.png

图2。在Python中加载' iris '数据集

R : dataMaid

首先,我们需要执行以下的样例代码:

# install the dataMaid library
install.packages("dataMaid")
# load the dataMaid library
library(dataMaid)
# use makeDataReport with HTML as output
makeDataReport(df, output = "html", replace = TRUE)

从第一个截图(图3)中,我们已经获得了关于iris数据集的大量信息:

1. 观测值的个数是150。

2. 变量的个数是5。

3. 根据每个变量的数据类型执行变量检查,例如识别错误编码的缺失值、< 6 obs的水平和异常值。

dfdb11726227aface54c2ff99ec22da6.png

c8411f3fb7908bd03044a77945d0cf6f.png 图3。使用iris数据集的' dataMaid '创建的报告的第一个截图

从第二个截图(图4):

1. 变量的汇总表包括变量类、唯一值、缺失值和检测到的任何问题。我们可以看到Sepal.Width和Petal.Length变量检测到问题。

2. Sepal.Length提供了中心测量,包括单变量分布直方图。

3. Sepal.Width列出了可能有的异常值。这就是为什么汇总表显示了检测到也有问题。

70f51ab7a86c4ec58aaf6fd750f910c3.png 

02b40ca3891c01b7e17a0fed0939a195.png

图4。使用iris数据集的' dataMaid '创建的报告的第二个截图

第三张截图(图5):

1. Petal.Length可能有列示的异常值。

2. Petal.Width提供了中心测量,包括单变量分布直方图。

3. 将Species作为目标变量检测为一个factor,每种类型的数据计数相等,均为50。

2eb4346a11dc06985c741db643ffe867.png 

d8c6d796146749677a6761a964663002.png

图5。使用iris数据集的' dataMaid '创建的报告的第三个截图

根据上面使用R中的dataMaid创建的数据报告,我们只需要执行一行代码,就可以获得关于iris数据集的大量信息。

R:DataExplorer

首先,我们需要执行下面的简单代码:

# install the DataExplorer library
install.packages("DataExplorer")
# load the DataExplorer library
library(DataExplorer)
# use create_report
create_report(df)

从第一个到第六个截图(图6、7、8、9、10、11),我们得到的信息与前一个包没有太大的不同。

432b42e409d1dc764cefdb9e6aafdce9.png 

dcd41680337ff4026685e879ee49bc34.png

图6。使用iris数据集的“DataExplorer”创建的报告的第一个截图

97471a7b7d01652cc38795ec18076019.png 

542dbdefaec6859921ccc607c2d2d8eb.png

图7。 使用iris数据集的“DataExplorer”创建的报告的第二个截图

268fd2a9cfde55d845ba2c4beb9e8ffa.png 

1326f761b2aa49b73f516d26959cc6eb.png

图8。 使用iris数据集的“DataExplorer”创建的报告的第三个截图

3b5c4f3a09d3c34b3883a88946e577c0.png 

981c7baa75ec2b62b0614c1f37d61eea.png

图9。 使用iris数据集的“DataExplorer”创建的报告的第四个截图

22d449dbc716a1fd732b425f9dc45f98.png 

013002599722ec73bc06d74d3d314428.png

图10。 使用iris数据集的“DataExplorer”创建的报告的第五个截图

695a1c963d1510f91b0ab8bf7542c95d.png 

ab77ccf3136630a7112e19285b2e7e90.png

图11。 使用iris数据集的“DataExplorer”创建的报告的第六个截图

从第七个截图(图12)中,我们得到了iris数据集中每个数值变量的QQ图。

0b5d01363e68234297015b2676d5f26f.png 

854fa2e7609390e74e9264b5109331aa.png

图12。 使用iris数据集的“DataExplorer”创建的报告的第七个截图

从第八张截图(图13)中,我们得到了iris数据集中每个变量的相关矩阵。我们可以看到一些信息,如:

1. Petal.Width和Petal.Length具有很强的正相关(0.96),这意味着在iris数据集中,花瓣宽度越宽,花瓣长度越长。

2. Species_setosa和Petal.Length与鸢尾的负相关系数为-0.92,表明iris的花瓣长度越短,是山鸢尾的可能性越高。

3. 使用上面的例子,请使用这个相关矩阵提供你的发现。

65ae43eeb6dab85fff2b82c5a52cdc31.png 

6adfeef4ebf111700318aaf5eec18fdd.png

图13。 使用iris数据集的“DataExplorer”创建的报告的第八个快照

第九张截图(图14)使用主成分分析(PCA),提供了由主成分解释的方差的百分比,其中,标签表示解释方差的累积百分比,它显示62%,越高越好。对于PCA的解释,我想我需要另一篇文章进行说明。

8e4e3f7d2d8821b8403a840d8d507776.png 

b54d4f3170ffefeb2c5960befd6dde14.png

图14。使用iris数据集的“DataExplorer”创建的报告的第九个截图

第十张截图(图15)提供了每个变量的相对重要性,它显示了Petal.Length的重要性最高,约为0.5,其次是Petal.Width等等。

3fb7ed1978f25e0f708c94677a2b8b2d.png 

a24d69d23f38d1f321830bbe2eba76f9.png

图15。使用iris数据集的“DataExplorer”创建的报告的第10个截图

R:SmartEDA

首先,我们需要执行下面的简单代码:

# install the SmartEDA library
install.packages("SmartEDA")
# load the SmartEDA library
library(SmartEDA)
# use ExpReport
ExpReport(df, op_file = 'SmartEDA_df.html')

从图16、17、18、23和24中,我们得到的信息与之前的包没有太大的不同。

50ce97ce041e23bb32925df2abdf4107.png 

548a1028c0ee895507511186f1598e0b.png

图16。使用iris数据集的“SmartEDA”创建的报告的第一个截图17fb5d586126ec7f80c1e9abdc58e3d7.png 

f704a74618667bb47550da837f22e3b1.png

图17。使用iris数据集的“SmartEDA”创建的报告的第二个截图

de5a787822e528af8c16fd0cb261338b.png

57b3fbcbcd1f7b14ff518fe0abbfc85a.png 图18。使用虹膜数据集的“SmartEDA”创建的报告的第三个截图

从图19中,我们看到了每个变量的密度图,包括偏度和峰度测量,这是用来告诉我们数据是否正态分布的。

5e0f9e1ccc9935ebf88b7046d645f077.png 

45fd836a5f42951cddf9b41348f4c7af.png

图19。使用iris数据集的“SmartEDA”创建的报告的第四个截图

从图20、21和22中,我们看到了iris数据集中可用的数值变量之间的散点图,它直观地告诉了我们相关性,为我们提供了与数字格式相关矩阵类似的信息。

d58c886e58c0f4cc632923f807a82ea8.png 

f38eaf705c64597a513b640e7b01aed6.png

图20。 使用iris数据集的“SmartEDA”创建的报告的第五个截图

ca4797aff0730f99acfb746e7728fdba.png 

a9140ca88df6662b665e01dea30fe928.png

图21。 使用iris数据集的“SmartEDA”创建的报告的第六个截图

1ffb7449ca1c18ae5c012ecf2f9042fe.png 

2b29005262c5a01851752aba95c6371c.png

图22。使用iris数据集的“SmartEDA”创建的报告的第七个截图

13df0bc37788885ce2b1162b71d118e0.png 

a49ca946e82849680569690c1889984a.png

图23。使用虹膜数据集的“SmartEDA”创建的报告的第九个截图

320bd953148731fc9679e37997bc6939.png 

43043df7262e87fd0f2da05f5ad190a8.png

图24。使用虹膜数据集的“SmartEDA”创建的报告的第十个截图

R:结论

使用上面的三个包,我们得到了很多关于iris数据集的信息。这比我们尝试手动创建它要快得多,但这还不够,正因如此,我在标题中说“…更快更容易…”,因为它只给了我们一个iris数据集的概略,但至少它给了我们哪些事情我们可以开始工作,而不是寻找起点,比如:

1. 没有丢失的变量/没有错误编码的变量,我们可以跳过这些步骤。

2. 在某些变量中检测到离群值,我们可以通过使用任何适当的方法来处理离群值来开始清理数据,而不是手动逐个查找哪些变量有离群值。

3. 如果需要,我们可以开始处理非正态分布的变量。

4. 根据相关矩阵和散点图,我们可以看到哪些变量是强相关的,哪些是弱相关的。

5. 使用主成分分析(PCA)提供了由主成分解释的方差的百分比,标签表示已解释方差的累积百分比

6. iris数据集的每个特征的相对重要性也显示在这个自动化的EDA中

Python: ydata-profiling

首先,我们需要执行下面的简单代码:

# install the ydata-profiling package
pip install ydata-profiling
# load the ydata_profiling package
from ydata_profiling import ProfileReport
# use ProfileReport
pr_df = ProfileReport(df)
# show pr_df
pr_df

大多数情况下,它显示类似的信息。我将尝试提及一些与以前的软件包完全不同的信息:

1. 在图26中,我们总结了哪些变量具有高相关性。

2. 总的来说,与以前的包相比,输出更具交互性,因为我们可以单击以移动到其他选项卡,并选择要显示的特定列。

964e12b9865d2929a9b3c383f38a5a1b.png 

a570dcb180b55fab73d36a85a09972e5.png

图25。使用iris数据库的' ydata_profiling '创建的报告的第一个截图

e753fb78582fc0440369c6d6f1052e1c.png 

955495ce0aefaea542056fe8c19c0382.png

图26。使用iris数据集的' ydata_profiling '创建的报告的第二个截图

3eb8b972f3e7ff8ccd658e8910ba1cd2.png 

ea6d8dba9cf489e690e3768475eab4e1.png

图27。 使用iris数据集的' ydata_profiling '创建的报告的第三个截图

4d77be458fcd189b110fa2a075dfe95f.png 

ae190127becb05b2ba9b511e4e8b3220.png

图28。 使用iris数据集的' ydata_profiling '创建的报告的第四个截图

183419b6f4f231bc8491610ad85c20d0.png 

ebc0fc2edbc13e2516127ed7f035a770.png

图29。使用iris数据集的' ydata_profiling '创建的报告的第五个截图

f6fee96e17caf6a34ff235821cacc930.png 

5aebaac55a289657e3470a2addb905b9.png

图30。 使用iris数据集的' ydata_profiling '创建的报告的第六个截图

af379d72ae68b0a843b30a7139b53d60.png 

c3b922b27ef02d6e7d932c50a5c5e7ee.png

图31。 使用iris数据集的' ydata_profiling '创建的报告的第七个截图

74924d73442a17ddc3570a736f8fbe88.png 

8145c415610c350600d864133f6a83e2.png

图32。 使用iris数据集的' ydata_profiling '创建的报告的第八个截图

da333e1c03f3f5bbc73c293ac1442045.png 

88b27902eda3bd743ec57d016fed23d6.png

图33。 使用iris数据集的' ydata_profiling '创建的报告的第九个截图

Python: dtale

首先,我们需要执行下面的简单代码:

# install the dtale package
pip install dtale
# load the dtale
import dtale
# use show
dtale.show(df)

这个包的输出和以前的包有很大的不同,在如何使用方面,内容都很相似,但是它让我们可以更好的去探索。

e805a8a73079dafefc1150f75283d269.png 

69d1362fe43808d58a7ea2462cff26f0.png

图34。使用iris数据集的' dtale '创建的报告的第一个截图

40b5dae2c7a4c189f001dfe3e2947807.png 

5e3fe833f444726c36cb496119a76ae3.png

图35。使用iris数据集的' dtale '创建的报告的第二个截图

07f3a3a9799bd88519c1ebf30a4a7544.png 

13b9185fe0b04ea3f01d899b0928dadf.png

图36。使用iris数据集的' dtale '创建的报告的第三个截图

147df2d84167b406fc3d6fb494118d10.png 

4e9783f7a543cfdfd6697bd60a61a3d9.png

图37。使用iris数据集的' dtale '创建的报告的第四个截图

Python: sweetviz

首先,我们需要执行下面的简单代码:

# install the sweetviz package
pip install sweetviz
# load the sweetviz
import sweetviz
# use analyze
analyze_df = sweetviz.analyze([df, "df"], target_feat = 'species')
# then show
analyze_df.show_html('analyze.html')

使用这个包,UI和UX有很大的不同,请欣赏!

0c93cfdec8aa5d5e1eda8323cd3c8831.png 

2459d289a956333678ae5cb2e47875d0.png

图38。使用iris数据集的' sweetviz '创建的报告的第一个截图

460065881e5898d2a06852c1d907d8db.png 

9a0569eadaf94768bcdcd51ae6f71c3a.png

图39。 使用iris数据集的' sweetviz '创建的报告的第二个截图

人类是视觉动物,这意味着人脑处理图像的速度是文本的6万倍,传递到大脑的信息中有90%是视觉信息。可视化信息使协作变得更容易,并产生影响组织绩效的新想法。这解释了为什么数据分析师在数据可视化上花费的时间是最多的。

Python: autoviz

首先,我们需要执行下面的简单代码:

# install the dtale package
pip install autoviz
# load the autoviz
from autoviz import AutoViz_Class
# set AutoViz_Class()
av = AutoViz_Class()
# produce AutoVize_Class of df
avt = av.AutoViz(
    "",
    sep = ",",
    depVar = "",
    dfte = df,
    header = 0,
    verbose = 1,
    lowess = False,
    chart_format = "server",
    max_rows_analyzed = 10000,
    max_cols_analyzed = 10,
    save_plot_dir=None
)

使用上面的代码,在浏览器中生成了一些选项卡。使用这个包我们可以看到的新东西:

1. 输出在浏览器的多个选项卡中生成,以前的包将所有输出显示在一个选项卡中。

2. 每个变量的小提琴图。它是箱线图和核密度图的混合版本。仍然显示与以前的包相似的信息。

9993d11b958058106b4a5c6c3058e249.png 

8f683efe24069021d6b617d540fca36d.png

图40。使用虹膜数据集的“autoviz”创建的报告的第一个截图

77103e81f8fc5a931222497acfa44dbb.png 

58a8e3c0bba344bd98643bc24bbae698.png

图41。使用iris数据集的“autoviz”创建的报告的第二个截图

513d8632b5e0d5278e168da059c861d9.png 

57bd51d387aecd6279e37c569a57410f.png

图42。使用iris数据集的“autoviz”创建的报告的第三个截图

399fe9380f296aaf4bfa3d98af9eaf7d.png 

f9084b54b30c5d95b9c59da2e7c2af62.png

图43。使用iris数据集的“autoviz”创建的报告的第四个截图

127396deb895e6f5547fd0e3a09cb517.png 

37f8ee627cd32b9e695232cf2ef1577f.png

图44。使用虹膜数据集的“autoviz”创建的报告的第五个截图

Python:结论

使用上面的四个包,我们得到了很多关于iris数据集的信息,与R包相比没有太大的区别,但是有更多的透视图。一些注意事项:

1. 与R包相比,Python包的输出大多更具交互性。

2. 安装过程中可能会出现一些错误。对于这个dtale,常见的错误是关于jinja和escape。你可以参考这篇文章找到解决方案。

3. 在一些包中,代码不像在R包中那么简单,但我认为它不是大问题,只要我们勤于阅读指导手册,就很好。

结论

我要用哪一个?哪一个是最好的?哪一个与我的数据集最兼容?

视情况而定。

我们尝试探索、解释上面的每个包并精确地使用它,其目的并不是作为主要的解决方案。毕竟,能够帮助我们有效地减少EDA时间已经是一件好事了。在我看来,探索数据应该是数据分析的“乐趣”部分,所以不要害怕亲手做EDA的“肮脏”,有时非自动化方法仍然是最好的。

感谢您的阅读!

哇,我刚刚意识到这篇文章包含44张图片。如果您读到了这里,我很感激您想通过我的文章阅读和学习如何自动执行EDA的过程。我希望你喜欢这篇文章,并学习如何在你作为数据分析/科学专业人士的旅程中使用它。

原文标题:

Automate the exploratory data analysis (EDA) to understand the data faster and easier

原文链接:

https://medium.com/codex/automate-the-exploratory-data-analysis-eda-to-understand-the-data-faster-not-better-2ed6ff230eed

编辑:于腾凯

校对:邱婷婷

译者简介

f3a30b946043016d4ec18a2fca3c5c6a.jpeg

陈超,北京大学应用心理硕士,数据分析爱好者。本科曾混迹于计算机专业,后又在心理学的道路上不懈求索。在学习过程中越来越发现数据分析的应用范围之广,希望通过所学输出一些有意义的工作,很开心加入数据派大家庭,保持谦逊,保持渴望。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

32eaf3d4dd7d8ce9eb9f2b34670d0253.png

点击“阅读原文”拥抱组织

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值