D-Tale - 强大的 Pandas 数据可视化分析工具

D-Tale 是一个功能强大的数据分析工具,提供了 Pandas 数据结构的可视化界面,支持数据编辑、统计分析、图表制作等功能

分类: thirdparty 难度: 中级 更新: 2024-01-15
dtale 数据分析 数据可视化 pandas GUI 交互式分析 Flask React

D-Tale - 强大的 Pandas 数据可视化分析工具

📝 概述

D-Tale 是一个 Flask 后端和 React 前端的结合体,为您提供了一种简单的方法来查看和分析 Pandas 数据结构。它与 ipython 笔记本和 python / ipython 终端无缝集成。目前,该工具支持 DataFrame、Series、MultiIndex、DatetimeIndex 和 RangeIndex 等 Pandas 对象。

D-Tale 是 pandas 的 GUI 工具,提供数据的所有详细信息,是一个强大的数据可视化数据分析工具。

🎯 学习目标

  • 掌握 D-Tale 的安装和启动方法
  • 熟悉数据加载和基本编辑操作
  • 学会使用各种数据分析和可视化功能
  • 掌握过滤、排序和统计分析功能
  • 了解图表制作和数据导出方法

📋 前置知识

  • Python 基础语法
  • Pandas 数据处理基础
  • 数据分析基本概念

🔍 详细内容

安装配置

安装方式非常简单:

pip install dtale

注:在安装的过程中,可能会出现卡顿,下载失败的情况,如果是因为网络不好的可以选择,添加镜像下载:

pip install -i https://pypi.douban.com/simple dtale

也可使用清华镜像下载。如果还失败(缺少某个 wheel 文件),就搜此 wheel 文件到本地,然后先安装缺少的 wheel 文件,再重新执行 pip 命令即可。

启动方法

D-Tale 有很多种启动方法。总体上来说,可以按在图形界面或者后台启动来分为两类。

图形界面启动

D-Tale 支持在多种人机交互的图形界面中启动。比如常用的 Jupyter Notebook、JupyterHub、Google Colab、Kaggle。

以 Jupyter Notebook 为例(需要先有已经通过 pandas 所读取的 df 数据):

import dtale

dtale.show(df)
# 也可以直接在新的浏览器标签页中打开
# dtale.show(df, open_browser=True)

脚本运行

可以在 Python 脚本中直接启动 D-Tale,即在 dtale.show 方法中加入 subprocess=False 参数:

import dtale

dtale.show(subprocess=False)

命令行运行

也可以直接在命令行终端中运行:

dtale

可以看出,在后台中启动时是”无数据”方式启动的(当然也可以直接读取数据),此时会打开一个”加载数据”的界面供读取数据。

上面启动的方式都是可以的,取决于你的使用场景。

两种启动 D-Tale 的详细示例:

方式一: 将 DataFrame 对象传递给 D-Tale 函数,在 Jupyter 单元中实例化 GUI:

import dtale
dtale.show(open_browser=True)

方式二: 不导入 DataFrame 对象的情况下初始化 D-Tale,显示为一个带有 GUI 的交互菜单来加载数据并提供各种其他选项:

import dtale
import pandas as pd

# 需要导入自己的数据
readFileName = "岭回归.csv"
df = pd.read_csv(readFileName)  # pandas读入csv文件
dtale.show(df, open_browser=True)  # dtale show pandas所读dataframe

浏览器会自动跳出 dtale 的功能页面,若没跳出网页,可以试试这个网址:http://desktop-ndgd86j:40000/dtale/main/1

多种测试数据启动示例

# jupyter 中执行,web 端会起一个页面  
import dtale  
  
dtale.show(open_browser=True)  
  
# 作为脚本在终端或 pycharm 中执行  
import dtale  
import pandas as pd  
  
dtale.show(pd.DataFrame([1,2,3,4,5]), subprocess=False)  
        
# jupyter 中嵌入,sns 为测试数据  
import seaborn as sns  
import dtale  
  
df = sns.load_dataset('planets')  
  
dtale.show(df, ignore_duplicate=True)

💡 实际应用

基本操作

启动后,复制所输出文字的最后一行到浏览器中,比如:

http://qi-air.local:40000/

界面介绍

如果是”无数据”直接启动,那么就是如下界面:

no-data

如果是直接读取了数据启动,那么直接就呈现了数据表格:

可以通过点击左上角的箭头标记,打开”主菜单”。在该列的倒数第二项和第三项中,点击 Pin Menu 从而固定该菜单,以及将语言设置为中文。

编辑单元格

可以编辑网格中的任何单元格(除了行索引或标题,后者可以用 Rename 功能来编辑)。

