当前位置: 首页 > news >正文

探索性数据分析(EDA)

探索性数据分析(EDA)

1. 技术分析

1.1 EDA概述

探索性数据分析是理解数据的关键步骤:

EDA目标 理解数据结构 发现数据模式 识别异常值 验证假设 EDA步骤: 数据概览 单变量分析 多变量分析 可视化探索

1.2 EDA方法

EDA技术 描述统计: 均值、中位数、标准差 可视化: 直方图、散点图、箱线图 相关性分析: 相关系数 假设检验: t检验、卡方检验 EDA原则: 从整体到局部 定量与定性结合 可视化优先

1.3 EDA工具

工具功能适用场景
pandas数据处理数据操作
matplotlib基础绘图快速可视化
seaborn统计绘图美观图表
plotly交互可视化探索性分析

2. 核心功能实现

2.1 数据概览

import pandas as pd import numpy as np class DataOverview: def __init__(self, df): self.df = df def basic_info(self): info = {} info['rows'] = len(self.df) info['columns'] = len(self.df.columns) info['memory_usage'] = self.df.memory_usage(deep=True).sum() / (1024 ** 2) numeric_cols = self.df.select_dtypes(include=[np.number]).columns categorical_cols = self.df.select_dtypes(include=['object']).columns info['numeric_columns'] = list(numeric_cols) info['categorical_columns'] = list(categorical_cols) return info def summary_statistics(self): return self.df.describe(include='all') def missing_value_summary(self): missing = self.df.isnull().sum() missing_percent = (missing / len(self.df)) * 100 return pd.DataFrame({ 'missing_count': missing, 'missing_percent': missing_percent }).sort_values('missing_percent', ascending=False) def generate_report(self): report = "# 数据概览报告\n\n" info = self.basic_info() report += "## 1. 基本信息\n" report += f"- 数据集大小: {info['rows']}行 × {info['columns']}列\n" report += f"- 内存占用: {info['memory_usage']:.2f} MB\n" report += f"- 数值列: {len(info['numeric_columns'])}个\n" report += f"- 类别列: {len(info['categorical_columns'])}个\n\n" report += "## 2. 缺失值统计\n" report += self.missing_value_summary().to_markdown() + "\n\n" report += "## 3. 描述统计\n" report += self.summary_statistics().to_markdown() return report

2.2 单变量分析

import matplotlib.pyplot as plt import seaborn as sns class UnivariateAnalyzer: def __init__(self, df): self.df = df def analyze_numeric(self, column): stats = { 'mean': self.df[column].mean(), 'median': self.df[column].median(), 'std': self.df[column].std(), 'min': self.df[column].min(), 'max': self.df[column].max(), 'skew': self.df[column].skew(), 'kurtosis': self.df[column].kurtosis() } return stats def analyze_categorical(self, column): freq = self.df[column].value_counts() freq_percent = self.df[column].value_counts(normalize=True) * 100 return pd.DataFrame({ 'count': freq, 'percent': freq_percent }) def plot_histogram(self, column, bins=30): plt.figure(figsize=(10, 6)) sns.histplot(data=self.df, x=column, bins=bins, kde=True) plt.title(f'Distribution of {column}') plt.xlabel(column) plt.ylabel('Frequency') plt.show() def plot_bar(self, column, top_n=10): plt.figure(figsize=(10, 6)) top_categories = self.df[column].value_counts().head(top_n) sns.barplot(x=top_categories.index, y=top_categories.values) plt.title(f'Top {top_n} Categories of {column}') plt.xlabel(column) plt.ylabel('Count') plt.xticks(rotation=45) plt.show()

2.3 多变量分析

class MultivariateAnalyzer: def __init__(self, df): self.df = df def correlation_matrix(self, method='pearson'): numeric_df = self.df.select_dtypes(include=[np.number]) return numeric_df.corr(method=method) def plot_correlation_heatmap(self): corr_matrix = self.correlation_matrix() plt.figure(figsize=(12, 10)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1) plt.title('Correlation Heatmap') plt.show() def plot_scatter(self, x, y, hue=None): plt.figure(figsize=(10, 6)) sns.scatterplot(data=self.df, x=x, y=y, hue=hue) plt.title(f'{x} vs {y}') plt.show() def plot_pairplot(self, columns=None): if columns is None: columns = self.df.select_dtypes(include=[np.number]).columns[:5] sns.pairplot(self.df[columns]) plt.show() def analyze_groupby(self, group_col, agg_col, agg_func='mean'): return self.df.groupby(group_col)[agg_col].agg(agg_func).sort_values(ascending=False)

2.4 假设检验

from scipy import stats class HypothesisTester: def __init__(self, df): self.df = df def t_test(self, group1, group2, column): group1_data = self.df[self.df[group1][column]] group2_data = self.df[self.df[group2][column]] t_stat, p_value = stats.ttest_ind(group1_data, group2_data) return { 't_statistic': t_stat, 'p_value': p_value, 'significant': p_value < 0.05 } def chi_square_test(self, column1, column2): contingency_table = pd.crosstab(self.df[column1], self.df[column2]) chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table) return { 'chi2_statistic': chi2, 'p_value': p_value, 'degrees_of_freedom': dof, 'significant': p_value < 0.05 } def correlation_test(self, column1, column2): corr, p_value = stats.pearsonr(self.df[column1], self.df[column2]) return { 'correlation': corr, 'p_value': p_value, 'significant': p_value < 0.05 }

