使用whylogs进行数据质量分析入门指南

使用whylogs进行数据质量分析入门指南

【免费下载链接】whylogs whylabs/whylogs: whylogs是一个轻量级的数据质量监控和数据分析库,能够实时收集和记录特征统计数据,便于后期进行数据质量和异常检测等工作。 【免费下载链接】whylogs 项目地址: https://gitcode.com/gh_mirrors/wh/whylogs

还在为数据质量问题头疼吗?面对海量数据时,如何快速发现异常、监控数据质量变化?whylogs作为开源数据日志记录标准,为你提供了一套完整的数据质量分析解决方案。本文将带你从零开始,掌握whylogs的核心功能和使用技巧。

📊 whylogs是什么?

whylogs是一个轻量级的开源数据日志记录库,能够实时收集和记录特征统计数据。通过生成称为whylogs profiles的数据摘要,它可以帮助你:

  • 🔍 跟踪数据集的变化
  • ✅ 创建数据约束来验证数据质量
  • 📈 快速可视化关键统计信息

mermaid

🚀 快速开始

安装whylogs

pip install whylogs

基本使用示例

import whylogs as why
import pandas as pd
import numpy as np

# 创建示例数据
data = {
    "用户ID": [1001, 1002, 1003, 1004, 1005],
    "年龄": [25, 32, 28, 45, 31],
    "收入": [50000, 75000, 60000, 120000, 68000],
    "城市": ["北京", "上海", "广州", "深圳", "杭州"],
    "是否VIP": [True, False, True, True, False]
}

df = pd.DataFrame(data)

# 记录数据并生成profile
results = why.log(df)
profile = results.profile()

# 查看profile摘要
prof_view = profile.view()
prof_df = prof_view.to_pandas()
print(prof_df)

🔍 Profile核心指标解析

whylogs profile包含了丰富的统计信息,主要分为以下几类:

1. 基础统计指标

指标类型说明示例值
counts/n总记录数5
counts/null空值数量0
counts/nanNaN值数量0

2. 数据类型推断

类型说明检测方法
integral整型数据自动识别
fractional浮点型数据自动识别
boolean布尔型数据自动识别
string字符串数据自动识别

3. 分布统计

# 查看数值列的分布统计
numeric_stats = prof_df.loc[['年龄', '收入']]
print(numeric_stats[['distribution/min', 'distribution/max', 
                    'distribution/mean', 'distribution/median']])

4. 基数估计

# 查看分类变量的基数
categorical_stats = prof_df.loc[['城市']]
print(categorical_stats[['cardinality/est', 'cardinality/lower_1', 
                        'cardinality/upper_1']])

🎯 数据质量验证实战

创建数据约束

from whylogs.core.constraints import ConstraintsBuilder
from whylogs.core.constraints.factories import (
    greater_than_number, 
    no_missing_values,
    is_in_range
)

# 构建约束
builder = ConstraintsBuilder(prof_view)

# 添加约束条件
builder.add_constraint(no_missing_values(column_name="用户ID"))
builder.add_constraint(greater_than_number(column_name="年龄", number=18))
builder.add_constraint(is_in_range(column_name="收入", lower=0, upper=200000))

# 生成约束报告
constraints = builder.build()
report = constraints.report()
print("约束验证报告:")
for constraint, result in report:
    print(f"{constraint}: {result}")

自定义约束规则

from whylogs.core.constraints.factories import condition_meets

# 自定义条件约束
def valid_city(city):
    return city in ["北京", "上海", "广州", "深圳", "杭州"]

builder.add_constraint(
    condition_meets(column_name="城市", condition=valid_city)
)

📊 数据可视化分析

安装可视化组件

pip install "whylogs[viz]"

生成数据摘要报告

from whylogs.viz import NotebookProfileVisualizer
import matplotlib.pyplot as plt

# 创建可视化器
visualizer = NotebookProfileVisualizer()

# 设置profile数据
visualizer.set_profiles(target_profile_view=prof_view)

# 生成摘要报告
visualizer.summary_drift_report()

# 生成分布直方图
visualizer.distribution_chart(column_name="年龄")
plt.show()

🔄 数据漂移检测

对比两个时间点的数据

# 假设有历史数据和当前数据
historical_data = pd.DataFrame({
    "年龄": [24, 31, 27, 44, 30],
    "收入": [48000, 72000, 58000, 115000, 65000]
})

current_data = pd.DataFrame({
    "年龄": [25, 32, 28, 45, 31],
    "收入": [50000, 75000, 60000, 120000, 68000]
})

# 生成两个profile
historical_profile = why.log(historical_data).profile().view()
current_profile = why.log(current_data).profile().view()

