Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Thomas Gey作者林亦霖校对于腾凯 编辑廖倩颖翻译

用pandas-profiling做出更好的探索性数据分析(附代码)

探索性数据分析已失势,Pandas-profiling万岁!用更省力的办法完美呈现你的数据。

一个充满坏数据的世界

在大部分数据科学领域中,我们获得的数据并不如网上专门为机器学习模型的应用而设计和准备的数据干净和完整。大部分情况下,外部来源的数据不是结构性差就是不完整,这时候就需要你来把这些数据变得更可用!

虽然数据科学家注意到了数据质量的重要性,但这对于商业领导者来说并不是个事。他们更关注如何尽早使用技术来维持竞争优势,而很少理解技术的实际应用。这意味着人们会在“量大出奇迹”的借口下,利用数据集里的一切信息并希望获得最好的结果。
 
由于思维方式的差异,在建模前一个数据科学家一般花费80%时间准备数据集。

为什么是80%时间?因为有缺失值,不平衡的数据,没有任何意义的字段,删除重复数据后的数据,过时数据和其他原因。人们最近才意识到数据的重要性。但是,即使趋势逆转,数据也很难轻易访问和结构良好。
 
一个坏数据集的后果很简单也很符合逻辑:用这些数据集建立的预测模型将会有低准确率和低效率。用不正确的数据训练模型会产生偏差,你的结果将与现实相去甚远。一个糟糕的模型无法被部署,所以对于公司来说开发这样的模型是净损失。

一个用锈铁制造的汽车不能正常驾驶,甚至在最糟糕的情况下,根本不能驾驶…没有人愿意使用或购买一辆生锈的汽车。
 
所以,数据集对于你的项目至关重要。项目在技术和经济层面上的成功取决于你所选择数据的质量。在机器学习项目中,跳过数据评估步骤可能会浪费大量时间,你将不得不从头开始项目。所以现在看来,数据科学家们花那么多时间调查和准备数据集是合乎逻辑的!
 
低质量数据只会导致低质量结果
神创造了探索性数据分析

概念性的方法

为了确保我们的数据集是有用的,一个好的实践操作是EDA,即探索性数据分析

EDA是一种熟悉数据集的方法。通过这个反思性工作,可以保证处理的是有趣,连贯和干净的数据。这一步是可视化的而且是基于摘要统计和图形表达。
 
通过EDA,数据科学家可以发现哪一个特征重要或者特征之间的相关性。此外,EDA可以让你发现错误或者缺失值,检测异常值或者驳回一个假设。特征变量的选择之后会被用于机器学习
 
一般来说,在探索性数据分析之后的步骤是特征工程/数据增强,在这一过程中,你需要把原始数据进行处理,赋予他们额外价值。
 
一个EDA基本例子:

对于这个例子,我使用了一个非常适合EDA的数据集,即FIFA 19完整的球员数据集。它包含多种数据类型,缺失值,并且有许多适用的指标。对这个数据集的几个完整的分析可以在这里找到。我使用JupyterLab作为IDE,因为它的灵活性和用户友好的界面。

让我们使用pandas库从CSV文件中导入数据:
import pandas as pd
%time data = pd.read_csv("fifa.csv", delimiter=',', index_col=0)

加载速度很快。现在介绍一下data.sample(5),这是一个随机选择行的方法。如果不知道数据是如何排序的,最好使用.sample()而不是.head()。
data.sample(5)

 
让我们用.describe()来做一些描述性统计。该方法“总结了数据集分布的集中趋势、分散和形状,不包括NaN值”。
data.describe()

现在我们有了描述性统计数据,我们将会检查缺失数据。我们将会仅仅按顺序列出10个有超10%缺失值的特征:
total = data.isnull().sum().sort_values(ascending=False)  
 percent = (data.isnull().sum()/data.isnull().count()).sort_values(ascending=False)  
 missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Missing Percent'])  
 missing_data['Missing Percent'] = missing_data['Missing Percent'].apply(lambda x: x * 100)  
 missing_data.loc[missing_data['Missing Percent'] > 10][:10]