3. 性能对比

3.1 可视化工具对比

工具美观度交互性复杂度
matplotlib
seaborn
plotly很高

3.2 相关分析方法对比

方法适用数据度量范围特点
Pearson连续数据[-1, 1]线性相关
Spearman有序数据[-1, 1]秩相关
Kendall分类数据[-1, 1]一致性

3.3 EDA步骤对比

步骤时间占比重要性
数据概览10%
单变量分析30%
多变量分析40%很高
假设检验20%

4. 最佳实践

4.1 EDA流程

def eda_pipeline(df): # 1. 数据概览 overview = DataOverview(df) print("=== 数据概览 ===") print(overview.basic_info()) # 2. 单变量分析 analyzer = UnivariateAnalyzer(df) for col in df.select_dtypes(include=[np.number]).columns[:3]: analyzer.plot_histogram(col) for col in df.select_dtypes(include=['object']).columns[:2]: analyzer.plot_bar(col) # 3. 多变量分析 multi_analyzer = MultivariateAnalyzer(df) multi_analyzer.plot_correlation_heatmap() # 4. 假设检验 tester = HypothesisTester(df) numeric_cols = df.select_dtypes(include=[np.number]).columns if len(numeric_cols) >= 2: result = tester.correlation_test(numeric_cols[0], numeric_cols[1]) print(f"相关性检验结果: {result}")

4.2 EDA检查清单

class EDAChecklist: def __init__(self): self.checks = [ '检查数据类型是否正确', '识别缺失值模式', '分析数值列的分布', '分析类别列的频率', '检查变量间的相关性', '识别异常值', '验证关键假设' ] def run(self, df): print("=== EDA检查清单 ===") for i, check in enumerate(self.checks, 1): status = input(f"{i}. {check}? (y/n): ").lower() print(f" {'✓' if status == 'y' else '✗'} 完成")

5. 总结

EDA是数据科学的关键环节:

  1. 数据概览:了解数据基本情况
  2. 单变量分析:分析每个变量
  3. 多变量分析:探索变量关系
  4. 假设检验:验证假设

对比数据如下:

  • seaborn绘制图表最美观
  • Pearson相关最常用
  • 多变量分析占时间最多(40%)
  • 推荐使用plotly进行交互探索

EDA质量直接影响后续建模效果,必须认真对待。

http://www.jsqmd.com/news/874288/

相关文章:

  • 内网渗透之横向移动实战
  • LangChain学习笔记(一)
  • Go语言分布式事务与一致性保障
  • HS2-HF Patch:5步打造完美HoneySelect2游戏体验的终极指南
  • 大白话拆解AI黑话!从LLM到Agent,一篇扫盲无压力
  • 如果有一天,豆包开始全面收费了,会发生什么?
  • 嵌入音频和视频:让网页“活”起来
  • Claude Code 错误解决方案汇总
  • 昇腾CANN手把手实战:从cann-learning-hub上手ops-transformer
  • cmake和makefile
  • 音乐解锁终极指南:用Unlock Music Electron真正拥有你的数字音乐
  • 2026年Q2路沿石厂家怎么选:路沿石批发厂家、路沿石推荐、四川路沿石价格、成都检查井品牌推荐、成都检查井哪里买选择指南 - 优质品牌商家
  • 2026四川优质文武寄宿学校推荐指南:少年武术学校/武当武术学校/武术夏令营学校/知名的武术学校/专业学武术的学校/选择指南 - 优质品牌商家
  • Mootdx架构深度解析:Python金融数据接口的工程化实践
  • 2026年滑环销售厂家权威判定:滑环厂家/滑环工厂/滑环生产厂家/滑环销售厂家/特殊滑环/盘式滑环/过孔型滑环/选择指南 - 优质品牌商家
  • LangGraph 中的并发执行:Map-Reduce 模式在 Agent 任务中的应用
  • Spring Boot 技术知识概要
  • 2026屠宰厂臭气处理厂家综合实力深度解析:养殖场臭气处理/屠宰厂污水处理/搪瓷厌氧钢罐/有机肥建设技术/污水处理工程/选择指南 - 优质品牌商家
  • AI Agent开发不是写代码,而是重构工作流:制造业产线调度Agent上线72小时即替代3名高级调度员(含流程映射对照表)
  • AgentScope Harness 模块详解:打造企业级AI智能体运行时
  • 基于CH582M实现CRC-16校验的串口/RS485协议
  • 大气层Atmosphere系统深度解析:解锁Switch潜能的终极技术指南
  • 小白必看!轻松搞懂ChatGPT背后的Transformer,附收藏版深度解析
  • 2026年论文党必备:降AI率软件测评与推荐大全
  • 2026年Q2香榧种植园评测:天然榧塑膳食、安徽香榧种植园、岳西香榧产业园、岳西香榧种植园、植物榧塑膳食、榧塑膳食产品选择指南 - 优质品牌商家
  • 担保被告律师哪个好?陈杰律师:担保责任减免优秀律师 - 外贸老黄
  • 面向创意生成 Agent 的 Harness 随机种子管理
  • 04-系统技术架构师必备——设计模式在系统架构中的应用
  • Python数据库设计模式:从ORM到数据层架构
  • Keil µVision库模块选择问题解决方案