数据挖掘中常用统计函数
整理一下平时生产中数据探索(EDA)阶段常用的一些函数及其用法,以便自己和大家学习。
创作码字不易 ,希望你在文章中可以解决你的疑惑,不错的话就点个赞吧!
数据挖掘中数据探索(EDA)常用函数整理
工具组合建议:
import pandas as pd
import seaborn as sns
数据探索(EDA)工具链详解
1. 基础信息查看
| 函数 | 场景 | 示例 |
|---|
df.head(n) | 查看前n行数据 | df.head(5) |
df.tail(n) | 查看后n行数据 | df.tail(3) |
df.shape | 获取数据维度(行,列) | print(df.shape) |
df.columns | 查看所有列名 | df.columns.tolist() |
df.dtypes | 查看每列数据类型 | df.dtypes |
df.info() | 综合信息(类型/非空值) | df.info() |
2. 统计描述函数
| 函数 | 场景 | 示例 | 注意事项 |
|---|
df.describe() | 数值列统计摘要(均值/分位数等) | df.describe() | |
df.describe(include='all') | 包含非数值列的统计 | df.describe(include='object') | 忽略非数值列,需单独处理类别型 |
df.mean() / df.median() | 计算均值/中位数 | df['收入'].mean() | |
df.mode() | 计算众数(最频繁值) | df['性别'].mode() | |
df.std() / df.var() | 计算标准差/方差 | df['年龄'].std() | |
df.skew() / df.kurt() | 计算偏度/峰度 | df['收入'].skew() | |
df.quantile(q) | 计算分位数(q=0.25,0.5,0.75) | df['收入'].quantile(0.9) | 箱线图法则检测异常值(右偏数据建议用对数变换后再检测) |
df.duplicated() | 检测重复行 | | 需指定subset关键字段 |
df.isnull().sum() | 统计每列缺失值数量 | | 注意NaN的多种表现形式(如"NA"、-1等) |
3. 数据分布与频次分析
| 函数 | 场景 | 示例 |
|---|
df.value_counts() | 统计分类变量频次 | df['性别'].value_counts() |
df.value_counts(normalize=True) | 统计占比(归一化) | df['学历'].value_counts(normalize=True) |
df.unique() | 查看唯一值列表 | df['城市'].unique() |
df.nunique() | 统计唯一值数量 | df['产品ID'].nunique() |
pd.crosstab() | 交叉频数统计 | pd.crosstab(df['性别'], df['是否购买']) |
4. 缺失值与异常检测
| 函数 | 场景 | 示例 |
|---|
df.isnull().sum() | 统计每列缺失值数量 | df.isnull().sum() |
df.dropna() | 删除缺失值 | df.dropna(subset=['收入']) |
df.fillna(value) | 填充缺失值 | df['年龄'].fillna(df['年龄'].median()) |
df.duplicated() | 检测重复行 | df[df.duplicated()] |
df.drop_duplicates() | 删除重复行 | df.drop_duplicates() |
5. 数据关系分析
| 函数 | 场景 | 示例 |
|---|
df.corr() | 计算数值列相关系数(Pearson) | df.corr() |
df.corr(method='spearman') | 计算Spearman相关系数 | df.corr(method='spearman') |
df.groupby() | 分组聚合分析 | df.groupby('性别')['收入'].mean() |
pd.pivot_table() | 透视表分析 | pd.pivot_table(df, values='收入', index='性别', columns='学历') |
6. 数据抽样与筛选
| 函数 | 场景 | 示例 |
|---|
df.sample(n) | 随机抽样n行 | df.sample(100) |
df.sample(frac=0.1) | 按比例抽样 | df.sample(frac=0.1) |
df.query() | 条件筛选 | df.query("收入 > 50000 and 年龄 < 30") |
df.nlargest(n, columns) | 取某列最大的n行 | df.nlargest(5, '收入') |
df.nsmallest(n, columns) | 取某列最小的n行 | df.nsmallest(5, '年龄') |
7. 数据类型转换
| 函数 | 场景 | 示例 |
|---|
df.astype() | 强制类型转换 | df['年龄'].astype(float) |
pd.to_datetime() | 转换为日期格式 | df['日期'] = pd.to_datetime(df['日期']) |
pd.cut() | 数值分箱(离散化) | pd.cut(df['年龄'], bins=[0,18,35,60,100]) |
pd.get_dummies() | 独热编码(One-Hot) | pd.get_dummies(df['性别']) |
8. 自动化工具
| 工具 | 最佳实践 | 局限 | 适用场景 |
|---|
pandas-profiling | ProfileReport(df, minimal=True) | 大数据集内存消耗高 | 快速生成初步报告 |
ydata-profiling | 支持时序数据自动分析 | 自定义规则能力弱 | 交互式探索 |
Great Expectations | 定义数据质量校验规则 | 学习曲线陡峭 | 生产环境监控 |
Sweetviz | 对比两个数据集差异 | 可视化定制性差 | A/B测试数据对比 |
9. 多变量分析
| 函数/工具 | 典型用法 | 注意事项 | 可视化配套 |
|---|
df.corr() | 计算相关系数矩阵 | 默认Pearson系数,非线性用method='spearman' | sns.heatmap(corr, annot=True) |
pd.crosstab() | 生成交叉频次表 | 用normalize='index'计算比例 | sns.heatmap(crosstab) |
sns.pairplot() | 散点图矩阵 | 大数据集需抽样或调小plot_kws={'s':1} | sns.pairplot(diag_kind='kde') |
df.groupby().agg() | 分组聚合分析 | 避免多级索引导致可读性下降 | sns.lineplot(x,y,hue) |
总结:在实际生产过程中,需要按步骤和按场景选择函数
- 快速了解数据:
head(), info(), describe() - 统计分布:
value_counts(), mean(), skew() - 缺失值处理:
isnull(), fillna(), dropna() - 关系分析:
corr(), groupby(), pivot_table() - 数据清洗:
drop_duplicates(), astype(), query()
以上就是目前我在实际生产时自己常用的一些函数仅供大家参考,若有纰漏麻烦海涵
若本文章对你有所帮助 麻烦点个赞 点个关注哦
收到你的赞和收藏关注我会更加有动力!
以下是一些在自己写的数据挖掘系列的文章 希望对你有所帮助
随机森林算法分块实现讲解和注意事项(Jupyter Notebook可直接使用)
所有评论(0)