正如你看到的,对于数据科学家来说在notebook上做探索性数据分析是非常方便和高效的。但是,视觉效果仍然很有总结性。让我们一起看看如何用pandas-profiling来更省力地动态展现数据。
 
只有通过观察,我们才能学习。
Pandas-profiling,我们的救世主!

概念

Github描述:”从pandas Dataframe生成概况报告(profile)“

Pandas-profiling将所有东西打包形成一个完整的EDA:最常见值、缺失值、相关性、分位数和描述性统计、数据长度等等。有了这些指标,您将很快看到数据的分布和差异。这些信息至关重要,帮你判断数据将来是否有用。
 
度量指标在互动性HTML报告中呈现。

pandas-profiling在HTML报告中以结构化的方式展现了不同指标。得益于它的交互性,我们能够很容易地从一个特征转换到另外一个并且访问其指标。

gif图片可以打开一下地址查看:

https://miro.medium.com/max/1400/1*48uRp4eMwtQgb4raZRRAtA.gif

 
一起来看看如何用它:

pip install pandas-profiling

使用我们的FIFA数据集:
import pandas as pd
import pandas_profiling
data_fifa = pd.read_csv('fifa.csv')
profile = data_fifa.profile_report(title='Pandas Profiling Report')
profile.to_file(output_file="fifa_pandas_profiling.html")
在以上的代码中,我们仅仅导入了pandas和pandas-profiling,读取我们的CSV文件并调用profile_report()方法,因为pandas_profiling使用data_fifa.profile_report()来扩展pandas DataFrame。然后,使用.to_file()将ProfileReport对象导出为HTML文件。

大功告成!至此,我们的HTML文件位于该文件夹的根目录:
上图展现了报告的“概述”部分。这部分简略描述了变量的类型,缺失值或者是数据集的大小。
 
Pandas-profiling使用matplotlib作为图形库和jinja2作为其接口的模板引擎。
 
作为一个自由职业者,当我必须为客户处理一个新的数据集时,我总是先生成一个pandas profiling,它帮助我吸收数据集的信息。这种做法允许我量化数据集的处理时间。多少特征看起来是正确的?多少包含缺失值?缺失值的百分比是多少?哪些变量互相依赖?
 
另外,此外,该报告还可以作为展示界面,向客户介绍数据健康度的全局情况。无需在你的Jupyter notebook上展示你的分析,当中还夹杂着代码和图表,该报告按照特征整合了各种度量指标,并且有更友好的界面。我的客户喜欢对委派给我的任务有一个完整的跟踪,也希望定期了解我的进展。通常我使用该报告提供数据的健康状态。这一步之后是更深入的数据分析和可视化。

结论

大数据的潜力还在不断增长。充分利用这一优势意味着公司必须把分析和预测系统并入战略视野中,并且用此来做出更好更快的决策。通常来说我们拿到的数据含有错误和缺失值。为了使工作变得有效率,这些数据必须被分析和处理。这就是数据科学家要做的工作。数据科学家用pandas-profiling可以更省力地产出快速的探索性数据分析报告。这份报告清晰且容易使用, 还可以被任何有点统计基础的人看懂。
 
有了对数据的全局理解,您就会有一些思路去进一步分析、处理数据或寻找外部数据源以提高数据质量。

我希望您喜欢这个关于pandas-profiling的小介绍!这是我在medium上写的第一篇文章,欢迎评论和改进建议!
原文标题:

A better EDA with Pandas-profiling

原文链接:
https://towardsdatascience.com/a-better-eda-with-pandas-profiling-e842a00e1136
THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程机器学习Pandas-profiling数据分析
2
相关数据
数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

特征工程技术

特征工程是利用数据所在领域的相关知识来构建特征,使得机器学习算法发挥其最佳的过程。它是机器学习中的一个基本应用,实现难度大且代价高。采用自动特征工程方法可以省去采用人工特征工程的需求。Andrew Ng 说“挖掘特征是困难、费时且需要专业知识的事,应用机器学习其实基本上是在做特征工程。”

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

合合信息机构
推荐文章
暂无评论
暂无评论~