数据挖掘中常用统计函数
整理一下平时生产中数据探索(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)