实时了解您的数据

实时了解您的数据' can be condensed to '实时数据了解'.

实践教程

使用bytewax和ydata-profiling

在这篇博客文章中,我们将介绍如何将开源流处理解决方案bytewaxydata-profiling结合起来,以提高流处理的质量。准备好了吗!

流处理能够实时分析数据,在存储之前和飞行中进行处理,可以是有状态无状态

有状态的流处理用于实时推荐、模式检测或复杂事件处理等情况,此时需要处理所发生事件的历史记录(窗口、按键连接等)。

无状态的流处理用于内联转换,不需要了解流中其他数据点的信息,如屏蔽电子邮件或转换类型。

Markus Spiske在Unsplash上的照片

总的来说,数据流在工业界被广泛应用于诸如欺诈检测、患者监测或事件预测性维护等用例。

所有数据流必须考虑的一个关键方面是数据的质量

与传统模型不同,传统模型通常在创建数据仓库或仪表板解决方案时评估数据质量,而流数据需要持续监控。

在整个过程中保持数据质量至关重要,从收集到向下游应用提供数据。毕竟,对于组织来说,数据质量不佳的成本可能很高:

“对于大多数公司而言,糟糕数据的成本占收入的15%至25%。(…)其中三分之二的成本可以通过提前解决数据质量问题来消除。”

— Thomas C. Redman,《Getting in Front on Data Quality》的作者

在本文中,我们将向您展示如何将bytewaxydata-profiling相结合,以对流处理进行分析和提高质量!

使用Bytewax进行数据专业人员的流处理

Bytewax是一种特别为Python开发人员设计的开源流处理框架。

它允许用户使用类似Flink、Spark和Kafka Streams的功能构建流数据管道和实时应用程序,同时提供友好且熟悉的界面,与Python生态系统100%兼容。

使用内置的连接器或现有的Python库,您可以连接到实时和流数据源(如Kafka、RedPanda、WebSocket等),并将转换后的数据写入各种下游系统(如Kafka、parquet文件、数据湖等)。

对于转换,Bytewax提供了具有映射、窗口和聚合方法的有状态和无状态转换,并具有诸如恢复和可伸缩性等熟悉的功能。

Bytewax为数据流提供了面向数据和Python的体验,它是专门为数据工程师和数据科学家打造的。它允许用户构建流数据管道和实时应用程序,并创建必要的自定义来满足其需求,而无需学习和维护基于JVM的流处理平台,如Spark或Flink。

Bytewax非常适用于许多用例,例如生成式AI的嵌入式流水线、处理数据流中的缺失值、在流式环境中使用语言模型来理解金融市场等等。如果需要用例灵感以及更多信息,如文档、教程和指南,请随时查看bytewax网站。

为何对数据流进行数据分析?

数据分析对于任何机器学习任务的成功启动至关重要,它指的是彻底了解我们的数据:其结构、行为和质量。

简而言之,数据分析涉及分析与数据格式和基本描述符有关的方面(例如样本数量、特征数量/类型、重复值),其内在特征(如缺失数据或不平衡特征的存在),以及数据收集或处理过程中可能出现的其他复杂因素(例如错误值或不一致的特征)。

确保高质量数据标准对所有领域和组织都至关重要,但对于输出连续数据的领域尤为重要,在这些领域中情况可能会迅速变化,并可能需要立即采取行动(例如,医疗监测、股票价值、空气质量政策)。

对于许多领域而言,数据分析是从探索性数据分析的角度来使用的,考虑存储在数据库中的历史数据。相反,对于数据流,数据分析对于验证和质量控制在整个流中都是必不可少的,其中数据需要在不同的时间框架或处理阶段进行检查。

通过将自动化分析嵌入到我们的数据流中,我们可以立即获得有关数据当前状态的反馈,并对任何潜在的关键问题进行警报 – 无论是与数据的一致性和完整性相关(例如,损坏的值或格式变化),还是与短时间内发生的事件相关(例如,数据漂移,与业务规则和结果的偏差)。

在现实世界的领域中 – 在那里你只知道墨菲定律注定会发生,“一切肯定会出错” – 自动分析可能使我们免于多个脑力拼图,以及需要停止生产的系统!

就数据分析而言,ydata-profiling一直是众人喜爱的选择,无论是对于表格数据还是时间序列数据。难怪如此 – 只需一行代码就可以进行广泛的分析和洞察。

复杂和耗时的操作都是在幕后完成的:ydata-profiling自动检测数据中包含的特征类型,并根据特征类型(数值或分类)调整摘要统计数据和可视化效果显示在分析报告中。