为了编辑一个单元格,只需双击它。这将把它转换成一个文本输入域,此时可以看到一个闪烁的光标。除了将该单元格变成一个输入框外,它还会在屏幕顶部显示一个输入框,以便更好地查看长字符串。这里应该保证你输入的值与你编辑的列的数据类型相符。

例如:

  • integers -> 应该是一个有效的正数或负数的整数
  • float -> 应该是一个有效的正数或负数的浮点数
  • string -> 任何有效的字符串都可以
  • category -> 要么是一个预先存在的类别,要么这将创建一个新的类别(所以要注意!)
  • date, timestamp, timedelta -> 应该是相应的有效的字符串
  • boolean -> 输入的任何字符串将被转换成小写字母,如果它等于 “true”,那么它将使单元格变成 “True”,否则就是 “False”

也可以使用这两个预留值:

  • "nan" -> numpy.nan
  • "inf" -> numpy.inf

复制单元格范围到剪贴板

(1)按住 Shift,点击某单元格;
(2)不要松开 Shift,滑动鼠标,选择要复制的单元格,此时这些单元格变为灰色;
(3)点击另一个单元格,此时就会弹出复制对话框。

主菜单功能

在主菜单中,其实包含了列菜单的全部功能,但在主菜单中使用时,更加普适。比如,可以在单个或者多个列,而非手动选择了。下面是几个核心功能介绍。

切换语言

可以将界面语言设置为中文,方便使用。

创建列

可以创建新列或者从已有的列中创建列。像建模前的特征工程也可以使用它来实现,比如使用两列执行算数运算来创建新列。同时,可以给创建的新列提供名称,以及设置数据类型。

DataFrame 函数

主菜单中的 DataFrame Functions 可以通过一系列的 DataFrame 函数来新增列或改变已有的列。

汇总数据

在 pandas 中,我们通过分组或数据透视表汇总数据。我们也可以用 dtale 做同样的事情。我们直接可以选择列、聚合函数以及最终数据集中所需的列即可,无需任何代码。pandas 中,分组就是 groupby 方法。将 dataFrame 中所有行按照一列或多列来划分,分为多个组,列值相同的在同一组,列值不同的在不同组。

这是一个非常强大的功能,允许用户从当前加载的数据中创建一个新的数据。目前可用的操作有:
(1)聚合:通过在特定索引的列上运行不同的聚合来整合数据。
(2)透视 Pivot:这是对 pandas.Dataframe.pivotpandas.pivot_table 的简单封装。
(3)转置:在一个索引上转置你的数据(如果你的索引有很多唯一的值,请注意 dataframe 会变得非常宽)

合并与堆叠

这个功能允许用户合并或堆叠(即垂直连接)已经加载到 D-Tale 中的 dataframes,或者上传额外的数据。该功能类似数据库中的 Join 功能,内有例子可供理解。

重复项

从数据中删除重复的列/值,并将重复的数据提取到单独的实例中。

数据分析功能

Describe 描述

可以使用主菜单中的 Describe 来查看所有列及其数据类型,以及每列的统计细节。

也可以直接点击每一列,通过 Describe (Column Analysis) 来查看统计细节(建议采用这一种方式,上一种虽然能一下看全部列的,但有时会有 bug)。

对于不同数据类型的列,它提供不同的统计信息:

  • 对于数值类型:提供中心性、频率、峰度和偏度,还有箱线图、直方图、value_count 图和 QQ 图
  • 对于日期时间类型:提供时间范围和分布信息
  • 对于字符串类型:提供最常用的词及其频率、字符的详细摘要、词值计数图和值计数图

离群值检测

在上面的 Describe 页面的下方,可以看到 Outliers 离群值的统计,这些值是通过如下代码统计获得:

s = df[column]  
q1 = s.quantile(0.25)  
q3 = s.quantile(0.75)  
iqr = q3 - q1  
iqr_lower = q1 - 1.5 * iqr  
iqr_upper = q3 + 1.5 * iqr  
outliers = s[(s < iqr_lower) | (s > iqr_upper)]

缺失值分析

使用 missingno 软件包,显示分析数据集中存在的缺失(NaN)数据的图表。也可以在一个标签中单独打开它们,或者使用右上角的链接将它们导出为静态 PNG。

缺失数据是所有数据集中都会经常出现的问题,因为没有数据集是完美的,它有意或无意地有很多缺失值。dtale 集成了 missingno 库来可视化数据集中存在的缺失值,同时它也提供矩阵、条形图、热图和树状图。

相关性分析

显示所有数字列与所有其他数字列的 Pearson 相关矩阵:

