跳至主要内容

Python 中的 Pandas Profiling(ydata-profiling):初学者指南

学习如何在 Python 中使用 ydata-profiling 库,为包含众多特征的数据集生成详细报告。
· 9分钟 阅读

使用 AI 探索

当处理一个数据集(例如包含 10,000 行和 50 列)时,要快速获得整体概览并不容易。这正是 pandas Profiling 派上用场的地方。它通过自动生成一份全面的数据集报告来简化流程,大幅缩短探索大型数据集所需的时间。

在本文中,您将学习如何开始使用此前被称为 pandas Profiling 的工具。pandas-profiling 软件包名称近期已更名为 ydata-profiling。本教程将介绍如何从数据集中生成概要报告、报告包含哪些内容、如何阅读这份报告,以及如何保存报告以供后续使用。

什么是 pandas Profiling(ydata-profiling)?

Pandas Profiling 用于为数据集生成完整而详尽的报告,报告中提供了众多功能与自定义选项。报告包含诸如数据集统计信息、取值分布、缺失值、内存使用情况等,对高效地探索和分析数据非常有帮助。

Pandas Profiling 对探索性数据分析(EDA)也有很大帮助。EDA 用于理解数据的底层结构、发现模式,并以可视化形式生成洞察。

进行 EDA 往往需要编写许多代码,有时既复杂又耗时,但借助 Pandas Profiling,仅用几行代码就能自动化完成。

如果您需要回顾 EDA,可阅读 Python 探索性数据分析。

以下是一个概要报告的示例:

pandas 概要报告总览

图片作者自制

pandas Profiling 的优缺点

由于易用、省时且能生成交互式 HTML 报告,pandas profiling 被广泛用于 EDA。不过,将其用于超大数据集时也存在一些潜在不足。

优点

  • 易于使用:Pandas profiling 非常易用,仅需几行代码即可生成一份全面报告。
  • 节省时间:它能以最小的工作量生成涵盖广泛信息的报告,非常适合用于 EDA。
  • 交互式 HTML 报告:所生成的交互式 HTML 报告便于分析与理解,还可以深入查看特定变量并探索其分布。

缺点

  • 在大型数据集上的性能:主要缺点在于处理大型数据集时的性能。随着数据量增长,报告生成时间显著增加,从而降低了在大规模数据分析场景下的效率。

安装 pandas Profiling

安装 pandas Profiling 时,您可以根据偏好与环境选择 pip 或 conda。

使用 Pip:

打开命令提示符或终端并运行以下命令:

pip install ydata-profiling

使用 Conda:

打开 Anaconda PowerShell Prompt 并运行以下命令:

conda install -c conda-forge ydata-profiling

导入 Pandas Profiling

安装完成后,使用以下语句导入 ydata-profiling。

from ydata_profiling import ProfileReport

这将从 ydata_profiling 库中导入 ProfileReport 类。您可以使用该类为 DataFrame 生成概要报告。

生成概要报告

要生成概要报告,请按以下步骤操作:

  1. 导入 pandas。
  2. 从 ydata_profiling 库导入 ProfileReport 类。
  3. 使用您的数据创建一个 DataFrame。
  4. 使用 ProfileReport() 类并传入该 DataFrame。

下面是遵循上述步骤的简洁代码。首先导入必要的库,然后使用 read_csv() 函数读取 CSV 文件。本例使用的是畅销书 Top 100 书评的 CSV 文件。接着,使用 ProfileReport 类并将我们的 DataFrame 传入其中。

另外,我们设置了一个新标题“Trending Books”。默认标题有所不同,如需自定义,可在类中使用 title 变量。最后,您可以通过 profile 或 profile.to_notebook_iframe() 来生成并显示报告。

生成概要报告的代码

报告将按以下顺序生成:首先对整个数据集进行汇总;然后生成报告结构;最后显示报告。您可以将其保存为 HTML 文件,以便进一步分析。

概要报告正在生成

以下是生成的报告,包含概览、变量、交互、相关性、缺失值和样本等不同部分。

包含不同部分的概要报告完整总览

如果您是 EDA 新手,尤其是数据剖析方面的新手,请阅读 精酿啤酒的探索性数据分析:数据剖析。

探索生成的概要报告

报告由多个部分构成,下面我们逐一进行探索。

概览

该部分包含 3 个选项卡:Overview、Alerts 和 Reproduction。

Overview 选项卡包含数据集统计信息,例如变量(或不同列)的数量、存在缺失值的单元格数量、重复行数,以及数据集在内存中的大小。

在我们的数据集中,共有 8 个变量或列。其中 4 个为数值型(排名、图书价格、评分和出版年),其余 4 个为文本型(书名、作者、体裁和 URL)。重复行数为 0,表示没有重复行。另外,“rating” 列有 3 个缺失值。

报告概览部分的 Overview 选项卡

Alerts 选项卡包含与其他变量相关性的提示、缺失值、唯一值、零值等告警信息。

在我们的例子中,URL 和 Rank 列具有唯一值,而 rating 列有 3 个缺失值。

概览部分的 Alerts 选项卡