通过促进以数据为中心的分析,该软件包还突出显示了特征之间的现有关系,并重点关注它们的相互作用和相关性,并提供了对数据质量警报的全面评估,从重复或恒定值到偏斜和不平衡的特征。

这实际上是对我们数据质量的全方位视图 – 付出最小的努力。

分析报告:突出显示潜在的数据质量问题。作者提供的图片。

把所有东西放在一起:bytewax和ydata-profiling

在开始项目之前,我们首先需要设置Python依赖项并配置数据源。

首先,让我们安装bytewaxydata-profiling软件包(如果需要额外的指导,请参考这些说明!)

然后,我们将上传环境传感器遥测数据集(许可证 – CC0:公共领域),其中包含来自不同物联网设备的温度、湿度、一氧化碳液化石油气、烟雾、光和动作的多个测量值:

在生产环境中,这些测量值将由每个设备不断生成,输入将类似于我们在Kafka等流式平台中期望的样子。在本文中,为了模拟流式数据的上下文,我们将逐行从CSV文件中读取数据并使用bytewax创建数据流。

(作为一个快速的副笔记,数据流本质上是可以描述为有向无环图(DAG)的数据管道)

首先,让我们进行一些必要的导入

然后,我们定义我们的数据流对象。然后,我们将使用无状态的map方法,其中我们传入一个函数将字符串转换为日期时间对象,并将数据重构为格式(device_id,data)。

map方法将以无状态的方式对每个数据点进行更改。我们修改数据的形状的原因是为了在下一步中可以轻松地对数据进行分组,以便分别为每个设备对数据进行配置文件分析,而不是同时为所有设备进行分析。

现在,我们将利用bytewax的有状态能力,在我们定义的一段时间内收集每个设备的数据。ydata-profiling期望获得数据的时间快照,这使得窗口操作符成为执行此操作的完美方法。

ydata-profiling中,我们能够为指定的上下文生成数据帧的汇总统计信息。例如,在我们的示例中,我们可以生成与每个IoT设备或特定时间段相关的数据快照:

在定义了这些快照之后,利用ydata-profiling非常简单,只需对我们想要分析的每个数据帧调用PorfileReport

在这个例子中,我们将图像作为map方法中的一个函数的一部分写入本地文件。将来,这些图像可以通过消息工具进行报告,或者可以将它们保存到某个远程存储中。完成配置文件后,数据流期望输出一些结果,因此我们可以使用内置的StdOutput打印被配置文件的设备以及配置文件的时间,这些信息是从map步骤中的配置文件函数传出的:

执行Bytewax数据流的方式有多种。在这个例子中,我们使用同一台本地机器,但是Bytewax也可以在多个Python进程、多台主机上运行,在Docker容器中运行,在Kubernetes集群中运行等等。

在本文中,我们将继续使用本地设置,但我们鼓励您在准备将管道过渡到生产环境时,使用我们的辅助工具waxctl来管理Kubernetes数据流部署。

假设我们在具有数据流定义文件的相同目录中,我们可以通过以下方式运行它:

然后,我们可以使用配置文件报告来验证数据质量,检查模式或数据格式的更改,并比较不同设备或时间窗口之间的数据特性

实际上,我们可以利用比较报告功能来突出显示两个数据配置文件之间的差异,以便更容易地检测需要调查的重要模式或需要解决的问题:

准备探索自己的数据流吗?

验证数据流对于连续地识别数据质量问题并比较不同时间段的数据状态至关重要。

对于在医疗、能源、制造和娱乐领域使用连续数据流的组织来说,自动配置文件是确立数据治理最佳实践的关键,从质量评估到数据隐私。

这需要对数据的快照进行分析,正如本文所展示的那样,使用bytewaxydata-profiling的组合可以以无缝的方式实现。

Bytewax负责处理和结构化数据流并生成快照,然后可以通过ydata-profiling对数据特征进行全面的汇总和比较报告。

适当处理和配置传入数据的能力为不同领域开辟了大量的用例,从纠正数据模式和格式中的错误到突出和缓解由现实世界活动引起的其他问题,例如异常检测(例如欺诈或入侵/威胁检测)、设备故障以及与业务规则不一致的其他事件(例如数据漂移或错位)。

现在,你已经准备好开始探索你的数据流了!让我们知道你发现了哪些其他用例,并且随时在评论中给我们留言,或者在Data-Centric AI Community找到我们以获取更多问题和建议!我们在那里见!

致谢

本文得到了Fabiana Clemente(开发ydata-profiling)、Zander Matheson和Oli Makhasoeva(开发bytewax)的支持。您可以在相应的文档中找到有关OSS软件包的其他信息:ydata-profiling文档和bytewax文档。