(1)默认情况下,它将显示一个 pearson 相关的网格(可通过使用下拉菜单进行过滤)。
(2)如果有一个日期类型的列,可以点击一个单独的单元格,看到该列组合的 pearson 相关的时间序列。目前,如果有多个日期类型的列,将有能力通过下拉的方式在它们之间进行切换。
(3)此外,可以点击时间序列中的单个点来查看进入该相关的点的散点图。在散点图部分,也可以通过悬停在 “PPS” 旁边的数字来查看图表中这些数据点的 PPS 的细节。
(4)当在 D-Tale 中查看的数据有日期或时间戳列,但每个日期/时间戳列只有一行数据时,相关性弹出窗口的行为有点不同:用户得到的不是一个时间序列的相关图,而是一个滚动的相关图,可以改变窗口(默认:10)。当用户点击滚动相关图中的一个点时,散点图将被创建。散点图中显示的数据将是该日期的滚动相关中涉及的日期范围。

预测能力得分

预测力得分(使用软件包 ppscore)是一个不对称的、与数据类型有关的得分,可以检测两列之间的线性或非线性关系。该分数范围从 0(无预测能力)到 1(完全预测能力)。它可以作为相关关系(矩阵)的替代。警告:这可能需要一段时间来加载。

这个页面的工作原理与相关性页面类似,但使用 PPS 计算来填充网格,通过点击单元格,可以查看这两列问题的 PPS 的细节。

数据可视化

图表功能

基于数据建立自定义图表(由 plotly/dash 提供)。

绘图是数据科学 EDA 探索性分析阶段的重要步骤。dtale 集成 plotly 来创建交互式绘图。它可以提供折线图、条形图、散点图、饼图、词云图、热图、3D 散点图、表面图、地图、烛台图、树状图和漏斗图。不同类型的数据支持不同类型的绘图。功能极其强大。

要建立一个图表的基本步骤:

(1)图表将在一个新的选项卡中打开,因为功能太多了,可能希望能够在原始选项卡中引用主网格数据。
(2)要建立一个图表,必须为 XY 的输入选择一个值,这将有效地驱动 X 和 Y 轴上的数据。如果正在处理一个三维图表(热图、三维散点图、表面图),还需要为 Z 轴输入一个值。
(3)一旦输入了所有需要的坐标轴,一个图表就会被建立。
(4)如果 X 轴(或 3D 图表中的 X 和 Y 的组合)上的数据有重复的,有三个选择:

  • 指定一个组,这将为每个组创建序列
  • 指定一个聚合,可以从以下选项中选择一个:计数、首数、尾数、平均值、中位数、最小值、最大值、标准差、方差、平均绝对偏差、所有项目的乘积、总和、滚动
  • 同时指定一个组和一个聚合
    (5)可以在不同的图表类型之间进行切换:线形、条形、饼形、文字云、热图、3D 散点和曲面。
    (6)如果指定了一个组,那么可以在一个图表中显示所有序列,或者将每个序列分成自己的图表 “Chart per Group“。

网络查看器

可以查看有向图。

热力图

这将隐藏任何非浮点或非 int 列(右侧的索引除外),并对每个单元格的背景应用一种颜色。

每个浮点被重新规范化为 0 到 1.0 之间的值。

对于重正化,有两个选项: (1)按列:每个值都是根据其列的最小/最大值计算的。
(2)整体:每个值都是根据数据集中所有非隐藏的浮点数/int 列的整体最小/最大值来计算的。

每个重新规范化的值都被传递到一个色标,即红色(0)-黄色(0.5)-绿色(1.0)。

数据筛选和编辑

自定义过滤

自定义过滤可以在主菜单中进行设置,也可以在每一列的列菜单的最下方进行。

高亮功能

高亮显示 Dtypes:这是一个快速检查的方法,看看数据是否被正确归类了。通过点击这个菜单选项,它将为特定数据类型的每一列分配一个特定的背景颜色。

category timedelta float int date string bool
purple orange green light blue pink white yellow

高亮显示缺失:任何包含 nan 值的单元格将以黄色突出显示。任何字符串列的单元格如果是空字符串或仅由空格组成的字符串,将以橙色突出显示。❗将被添加到任何包含缺失值的列标题中。

高亮显示离群值:突出显示超过自定义离群值计算的上界或下界的数字列的任何单元格。下限离群值将以红色标示,其中较深的红色将接近该列的最大值。上界离群值将以蓝色标示,深蓝色将接近该列的最小值。⭐将被添加到任何包含离群值的列标题中。

高亮显示范围:根据三个不同的标准,突出显示任何数字单元格的范围:等于、大于、小于。可以随意激活这些条件,它们将被视为一个 “或” 的表达式。例如,(x == 0) or (x < -1) or (x > 1)