Reproduction 选项卡显示分析的开始与结束时间以及持续时长,并包含您所使用的软件版本(在我的示例中为 ydata-profiling v4.6.1)。

概览部分的 Reproduction 选项卡

变量

Variables 部分包含数据集的所有列。您可以点击切换箭头并选择任意一列。

变量部分及不同列

假设您选择了 rating 列,报告会显示该列在 100 行中包含 10 个唯一值,另外有 3 个单元格缺失。最小值为 4.1,最大值为 5,同时也显示了所有评分的均值。

变量部分的 rating 列

需要注意的是:右下角有一个 More Details 按钮。点击后可查看更多关于 rating 列的信息,例如中位数、标准差、变异系数以及该列的其他特征。

相关性

相关性用于研究两个变量之间的关系。下方热力图展示了所有变量两两之间的关系。Rank 与 Rank 的相关性为 100%,因此在左上角以深蓝色方块表示。

出版年与图书价格存在中等程度的相关性(约 0.75),用浅蓝色表示,因为并非完全相关。例如,图书价格是 20.93,出版年为 2023,这些数值在一定程度上相关。

相关性部分的热力图选项卡

缺失值

该部分提供数据集中缺失值的信息。在本部分的 Count 选项卡中,显示 rating 列有 3 个缺失值。

缺失值部分的 Count 选项卡

在缺失值部分的 Matrix 选项卡中,Rating 列出现了三条水平线,表示该列存在三个缺失值。

缺失值部分的 Matrix 选项卡

样本

该部分包含数据集的样本,展示了数据集的前 10 行与后 10 行。

样本部分的首尾行

保存概要报告

生成概要报告后,您可能希望将其保存以便后续使用,例如从报告中提取有用数据,或与其他应用集成。您可以将报告保存为 HTML 和 JSON 格式。to_file() 方法会将报告保存到 Jupyter Notebook 之外。

报告正在生成并保存为 HTML 和 JSON 格式

以下是 Pandas profiling 的完整代码:

from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv("trending-books.csv")
profile = ProfileReport(df, title="Trending Books")
profile.to_notebook_iframe()
profile.to_file("books_data.html")

高级用法

在生成报告时,我们只需传入 CSV 文件即可,未添加任何额外元素;操作均使用默认值。

但有时您可能希望省略某些部分或加入额外信息。这就是 Pandas Profiling 高级用法的用武之地。您可以通过更改默认配置来控制报告的各个方面。

如果您对更多数据分析与可视化工具感兴趣,请阅读 21 款必备 Python 工具。

数据集描述与元数据

在与同事共享或在线发布报告时,加入数据集元数据(如作者、版权持有人或说明)可能很重要。ydata-profiling 允许在报告中补充这些信息。

目前支持的属性包括 description、creator、author、url、copyright_year 和 copyright_holder。默认情况下,数据集信息会展示在报告的 Overview 部分。

from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv("trending-books.csv")
report = ProfileReport(
    df,
    title="Trending Books",
    dataset={
        "description": "This profiling report was generated for the datacamp learning resources.",
        "author": "Satyam Tripathi",
        "copyright_holder": "DataCamp, Inc.",
        "copyright_year": 2023,
        "url": "<https://www.datacamp.com/>",
    },
)
report.to_notebook_iframe()

以下是代码输出:

概览部分的数据集选项卡

除了提供数据集详情,用户在与团队成员及相关方共享报告时,通常还希望包含针对列的说明。默认情况下,这些说明会展示在报告的 Overview 部分。

from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv("trending-books.csv")
report = ProfileReport(
    df,
    title="Trending Books",
    variables={
        "descriptions": {
            "genre": "It contains the genre or category of the book. For example, it could be 'Mystery', 'Science Fiction', 'Romance', 'Fantasy', etc.",
            "url": "It contains Amazon links for each book.",
            "rating": "It contains the rating assigned to the book out of 5.",
        }
    },
)
report.to_notebook_iframe()

以下是代码输出:

概览部分的变量选项卡

剖析大型数据集

默认情况下, ydata-profiling 会对输入数据集进行全面汇总,以提供尽可能多的分析洞察。对于小型数据集,这些计算可以很快完成;但对大型数据集而言,可能会变得笨重低效。

ydata-profiling 提供了一个最小化配置文件,会默认关闭最耗时的计算。此配置会排除诸如相关性、交互等耗时部分。

from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv("trending-books.csv")
report = ProfileReport(df, minimal=True)
report.to_notebook_iframe()

ydata-profiling 还提供多种替代方案以应对大型数据集带来的挑战。可在此处了解更多。

结论

本文介绍了独特的库 ydata-profiling(前称 “Pandas Profiling”),只需几行代码即可创建报告。您学习了如何生成概要报告,并探索报告中的各个部分和选项卡。更重要的是,您了解了该库的高级用法,这将助您在数据科学之路上更进一步。

Pandas 是全球最受欢迎的 Python 库,广泛用于数据处理与数据分析。想要学习如何在分析前对真实世界的数据集进行抽取、筛选与转换,掌握 DataFrame 操作,请查看我们的课程 使用 pandas 进行数据处理。

Satyam Tripathi

作者

Satyam Tripathi

主题