一、whylogs库基础认知
1.1 库核心用途
whylogs是WhyLabs团队开源的轻量级数据日志与数据质量监控Python库,核心用于自动化生成数据剖面日志、持续追踪数据特征、实时检测数据漂移与异常值,广泛适配数据分析、机器学习流水线、数据工程等场景,无需复杂配置即可嵌入现有Python项目完成数据质量管控。

1.2 工作原理
whylogs通过轻量级流式计算方式,对输入数据(DataFrame、字典、数据流等)进行统计聚合,生成轻量化、可序列化的数据剖面(Profile),不存储原始数据,仅保留分布、计数、缺失值、类型等统计信息,支持离线存储、云端同步与多版本对比,实现无侵入式数据监控。
1.3 优缺点
优点:轻量化无性能损耗、支持流式与批量数据、兼容主流数据框架、隐私安全不存原始数据、可对接可视化平台、开箱即用。
缺点:复杂自定义规则需二次开发、极端小众数据类型支持有限、纯离线模式缺少自动告警扩展。
1.4 License类型
whylogs采用Apache-2.0 License,属于宽松开源协议,允许商业使用、修改、分发与二次发布。
二、whylogs安装与环境准备
2.1 基础安装命令
whylogs支持Python 3.7及以上版本,使用pip即可快速安装,执行以下命令:
pip install whylogs安装过程会自动依赖numpy、pandas、pyarrow等基础数据处理库,无需额外手动配置。
2.2 验证安装成功
安装完成后,可通过简单导入语句验证是否正常:
# 验证whylogs安装
import whylogs as why
# 无报错则说明安装成功
print("whylogs 安装成功,版本:", why.__version__)运行代码后输出对应版本号,即代表环境配置完成。
2.3 扩展依赖安装
若需对接云端WhyLabs平台或增强可视化能力,可安装扩展包:
pip install whylogs[viz] whylogs[whylabs]whylogs[viz]提供本地剖面可视化能力,whylogs[whylabs]支持数据剖面云端上传与集中管理。
三、whylogs核心功能与基础使用
3.1 快速生成数据剖面
数据剖面是whylogs的核心产物,包含数据完整统计信息,支持pandas DataFrame、列表、字典等多种数据格式。
import pandas as pd
import whylogs as why
# 构造示例数据集
data = {
"用户ID": [1001, 1002, 1003, 1004, None, 1006],
"消费金额": [99.5, 199.0, 59.8, None, 299.0, 88.0],
"会员等级": ["普通", "高级", "普通", "高级", "普通", "普通"],
"购买次数": [3, 5, 2, 7, 1, 4]
}
df = pd.DataFrame(data)
# 使用whylogs生成数据剖面
results = why.log(df)
# 获取剖面对象
profile = results.profile()
# 查看剖面数据
print("数据剖面生成完成!")
profile.view()代码说明:通过why.log()方法传入DataFrame,自动完成数据统计分析,profile.view()可在控制台输出数据基础指标,包括缺失值数量、数据类型、唯一值计数等。
3.2 查看数据详细统计指标
生成剖面后,可提取单列或全量详细统计信息,包括缺失率、最大值、最小值、均值、分位数等。
# 获取数据剖面视图
profile_view = profile.view()
# 查看全量数据列的统计指标
full_stats = profile_view.to_pandas()
print("全量数据统计指标:")
print(full_stats)
# 单独提取指定列指标
amount_stats = profile_view.get_column("消费金额")
print("\n消费金额字段详细统计:")
print("缺失值数量:", amount_stats.missing.value)
print("最大值:", amount_stats.max.value)
print("最小值:", amount_stats.min.value)
print("均值:", amount_stats.mean.value)代码说明:profile_view.to_pandas()将统计结果转为DataFrame,方便二次处理;get_column()可精准定位目标字段,获取针对性质量指标。
3.3 流式数据实时监控
whylogs支持流式数据处理,适用于实时数据 pipelines、日志流、接口数据等场景。
# 初始化流式记录器
writer = why.logger(mode="streaming", name="stream_demo", interval=5, when="count")
# 接入第一批次数据
batch1 = pd.DataFrame({
"访问IP": ["192.168.1.1", "192.168.1.2", "192.168.1.3"],
"响应时间": [120, 200, 150]
})
writer.log(batch1)
# 接入第二批次数据
batch2 = pd.DataFrame({
"访问IP": ["192.168.1.4", None, "192.168.1.5"],
"响应时间": [300, 180, None]
})
writer.log(batch2)
# 关闭记录器并生成最终剖面
stream_profile = writer.close()
print("流式数据剖面生成完成")
stream_profile.view().to_pandas()代码说明:mode="streaming"开启流式模式,interval=5表示每5条数据自动聚合一次,适合持续产生的实时数据质量监控。
3.4 数据剖面持久化存储
生成的数据剖面可序列化保存为本地文件,方便后续对比、回溯与共享。
# 保存剖面到本地文件
profile.write(path="data_profile.bin")
# 从本地文件加载剖面
loaded_profile = why.read(path="data_profile.bin")
print("加载的历史数据剖面:")
loaded_profile.view().to_pandas()代码说明:剖面文件体积极小,仅存储统计信息,不占用大量存储空间,适合长期归档。
四、数据漂移检测与多版本对比
4.1 数据漂移检测基础使用
在机器学习场景中,训练数据与在线推理数据的分布差异(数据漂移)会严重影响模型效果,whylogs可快速检测该问题。
# 构造训练数据(基准数据)
train_data = pd.DataFrame({
"特征A": [10, 12, 11, 13, 12, 10, 11],
"特征B": [0.5, 0.6, 0.5, 0.7, 0.6, 0.5, 0.6]
})
# 构造推理数据(待检测数据,存在分布偏移)
infer_data = pd.DataFrame({
"特征A": [18, 19, 20, 17, 18, 19],
"特征B": [0.1, 0.2, 0.1, 0.3, 0.2, 0.1]
})
# 生成两个数据剖面
train_profile = why.log(train_data).profile()
infer_profile = why.log(infer_data).profile()
# 对比检测数据漂移
from whylogs.core.metrics.metrics import Metric
from whylogs.core.view import DatasetProfileView
train_view = train_profile.view()
infer_view = infer_profile.view()
# 执行漂移检测
drift_report = train_view.compare(infer_view).drift_report()
print("数据漂移检测报告:")
print(drift_report.to_pandas())代码说明:通过基准剖面与待检测剖面对比,自动计算分布差异,输出漂移评分与漂移等级,帮助快速定位异常特征。
4.2 可视化漂移对比结果
安装扩展依赖后,可直接在Python环境中生成交互式漂移对比图表:
# 生成交互式漂移对比可视化
train_view.compare(infer_view).visualize()代码说明:运行后会生成包含分布直方图、漂移指数的交互式页面,直观展示数据差异,无需手动绘图。
五、结合机器学习流水线实战案例
5.1 场景说明
本案例模拟完整机器学习流程:数据读取→剖面记录→模型训练→推理数据监控→漂移告警,覆盖实际项目完整链路。
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import whylogs as why
# 1. 加载并拆分数据集(模拟业务数据)
np.random.seed(42)
raw_data = pd.DataFrame({
"广告曝光量": np.random.randint(1000, 5000, 100),
"点击量": np.random.randint(100, 500, 100),
"转化量": np.random.randint(10, 100, 100)
})
raw_data["转化量"].iloc[80:100] = None # 人为添加缺失值
# 记录原始数据剖面
raw_profile = why.log(raw_data).profile()
raw_profile.write("raw_data_profile.bin")
# 2. 数据预处理
clean_data = raw_data.dropna()
X = clean_data[["广告曝光量", "点击量"]]
y = clean_data["转化量"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 记录训练集数据剖面
train_profile = why.log(X_train).profile()
train_profile.write("train_data_profile.bin")
# 3. 模型训练
model = LinearRegression()
model.fit(X_train, y_train)
# 4. 模拟在线推理(含异常数据)
online_data = pd.DataFrame({
"广告曝光量": [9000, 8500, 8800, 1500, 1300],
"点击量": [200, 180, 190, 800, 750] # 点击量异常偏高
})
# 记录推理数据剖面
online_profile = why.log(online_data).profile()
online_profile.write("online_data_profile.bin")
# 5. 检测推理数据与训练数据的漂移
drift_result = train_profile.view().compare(online_profile.view()).drift_report()
print("模型推理数据漂移检测:")
print(drift_result.to_pandas())代码说明:本案例完整复现工业级数据监控流程,从原始数据到模型推理全程记录剖面,及时发现异常数据与分布偏移。
5.2 异常数据自动过滤
基于whylogs检测结果,可实现自动过滤异常推理数据,保障模型稳定性:
# 获取漂移检测结果
drift_df = drift_result.to_pandas()
high_drift_columns = drift_df[drift_df["drift_score"] > 0.6]["column"].tolist()
if high_drift_columns:
print(f"检测到高漂移字段:{high_drift_columns},自动过滤异常数据")
# 过滤异常数据
filtered_online_data = online_data.copy()
for col in high_drift_columns:
# 基于训练数据统计值设置阈值
train_mean = train_profile.view().get_column(col).mean.value
filtered_online_data = filtered_online_data[filtered_online_data[col] < train_mean * 3]
print("过滤后数据:")
print(filtered_online_data)
else:
print("数据正常,可直接推理")代码说明:通过漂移分数设置阈值,自动识别高风险字段并过滤异常数据,减少错误输入对模型的影响。
六、集成WhyLabs云端平台
6.1 云端上传数据剖面
whylabs支持将本地剖面上传至云端,实现多项目集中监控、历史回溯、自动告警:
import os
import whylogs as why
from whylogs.api.whylabs.session import WhyLabsSession
# 配置云端密钥(需在WhyLabs官网注册获取)
os.environ["WHYLABS_API_KEY"] = "你的API_KEY"
os.environ["WHYLABS_DEFAULT_DATASET_ID"] = "你的数据集ID"
# 上传剖面到云端
profile.writer("whylabs").write()
print("数据剖面已成功上传至WhyLabs云端")代码说明:云端平台提供可视化看板、定时监控、团队协作功能,适合企业级数据质量管理。
七、相关资源
- Pypi地址:https://pypi.org/project/whylogs/
- Github地址:https://github.com/whylabs/whylogs
- 官方文档地址:https://docs.whylabs.ai/docs/whylogs/
关注我,每天分享一个实用的Python自动化工具。