低方差标志:在这两个条件都是真的情况下,在列标题上显示标志: (1)唯一值数量/唯一列数量 < 10%
(2)最常见值的计数/第二常见值的计数 > 20

列菜单功能

当单击列标题时,可以获得一个选项列表,选项的内容取决于该列的数据类型。

冻结

锁定功能类似于 excel 中的首行冻结,将列锁定在最左侧,这样可以自由地滚动表格同时看到锁定的列了。

隐藏和删除

隐藏选项将会去掉表格中的某列,但它不会从实际地删除。当然,也可以从右上角的条中取消隐藏列。删除选项将从数据框中永久删除列。它类似于 pandas 的 drop 函数。

替换和类型转换

替换选项可以替换表中某些固定值或者填充空值。可以 inplace=True 替换某列或者创建一个新列。同时,替换类型可以定义为:特定值、空格或特定字符串的替换。

可以使用类型转换选项轻松地将某列的数据类型从字符串例如 2022-01-20 更改为日期时间,同时提供了 inplace 或 new columns 更改的选项。

描述性统计

pandas 中的 describe 函数有助于提供列或数据集的统计摘要。这里的 describe 一样,并且提供的信息比普通的 pandas 函数更多,它为每种数据类型提供了唯一的 describe 摘要。

另外,它还为特征生成了 histogram 和 value_counts 图。

过滤

在 dtale 中过滤数据非常简单,只需要指定所需的过滤器类型。

在筛选日期时间类型列中的数据时,也可以按日期范围筛选数据。对于字符串类型的列,也有相应的过滤方式。

方差报告

这个选项不适用于字符串类型值。方差报告基于以下两点来决定特征是否具有低方差:

  • 特征中的唯一值计数 / 样本大小 < 10%
  • 最常用值的计数/第二常用值的计数 > 20

显示计算结果,并用直方图以呈现结果。

文本清洗

选项仅适用于字符串类型的值。文本清洗是数据科学项目的主要部分,如果使用正确的清洁类型,它可以提高模型性能。dtale 提供了可以应用于文本的所有可能的文本清理方法,只需选择要应用于文本的方法,工作将在后端即可完成。

数据导入导出

加载数据

无论是在没有加载数据的情况下启动 D-Tale,还是在已经加载一些数据之后,现在都可以直接从 GUI 中加载数据或选择一些样本数据集。

D-Tale 支持多种文件格式,包括 CSV、TSV、XLS、XLSX。数据的导入的方式包括:

  • 从文件加载数据
  • 从网站加载数据(需要传递网站的链接)可以从中获取 CSV、JSON、TSV 或 Excel 等文件
  • 加载示例数据集。这些数据集可能需要一些后台下载才能从服务器获取数据集

加载数据集后,就会像 pandas 一样呈现一个表格。表里的所有单元格都可以编辑,就像在 excel 中一样直接更改值。

代码导出

代码导出的是一些小的代码片段,代表了正在查看的网格的当前状态,包括以下内容: (1)建立的列
(2)过滤
(3)排序

其他可导出的代码有:
(1)Describe 描述(Column Analysis
(2)相关性(网格、时间序列图和散点图)
(3)使用图表生成器构建的图表

在 D-Tale 中对数据框执行的所有操作都会自动转换为它们的 python / pandas / plotly 等效代码。可以通过单击每个操作和图表 GUI 中出现的导出代码选项来查看它们。

导出 CSV

将当前数据导出为 CSVTSV。可以使用导出选项更改为 CSV 或 TSV 后导出数据集。

其他功能

Instances

这将给出关于其他 D-Tale 实例在当前 Python 进程下运行的信息。

刷新列宽

这个通常是在你的列不再对齐的情况下的一个故障保护。点击它应该能修复这个问题。

⚠️ 注意事项

  • D-Tale 在处理大型数据集时可能会影响性能,建议先对数据进行采样
  • 某些功能(如预测能力得分)计算时间较长,请耐心等待
  • 在编辑单元格时,确保输入的值与列的数据类型相匹配
  • 使用代码导出功能可以学习相应的 pandas/plotly 操作
  • 建议在虚拟环境中使用,避免依赖冲突

🔗 相关内容

📚 扩展阅读

🏷️ 标签

dtale 数据分析 数据可视化 pandas GUI 交互式分析 Flask React


最后更新: 2024-01-15
作者: Python 技术文档工程师
版本: 1.0

作者: Python 技术文档工程师

版本: 1.0

讨论与反馈

欢迎在下方留言讨论,分享你的学习心得或提出问题。评论基于GitHub Issues,需要GitHub账号。