# 比较漂移
visualizer.set_profiles(
    target_profile_view=current_profile,
    reference_profile_view=historical_profile
)

drift_report = visualizer.summary_drift_report()
print("数据漂移检测报告:")
print(drift_report)

💾 数据持久化存储

保存和读取Profile

# 保存profile到文件
why.write(profile, "user_profile.bin")

# 从文件读取profile
loaded_profile = why.read("user_profile.bin")

# 验证读取的数据
loaded_df = loaded_profile.to_pandas()
print("从文件加载的profile:")
print(loaded_df.head())

集成云存储

# 保存到S3
results.writer("s3").option("bucket", "my-bucket").write()

# 保存到GCS  
results.writer("gcs").option("bucket", "my-bucket").write()

🏗️ 生产环境最佳实践

1. 批量数据处理

import whylogs as why
from whylogs.core import DatasetSchema
from whylogs.core.resolvers import StandardResolver

# 配置批量处理schema
batch_schema = DatasetSchema(
    resolvers=StandardResolver(),
    cache_size=1024
)

# 批量处理数据
batch_results = []
for chunk in pd.read_csv("large_dataset.csv", chunksize=10000):
    result = why.log(chunk, schema=batch_schema)
    batch_results.append(result)

# 合并所有profile
merged_profile = batch_results[0].profile()
for result in batch_results[1:]:
    merged_profile = merged_profile.merge(result.profile())

2. 实时数据流监控

from whylogs.api.logger import transient_logger

# 创建实时logger
logger = transient_logger()

# 实时记录数据
for data_point in real_time_data_stream:
    logger.log({"timestamp": data_point.timestamp, 
                "value": data_point.value})
    
    # 定期生成报告
    if logger.profile().view().get_column("counts/n") > 1000:
        profile = logger.profile()
        # 进行分析和告警
        analyze_profile(profile)
        logger.flush()

📈 性能优化技巧

内存优化配置

from whylogs.core import DatasetSchema
from whylogs.core.resolvers import LimitedTrackingResolver

# 使用有限跟踪解析器减少内存使用
optimized_schema = DatasetSchema(
    resolvers=LimitedTrackingResolver(),
    types={"年龄": "integral", "收入": "fractional"}
)

results = why.log(df, schema=optimized_schema)

分布式处理

# 在Spark环境中使用
from pyspark.sql import SparkSession
from whylogs.api.pyspark.experimental import collect_dataset_profile

spark = SparkSession.builder.getOrCreate()
spark_df = spark.createDataFrame(df)

# 分布式profiling
profile = collect_dataset_profile(spark_df)

🐛 常见问题排查

1. 内存使用过高

# 调整配置减少内存占用
import os
os.environ["WHYLOGS_MAX_MEMORY_MB"] = "512"

2. 处理大型分类变量

from whylogs.core import DatasetSchema
from whylogs.core.resolvers import StandardResolver

# 限制分类变量跟踪数量
schema = DatasetSchema(
    resolvers=StandardResolver(),
    types={"城市": "string"},
    track_categories=True,
    max_category_count=1000
)

🎓 学习路径建议

mermaid

📋 核心功能对比表

功能特性基础版高级版企业版
数据 profiling
数据约束
可视化报告
数据漂移检测
分布式处理
实时监控
云存储集成
告警系统

🔮 未来发展方向

whylogs正在快速发展,未来版本将支持:

  • 🤖 AI辅助数据质量分析
  • 🌐 多数据源统一监控
  • ⚡ 实时流处理优化
  • 🔗 更多数据平台集成

💡 总结

通过本文的学习,你应该已经掌握了whylogs的核心功能和使用方法。whylogs作为一个强大的数据质量分析工具,能够帮助你:

  1. 快速发现问题:通过自动化数据约束检测数据质量问题
  2. 监控变化趋势:实时跟踪数据分布和统计特征的变化
  3. 可视化分析:生成直观的数据报告和可视化图表
  4. 规模化部署:支持分布式和实时数据处理场景

现在就开始使用whylogs,让你的数据质量监控变得更加简单和高效!

提示:在实际项目中,建议先从小的数据样本开始试验,逐步扩展到生产环境。记得定期检查profile的大小和性能影响,确保系统稳定运行。

【免费下载链接】whylogs whylabs/whylogs: whylogs是一个轻量级的数据质量监控和数据分析库,能够实时收集和记录特征统计数据,便于后期进行数据质量和异常检测等工作。 【免费下载链接】whylogs 项目地址: https://gitcode.com/gh_mirrors/wh/whylogs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值