像梦一样奔驰|一行 Python 命令搞定前期数据探索性分析


像梦一样奔驰|一行 Python 命令搞定前期数据探索性分析对于每个从事和数据科学有关的人来说 , 前期的数据清洗和探索一定是个花费时间的工作 。 毫不夸张的说 , 80%的时间我们都花在了前期的数据工作中 , 包括清洗、处理、EDA(Exploratory Data Analysis , 探索性数据分析)等 。 前期的工作不仅关乎数据的质量 , 也关乎最终模型预测效果的好坏 。
每当我们手上出现一份新的数据时 , 我们都需要事先通过人为地观察、字段释义等方式预先对数据进行熟悉与理解 。 在清洗、处理完数据之后才会开始真正的 EDA 过程 。
这个过程最通用的操作无非就是对现有的数据做基本性的统计、描述 , 包括平均值、方差、最大值与最小值、频数、分位数、分布等 。 实际上往往都是比较固定且机械的 。
在 R 语言中 skimr 包提供了丰富的数据探索性统计信息 , 比 Pandas 中的 describe() 基本统计信息更为丰富一些 。
像梦一样奔驰|一行 Python 命令搞定前期数据探索性分析01-skmir
但在 Python 社区中 , 我们同样也可以实现 skmir 的功能 , 甚至比 skmir 有过之而无不及 。 那就是使用 pandas-profiling 库来帮助我们搞定前期的数据探索工作 。
快速使用通过 pip install pandas-profiling 之后我们就可以直接导入并使用了 。 我们只需要通过其一行核心代码 ProfileReport(df, **kwargs) 即可实现:
import pandas as pdimport seaborn as snsfrom pandas_profiling import ProfileReporttitanic = sns.load_dataset("Titanic")ProfileReport(titanic, title = "The EDA of Titanic Dataset")如果我们是在 Jupyter Notebook 中使用 , 则会在 Jupyter Notebook 中渲染最后直接输出到单元格中 。
像梦一样奔驰|一行 Python 命令搞定前期数据探索性分析02-profile
pandas-profiling 库也扩展了 DataFrame 对象方法 , 这意味着我们也可以通过像调用方法一样使用 DataFrame.profile_report() 来实现和上述一样的效果 。
无论使用哪种方式 , 最后都是生成一个 ProfileReport 对象;如果要进一步贴合 Jupyter Notebook , 可以直接调用 to_widgets() 和 to_notebook_iframe() 来分别生成挂架或对应的组件 , 在展示效果上会更加美观 , 而不是在输出栏进行展示 。
像梦一样奔驰|一行 Python 命令搞定前期数据探索性分析03-widgets
如果不在 Jupyter Notebook 中直接使用 , 而是使用其他 IDE , 那么我们可以通过 to_file()方法来直接将报告输出 , 需要注意的是最后保存的文件名需要加上扩展名 .html 。
另外 , Pandas-profiling 还和多个框架、云上平台等进行了集成 , 能够让我们方便的进行调用 , 详情见官网(https://pandas-profiling.github.io/pandas-profiling/docs/master/rtd/pages/integrations.html) 。
进一步定制报告信息虽然生成的探索性报告基本上已经能满足我们了解数据的简单需求 , 但是当中输出的信息也有些不足或是冗余 。 好在 pandas-profiling 也给我们提供了自己定制的可能 。 这些定制的配置最终会写入到 yaml 文件中 。
在官方文档中列出了几个我们能够进一步调整的部分 , 分别对应了报告 Tab 栏的各部分标签: