您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论

探索性数据分析 (EDA)完整指南

QianXun (QianXun) 2025年11月23日 04:19 0 次浏览
探索性数据分析(EDA)完整指南

探索性数据分析
(EDA)完整指南

从数据到洞察的系统方法

lightbulb 什么是探索性数据分析(EDA)?

探索性数据分析(Exploratory Data Analysis, EDA)是数据分析项目的第一步,旨在理解数据的结构、分布和质量,并发现潜在的规律或问题。与传统统计分析不同,EDA更注重数据的真实分布和可视化,帮助分析者发现数据中隐含的模式。

stars EDA的核心目标

check_circle
理解数据:数据里有什么?有多少行和列?
check_circle
评估数据质量:有没有缺失值或异常值?
check_circle
掌握数据分布:数据的中心趋势和离散程度如何?
check_circle
发现潜在关系:变量之间有关联吗?

search 步骤一:数据概览与质量检查

1. 查看数据形状

- 行数:代表有多少个观测样本
- 列数:代表有多少个特征/变量
- 在Python中,使用 df.shape;在R中,使用 dim(df)

2. 查看列名和数据类型

- 了解每个变量代表什么
- 区分数值型变量(连续型如年龄、收入;离散型如孩子数量)和类别型变量(如性别、国家)
- 在Python中,使用 df.info()df.dtypes;在R中,使用 str(df)

3. 查看头尾数据

- 直观地感受数据的样子
- 在Python中,使用 df.head()df.tail()

4. 检查缺失值

- 这是数据质量的关键。缺失值会严重影响后续分析
- 方法:计算每列缺失值的数量和比例
- 在Python中,使用 df.isnull().sum()

5. 检查重复值

- 检查是否有完全重复的行
- 在Python中,使用 df.duplicated().sum()

analytics 步骤二:数值型变量的统计分析

1. 描述性统计汇总

- 这是最常用的一步,可以一键生成多个关键统计量
- 在Python中,使用 df.describe(),输出:
   - count:非空值的数量
   - mean:平均值,衡量中心趋势
   - std:标准差,衡量数据波动大小
   - min:最小值
   - 25%:第一四分位数
   - 50%:中位数,对异常值不敏感
   - 75%:第三四分位数
   - max:最大值

2. 深入分析(超越.describe())

- 偏度:衡量数据分布的不对称性
   - 正偏(右偏):均值 > 中位数,数据集中在左侧,右侧有长尾
   - 负偏(左偏):均值 < 中位数,数据集中在右侧,左侧有长尾
- 峰度:衡量数据分布的陡峭程度。与正态分布相比,高峰度意味着数据有更重的尾巴和更尖的峰值

category 步骤三:类别型变量的统计分析

1. 频数统计

- 计算每个类别出现的次数
- 在Python中,使用 df['column_name'].value_counts()

2. 比例/百分比

- 查看每个类别占总数的百分比,更能直观反映分布
- 使用 df['column_name'].value_counts(normalize=True) * 100

bar_chart 步骤四:数据可视化

show_chart 数值型变量

- 直方图:查看单个变量的分布形状
- 箱线图:展示数据的五数概括,快速识别异常值
- 小提琴图:结合箱线图和核密度图,显示分布的具体形状

pie_chart 类别型变量

- 条形图:展示每个类别的频数或比例
- 饼图:显示各类别占比(适用于类别较少的情况)

scatter_plot 关系探索

- 散点图:探索两个数值型变量之间的关系
- 热力图:以颜色深浅展示多个变量之间的相关系数矩阵

insights 高级可视化

- 平行坐标图:多维数据可视化
- 3D散点图:三维数据关系探索
- 交互式图表:使用Plotly或Bokeh创建

auto_awesome 自动化EDA工具

1. Pandas Profiling (ydata-profiling)

- 一键生成全面的数据分析报告
- 包含变量统计、相关性分析、缺失值分析等
- 安装:pip install ydata-profiling
- 使用:from ydata_profiling import ProfileReport; ProfileReport(df)

2. Sweetviz

- 专注于比较数据集和变量
- 生成美观的HTML报告
- 安装:pip install sweetviz
- 使用:import sweetviz as sv; report = sv.analyze(df); report.show_html()

code 实践示例(修正后的Python代码)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 1. 数据概览
print("数据形状:", df.shape)
print("\n数据类型和信息:")
print(df.info())
print("\n前5行数据:")
print(df.head())

# 2. 数据质量
print("\n缺失值统计:")
print(df.isnull().sum())
print("\n重复值统计:")
print(df.duplicated().sum())

# 3. 数值型变量描述
print("\n数值型变量描述性统计:")
print(df.describe())

# 4. 类别型变量描述
categorical_columns = df.select_dtypes(include=['object']).columns
for col in categorical_columns:
    print(f"\n变量 '{col}' 的分布:")
    print(df[col].value_counts())

# 5. 可视化
sns.set(style="whitegrid")

# 绘制数值变量的直方图和箱线图
numerical_columns = df.select_dtypes(include=[np.number]).columns
for col in numerical_columns:
    fig, axes = plt.subplots(1, 2, figsize=(12, 4))
    # 直方图
    sns.histplot(df[col], kde=True, ax=axes[0])
    axes[0].set_title(f'Distribution of {col}')
    # 箱线图
    sns.boxplot(x=df[col], ax=axes[1])
    axes[1].set_title(f'Boxplot of {col}')
    plt.show()

# 绘制类别变量的条形图
for col in categorical_columns:
    plt.figure(figsize=(10, 5))
    df[col].value_counts().plot(kind='bar')
    plt.title(f'Bar Chart of {col}')
    plt.xticks(rotation=45)
    plt.show()

# 绘制数值变量之间的相关热力图
plt.figure(figsize=(10, 8))
correlation_matrix = df.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Correlation Heatmap')
plt.show()

build 数据预处理建议

1. 缺失值处理

- 删除:缺失值比例较小(<5%)时,可直接删除
- 插补:使用均值、中位数、众数或预测模型填充
- 标记:创建新变量标记缺失值,保留信息

2. 异常值处理

- 识别:使用箱线图、Z-score或IQR方法
- 处理:删除、替换或转换异常值
- 鲁棒统计:使用中位数、四分位数等对异常值不敏感的统计量

3. 数据转换

- 标准化/归一化:消除量纲影响
- 对数转换:处理右偏分布
- 分类编码:将类别变量转换为数值

summarize 总结

分析数据集的基本统计信息是一个系统性工程,遵循 "从整体到局部,从数字到图形" 的原则:

looks_one
整体把握:形状、类型、头尾
looks_two
质量诊断:处理缺失值和重复值
looks_3
数值分析:使用描述性统计和可视化理解分布和异常
looks_4
类别分析:使用频数统计和条形图理解分布
looks_5
关系探索:使用散点图和热力图发现变量间的联系

完成这些步骤后,你将对数据集有一个全面而扎实的理解,为后续的数据清洗、特征工程和建模打下坚实的基础。

讨论回复

1 条回复
QianXun (QianXun) #1
11-23 13:23
数据分析流程:部署与监控

数据分析流程:部署与监控

从模型到生产环境的最后一公里

cloud_upload 模型部署的重要性和挑战

模型部署是将训练好的模型集成到生产环境中的过程,是实现数据价值的关键环节。据统计,约85%的机器学习项目从未成功部署到生产环境,凸显了这一步骤的复杂性和重要性。

trending_up
价值实现:只有部署到生产环境,模型才能创造实际业务价值
sync
持续迭代:部署是模型生命周期的开始,而非结束
settings
技术挑战:环境差异、性能要求、可扩展性、安全性
business
组织挑战:跨团队协作、流程规范、变更管理
lightbulb 部署成功关键因素

1. 明确业务目标:确保模型部署与业务目标一致
2. 性能基准:设定明确的性能指标和阈值
3. 环境一致性:确保开发、测试和生产环境的一致性
4. 回滚计划:制定详细的回滚和应急计划
5. 团队协作:建立数据、开发和运维团队的有效协作机制

settings_ethernet 部署策略

批处理
实时API
边缘计算

schedule 批处理部署

定期批量处理数据,适用于对实时性要求不高的场景

特点:定时执行、批量处理、高吞吐量、低延迟要求

适用场景:风险评估、客户分群、报表生成、定期推荐

技术栈:Airflow、Luigi、Kubernetes CronJob、AWS Batch

storage 数据库内嵌

将模型直接部署在数据库中,减少数据移动

特点:数据本地处理、低延迟、减少网络传输

适用场景:实时欺诈检测、库存优化、实时定价

技术栈:SQL Server ML Services、Oracle ML、PostgreSQL PL/Python

api REST API部署

将模型封装为REST API服务,提供实时预测能力

特点:实时响应、标准接口、易于集成、可扩展

适用场景:实时推荐、图像识别、自然语言处理

技术栈:Flask、FastAPI、Django、AWS Lambda、Azure Functions

stream 流处理部署

在数据流中实时应用模型,处理连续数据流

特点:连续处理、低延迟、高吞吐、事件驱动

适用场景:实时监控、异常检测、IoT数据分析

技术栈:Apache Kafka、Apache Flink、AWS Kinesis、Azure Stream Analytics

devices_other 边缘计算部署

将模型部署在边缘设备上,减少网络延迟和带宽需求

特点:本地处理、低延迟、离线能力、数据隐私

适用场景:移动应用、IoT设备、自动驾驶、工业自动化

技术栈:TensorFlow Lite、ONNX Runtime、Core ML、OpenVINO

phonelink 移动端部署

将轻量化模型部署在移动设备上,提供本地推理能力

特点:离线能力、实时响应、用户体验、数据隐私

适用场景:移动相机应用、语音助手、AR/VR应用

技术栈:TensorFlow Lite、Core ML、ML Kit、PyTorch Mobile

cloud 模型服务化技术

view_in_ar 容器化

将模型及其依赖打包成容器,确保环境一致性

优势:环境隔离、可移植性、可扩展性、版本控制

工具:Docker、Kubernetes、OpenShift、Docker Swarm

hub 微服务架构

将模型作为独立服务部署,支持独立扩展和更新

优势:独立部署、技术多样性、故障隔离、团队自治

工具:Spring Boot、FastAPI、gRPC、Service Mesh

memory 模型服务器

使用专门的模型服务器提供高性能模型服务

优势:高性能、多框架支持、自动扩展、版本管理

工具:TensorFlow Serving、TorchServe、NVIDIA Triton、Seldon Core

functions 无服务器计算

将模型部署为无服务器函数,按需自动扩展

优势:按需计费、自动扩展、运维简化、事件驱动

工具:AWS Lambda、Azure Functions、Google Cloud Functions

# 模型服务化代码示例 - FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np

# 加载模型
model = joblib.load('model.pkl')

# 定义API
app = FastAPI(title="预测API")

# 定义输入数据结构
class InputData(BaseModel):
  feature1: float
  feature2: float
  feature3: float

# 定义预测端点
@app.post("/predict")
async def predict(data: InputData):
  # 转换输入数据
  features = np.array([[data.feature1, data.feature2, data.feature3]])
  
  # 进行预测
  prediction = model.predict(features)
  
  # 返回结果
  return {"prediction": prediction[0]}

# Dockerfile示例
# FROM python:3.8-slim
# WORKDIR /app
# COPY requirements.txt .
# RUN pip install -r requirements.txt
# COPY . .
# EXPOSE 8000
# CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

monitoring 性能监控指标和方法

技术指标
业务指标
监控工具

speed 系统性能指标

监控模型服务的系统资源使用和响应性能

关键指标:响应时间、吞吐量、CPU使用率、内存使用率、网络I/O

监控方法:APM工具、系统监控、日志分析、性能剖析

model_training 模型性能指标

监控模型在生产环境中的预测性能

关键指标:准确率、精确率、召回率、F1分数、预测分布

监控方法:影子模式、金标准对比、预测分布监控、反馈循环

trending_up 业务影响指标

监控模型对业务目标的实际影响

关键指标:转化率、收入增长、成本节约、客户满意度、留存率

监控方法:A/B测试、业务指标仪表盘、ROI分析、用户反馈

people 用户体验指标

监控模型对用户体验的影响

关键指标:点击率、停留时间、跳出率、用户评分、使用频率

监控方法:用户行为分析、问卷调查、可用性测试、会话记录

analytics
Prometheus
开源监控系统,适用于指标收集和告警
assessment
Grafana
可视化平台,创建监控仪表盘
speed
Datadog
全栈监控平台,提供APM和日志管理
insights
Evidently AI
专门用于ML模型监控的开源工具
track_changes
WhyLabs
AI模型可观测性平台,监控模型性能
auto_graph
Fiddler
企业级ML可解释性和监控平台

swap_horiz 模型漂移检测和处理

data_usage 数据漂移

输入数据分布与训练数据分布发生偏差

检测方法:KS检验、Wasserstein距离、Population Stability Index(PSI)

处理策略:定期重训练、数据增强、特征工程、在线学习

trending_down 概念漂移

输入与输出之间的关系发生变化

检测方法:性能监控、错误率分析、预测分布变化、Drift Detection Method(DDM)

处理策略:增量学习、模型集成、自适应系统、人工干预

compare_arrows 混合漂移

数据漂移和概念漂移同时发生

检测方法:多维度监控、异常检测、因果分析、领域知识验证

处理策略:全面重训练、模型架构调整、多模型系统、专家系统

autorenew 持续学习

模型能够自动适应数据变化

实现方法:在线学习、增量学习、迁移学习、元学习

技术框架:River、Creme、TensorFlow Extended(TFX)、Kubeflow

