两行代码深入EDA (目标分析、比较、特征分析、关联) !
Sweetviz 是一个开源 Python 库,只需两行代码即可生成精美的高密度可视化,从而启动 EDA(探索性数据分析)。Output 是一个完全独立的 HTML 应用程序。
该系统是围绕快速可视化目标值和比较数据集而构建的。其目标是帮助快速分析目标特征、训练与测试数据以及其他此类数据表征任务。
下面描述了用法和参数,您还可以找到一篇深入描述其功能的文章,并在此处查看操作示例。
Sweetviz 开发仍在进行中!如果您遇到任何数据、兼容性或安装问题,请告诉我!感谢您在此处报告问题跟踪系统中的任何 BUGS,并且欢迎您在此处的全新 GitHub“讨论”选项卡中提供有关使用/功能的反馈和问题!。
Colab 上带有文档的示例笔记本(Jupyter/其他笔记本也应该可以)
- 目标分析
- 显示目标值(例如泰坦尼克号数据集中的“幸存”)与其他要素的关系
- 可视化和比较
- 不同的数据集(例如训练数据与测试数据)
- 组内特征(例如男性与女性)
- 混合型协会
- Sweetviz 无缝集成了数值(皮尔逊相关性)、分类(不确定性系数)和分类数值(相关比)数据类型的关联,为所有数据类型提供最大程度的信息。
- 类型推断
- 自动检测数字、分类和文本特征,并可选择手动覆盖
- 概要信息
- 类型、唯一值、缺失值、重复行、最常见值
- 数值分析:
- 最小/最大/范围、四分位数、平均值、众数、标准差、总和、中值绝对偏差、变异系数、峰度、偏度
- 版本 2.2:Python 3.7+ 和 numpy 版本的大兼容性更新
- 版本 2.1:Comet.ml支持
- 2.0 版:Jupyter、Colab 和其他笔记本支持、报告缩放和垂直布局
(有关这些功能的文档,请参阅下面)
有些人通过行为升级经历了好坏参半的结果pip
。要从现有安装更新到最新版本,建议pip uninstall sweetviz
首先安装,然后简单安装。
Sweetviz 目前支持 Python 3.6+ 和 Pandas 0.25.3+。报告是使用基本“os”模块输出的,因此尚不支持需要自定义文件操作的自定义环境,例如 Google Colab,尽管我正在研究解决方案。
安装 sweetviz 的最佳方法(除了从源代码安装)是使用 pip:
pip install sweetviz
在极少数情况下,用户报告了诸如ModuleNotFoundError: No module named 'sweetviz'
和 之类的错误AttributeError: module 'sweetviz' has no attribute 'analyze'
。在这些情况下,我们建议如下:
- 确保您的脚本都没有被命名
sweetviz.py
,因为这会干扰库本身。删除或重命名该脚本(以及任何关联的.pyc
文件),然后重试。 - 尝试使用卸载库
pip uninstall sweetviz
,然后重新安装 - 该问题可能源于使用多个版本的 Python 或操作系统权限。以下 Stack Overflow 文章已解决了许多报告的问题:第 1 条、第 2 条、第 3 条
- 如果一切都失败,请在 github 上发布错误问题。感谢您抽出宝贵的时间,这可能有助于解决您和其他人的问题!
创建报告是一个快速的两行过程:
- 使用
DataframeReport
以下之一创建对象:analyze()
或compare()
compare_intra()
- 使用
show_xxx()
函数来呈现报告。您现在可以使用html或笔记本报告选项,以及缩放:(有关这些选项的更多信息如下)
创建报告有 3 个主要功能:
- 分析(...)
- 比较(...)
- 比较_内部(...)
要分析单个数据帧,只需使用该analyze(...)
函数,然后使用该show_html(...)
函数:
import sweetviz as sv
my_report = sv.analyze(my_dataframe) my_report.show_html() # Default arguments will generate to "SWEETVIZ_REPORT.html"
my_report = sv.analyze(my_dataframe) my_report.show_html() # Default arguments will generate to "SWEETVIZ_REPORT.html"" tabindex="0" role="button">
运行时,这将在默认浏览器中输出 1080p 宽屏 html 应用程序:
该analyze()
函数可以采用多个其他参数:
analyze(source: Union[pd.DataFrame, Tuple[pd.DataFrame, str]],
target_feat: str = None,
feat_cfg: FeatureConfig = None,
pairwise_analysis: str = 'auto',
verbosity: str = 'default'):
- 源:数据框(如示例中所示)或包含数据框和要在报告中显示的名称的元组。例如
my_df
或[my_df, "Training"]
- target_feat:表示要标记为“目标”的功能名称的字符串。目前只有 BOOLEAN 和 NUMERICAL 特 8000 可以作为目标。
- feat_cfg:一个FeatureConfig对象,表示要跳过的特征,或者在分析中强制采用某种类型。参数可以是单个字符串或字符串列表。参数为
skip
、force_cat
、force_num
和force_text
。“force_”参数覆盖内置类型检测。它们可以构造如下:
feature_config = sv.FeatureConfig(skip="PassengerId", force_text=["Age"])
- verbosity: [新]可以设置为
full
,progress_only
(仅显示进度条,但不显示报告生成消息)和off
(完全安静,错误或警告除外)。默认详细程度也可以在 INI 覆盖中的“常规”标题下设置(有关详细信息,请参阅下面的“配置文件”部分)。 - pairwise_analysis:相关性和其他关联可能需要二次时间 (n^2) 才能完成。默认设置(“auto”)将在没有警告的情况下运行,直到数据集包含“association_auto_threshold”功能。超过该阈值,您需要显式传递参数
pairwise_analysis="on"
(或="off"
),因为处理这么多功能将需要很长时间。该参数还涵盖关联图的生成(基于Drazen Zaric 的概念):
要比较两个数据集,只需使用该compare()
函数即可。它的参数与 相同analyze()
,只是插入了第二个参数来覆盖比较数据帧。建议使用 [dataframe, "name"] 格式的参数,以更好地区分基础数据帧和比较数据帧。(例如[my_df, "Train"]
vs my_df
)
my_report = sv.compare([my_dataframe, "Training Data"], [test_df, "Test Data"], "Survived", feature_config)
获得深入见解的另一种方法是使用比较功能将数据集分为 2 个子群体。
对此的支持是通过该compare_intra()
函数内置的。该函数采用布尔系列作为参数之一,以及用于命名(true,false)结果数据集的显式“名称”元组。请注意,在内部,这会创建 2 个单独的数据帧来表示每个结果组。因此,它更多的是手动进行此类处理的速记功能。
my_report = sv.compare_intra(my_dataframe, my_dataframe["Sex"] == "male", ["Male", "Female"], "Survived", feature_config)
创建报表对象后(例如my_report
上面的示例),只需将其传递到两个“show”函数之一:
show_html( filepath='SWEETVIZ_REPORT.html',
open_browser=True,
layout='widescreen',
scale=None)
show_html(...)将在给定文件路径中创建并保存 HTML 报告。有以下选项:
- 布局: 或
'widescreen'
或'vertical'
。当鼠标滑过每个功能时,宽屏布局会在屏幕右侧显示详细信息。新的(自 2.0 起)垂直布局在水平方向上更加紧凑,并且可以在单击时扩展每个细节区域。 - scale:使用浮点数(例如
scale = 0.8
或None
)来缩放整个报表。这对于使报告适合任何输出非常有用。 - open_browser:启用 Web 浏览器自动打开以显示报告。由于在某些情况下这是不需要的(或者会导致某些 IDE 出现问题),因此您可以在此处禁用它。
show_notebook( w=None,
h=None,
scale=None,
layout='widescreen',
filepath=None,
file_layout=None,
file_scale=None)
show_notebook(...)是从 2.0 开始的新功能,它将嵌入一个 IFRAME 元素,在笔记本中显示报告(例如 Jupyter、Google Colab 等)。
请注意,由于笔记本电脑通常是一个更受限制的视觉环境,因此使用自定义宽度/高度/比例值(w
、h
、scale
)甚至在 INI 覆盖中设置自定义默认值可能是一个好主意(见下文)。选项有:
- w (宽度):设置报告输出窗口的宽度(可能无法容纳完整报告;使用
layout
和/或scale
用于报告本身)。可以是百分比字符串 (w="100%"
) 或像素数 (w=900
)。 - h (高度):设置报告输出窗口的高度。可以是像素数 (
h=700
) 或“全”,以将窗口拉伸到与所有要素一样高 (h="Full"
)。 - 规模:与上面的 相同
show_html()
。 - 布局:与上面的相同
show_html()
。 - filepath:可选的输出 HTML 报告。
- file_layout:仅用于可选文件输出的布局(与
layout
上面show_html()
的相同) - file_scale:仅用于可选文件输出的比例(与
scale
上面show_html()
的相同)
该软件包包含一个用于配置的 INI 文件。您可以通过提供自己的设置来覆盖任何设置,然后在创建报告之前调用此设置:
sv.config_parser.read("Override.ini")
重要#1:最好在任何其他命令之前加载覆盖,因为许多 INI 选项在报告生成中使用。
重要#2:始终将标题行(例如[General]
)放在覆盖 INI 文件中的一组值之前,否则您的设置将被忽略。请参阅下面的示例。如果设置多个值,则仅包含该[General]
行一次。
您可以查看该文件sweetviz_defaults.ini
以了解可以覆盖的内容(警告:其中大部分内容正在进行中,并且没有详细记录),但最有用的覆盖如下。
覆盖其中任何一个(通过将它们放入您自己的 INI 中,再次不要忘记标头),以避免每次执行“show”命令时都必须设置它们:
重要提示:如果指定百分比,请注意双“%”
[Output_Defaults]
html_layout = widescreen
html_scale = 1.0
notebook_layout = vertical
notebook_scale = 0.9
notebook_width = 100%%
notebook_height = 700
[General]
use_cjk_font = 1
*如果设置多个值,则[general]
仅包含该[General]
行一次。
将切换图表中的字体以使用 CJK 兼容字体。尽管这种字体不是那么紧凑,但它会消除这些语言的任何警告和“未知字符”符号。
[Layout]
show_logo = 0
将从页面顶部删除 Sweetviz 徽标。
[General]
default_verbosity = off
*如果设置多个值,则[general]
仅包含该[General]
行一次。
可以设置为full
,progress_only
(仅显示进度条,但不显示报告生成消息)和off
(完全安静,错误或警告除外)。
Sweetviz 关联图和分析的洞察力和独特功能的主要来源是它统一在单个图(和详细视图)中:
正方形表示与分类特征相关的变量,圆圈表示数值之间的相关性。请注意,为了清楚起见,平凡的对角线留空。
重要提示:分类-分类关联(由显示不确定性系数的 SQUARES 提供)是 ASSYMMETRICAL,这意味着每行代表行标题(左侧)在每列上提供的信息量。例如,“性别”、“乘客等级”和“票价”是提供有关“幸存者”最多信息的元素。
对于泰坦尼克号数据集,这些信息相当对称,但情况并非总是如此!
相关性也会显示在每个功能的详细信息部分,并在适用时突出显示目标值。例如:
最后,值得注意的是,这些相关/关联方法不应被视为福音,因为它们对数据和关系的基本分布做出了一些假设。然而,它们可能是一个非常有用的起点。
从 2.1 开始,Sweetviz 现在完全集成了Comet.ml。这意味着只要您的 API 密钥在您的环境中正确设置, Sweetviz 就会自动将使用show_html()
和生成的任何报告记录到您的工作区。show_notebook()
此外,您还可以使用新功能report.log_comet(experiment_object)
将给定实验的报告显式上传到您的工作区。
您可以看到用于生成报告的Colab 笔记本的示例,以及Comet.ml 工作区中的相应报告。
您可以通过覆盖配置文件的部分来自定义 Sweetviz 报告在 Comet 工作区中的外观[comet_ml_defaults]
。有关使用 INI 覆盖的更多信息,请参阅上文。
您可以选择使用widescreen
(水平)或vertical
布局,并通过将以下内容放入覆盖 INI 文件中来设置您的首选比例:
[comet_ml_defaults]
html_layout = vertical
html_scale = 0.85
- 安装问题
请参阅本文档顶部的“安装问题和修复”部分
- 亚洲字符,“运行时警告:当前字体中缺少字形 ###”
请参阅上面有关 CJK 字符支持的部分。如果您发现需要其他字符类型,请务必在问题跟踪系统中发布请求。
- ...任何其他问题
开发正在进行中,因此绝对可以在此处的问题跟踪系统或我们的论坛中报告任何问题和/或建议(您应该能够使用您的 Github 帐户登录!)
这是我的第一个开源项目!我将其打造为最有用的工具,并帮助尽可能多的人进行数据科学工作。如果它对您有用,我们非常欢迎您的贡献,并且可以采取多种形式:
GitHub 上的 STAR 以及 Twitter 或 Instagram 帖子是最简单的贡献,并且可以极大地帮助该项目发展!如果您发现这个项目有用,那么您的这些快速行动将意义重大,并且可能大有帮助。
Kaggle 笔记本/帖子、Medium 文章、YouTube 视频教程和其他内容需要更多时间,但会更有帮助!
我预计,一旦该项目被越来越多的人使用各种新的(和“不干净的”)数据,就会出现很多怪癖。如果您发现错误,请在此处打开新问题。
为了使 Sweetviz 尽可能有用,我们需要听听您希望它做什么,或者它可以做得更好!前往我们的 Discourse 服务器并在那里发布您的建议;无需登录!。
我绝对欢迎在这个项目上获得的帮助,只需联系问题跟踪器和/或我们的 Discourse 论坛即可。
请注意,经过忙碌的开发期后,代码本身现在需要一些清理。:)
特别感谢通过报告、反馈和提交在 Github 上做出贡献的所有人!我想特别感谢Frank Male,他为解决问题和建立 2.2.0 的新构建管道提供了巨大的帮助。
用contrib.rocks制作。
我希望 Sweetviz 成为最好的东西的中心,一种获取最有价值的信息和可视化的方式,而无需重新发明轮子。
因此,我想指出一些鼓舞人心并融入 Sweetviz 的优秀资源:
- Pandas-Profiling是这个项目的最初灵感。Sweetviz 中包含了它的一些类型检测代码。
- Shaked Zychlinski: The Search for Categorical Correlation是一篇关于不同类型变量相互作用的精彩文章,它是 Sweetviz 中分析的基础。
- Drazen Zaric:Python 中更好的热图和相关矩阵图是我们关联图的基础。