# 模型漂移检测代码示例
import numpy as np
from scipy import stats
from alibi_detect.cd import KSDrift

# 1. KS检验检测数据漂移
def detect_data_drift(reference_data, current_data, threshold=0.05):
  drift_results = {}
  
  for i in range(reference_data.shape[1]):
    statistic, p_value = stats.ks_2samp(reference_data[:, i], current_data[:, i])
    drift_results[f'feature_{i}'] = {
      'statistic': statistic,
      'p_value': p_value,
      'drift_detected': p_value < threshold
    }
  
  return drift_results

# 2. 使用Alibi Detect检测漂移
cd = KSDrift(X_train, p_val=0.05)
preds = cd.predict(X_current)

# 3. PSI计算
def calculate_psi(expected, actual, buckettype='quantiles', buckets=10):
  def scale_range(input, min, max):
    input += -(np.min(input))
    input /= np.max(input) / (max - min)
    input += min
    return input
  
  breaks = np.quantile(expected, np.linspace(0, 1, buckets+1))
  
  expected_percents = np.histogram(expected, breaks)[0] / len(expected)
  actual_percents = np.histogram(actual, breaks)[0] / len(actual)
  
  def sub_psi(e_perc, a_perc):
    if e_perc == 0:
      e_perc = 0.0001
    if a_perc == 0:
      a_perc = 0.0001
    return (e_perc - a_perc) * np.log(e_perc / a_perc)
  
  psi_value = np.sum(sub_psi(expected_percents[i], actual_percents[i]) for i in range(0, len(expected_percents)))
  
  return psi_value

autorenew 持续集成/持续部署(CI/CD)流程

1

代码提交与版本控制

开发人员提交代码到版本控制系统,触发CI/CD流水线

2

自动化测试

执行单元测试、集成测试和模型验证测试,确保代码质量

3

模型构建与打包

构建模型、创建Docker镜像,准备部署工件

4

部署到测试环境

将模型部署到测试环境,进行集成测试和性能测试

5

部署到生产环境

通过蓝绿部署或金丝雀发布,将模型部署到生产环境

6

监控与反馈

监控模型性能,收集反馈,为下一轮迭代提供数据

# CI/CD配置示例 - GitHub Actions
name: ML Model CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run tests
      run: |
        pytest tests/
    - name: Validate model
      run: |
        python scripts/validate_model.py

  build-and-deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
    - uses: actions/checkout@v2
    - name: Build Docker image
      run: |
        docker build -t my-ml-model:${{ github.sha }} .
    - name: Deploy to staging
      run: |
        echo "Deploying to staging environment"
        # 部署到测试环境的命令
    - name: Deploy to production
      if: success()
      run: |
        echo "Deploying to production environment"
        # 部署到生产环境的命令

science A/B测试和灰度发布

compare A/B测试

比较两个或多个模型版本的性能,选择最优版本

设计要点:随机分组、对照组设置、统计显著性、足够样本量

评估指标:转化率、点击率、用户满意度、业务指标

grain 灰度发布

逐步将新模型发布给用户,降低风险

发布策略:按比例、按用户特征、按地理位置、按用户行为

回滚机制:自动回滚、手动回滚、渐进式回滚

architecture 蓝绿部署

同时运行两个环境,实现零停机部署

部署流程:准备绿色环境、测试验证、切换流量、保留蓝色环境

优势:零停机、快速回滚、环境隔离、降低风险

flip_to_front 功能开关

通过配置控制功能的启用和禁用,实现灵活部署

应用场景:渐进式发布、紧急关闭、实验性功能、个性化配置

实现方式:配置中心、特性标志服务、环境变量、数据库配置

stars 模型生命周期管理最佳实践

inventory
模型版本控制:使用Git或专门的模型注册表管理模型版本,记录模型元数据、性能指标和训练参数
schedule
定期评估:建立定期评估机制,监控模型性能退化,设定重训练触发条件
security
安全与合规:确保模型部署符合数据隐私法规,实施访问控制和数据加密
groups
跨团队协作:建立数据科学家、工程师和业务团队的有效协作机制,明确责任和流程
description
文档记录:维护全面的模型文档,包括模型架构、性能指标、业务影响和决策逻辑
tips_and_updates 专业提示

1. MLOps平台:考虑使用MLOps平台(如Kubeflow、MLflow)简化模型生命周期管理
2. 自动化优先:尽可能自动化部署和监控流程,减少人工干预
3. 监控告警:设置合理的监控阈值和告警机制,及时发现问题
4. 灾难恢复:制定详细的灾难恢复计划,确保业务连续性
5. 持续改进:建立反馈机制,持续优化模型和部署流程