Python数据分析与挖掘
一、基础概念:数据分析 & 数据挖掘
数据分析:用统计方法处理已有数据,描述数据、提取有效信息。
数据挖掘 (DM):从海量数据通过算法挖掘隐藏规律,常用任务:回归、分类、聚类、关联规则,挖掘数据商业价值。
通用建模流程:数据采集→数据读取→数据探索→数据预处理→建模→模型评估。
二、Pandas 数据读取与基础操作
1、csv/excel 读取
pd.read_csv()关键参数:
filepath_or_buffer:文件路径;header:首行是否为列名;names:自定义列名;index_col:指定索引;usecols:选定读取列;encoding:编码格式。
常用查看函数
方法 作用
info() 查看字段类型、非空数量
describe() 统计描述(均值、最值、分位数等)
head(n)/tail(n) 查看前 / 后 n 行,默认 5 行
sample(n) 随机抽取 n 行
3、数据选取
df.loc[标签]:标签索引,前闭后闭;
df.iloc[整数]:数字索引,前闭后开;
支持行列组合筛选:loc[行标签,列名]。
4、缺失值查询方法
isnull()/isna():单元格是否缺失;notnull():非缺失;
isnull().sum():按列统计缺失数量;isnull().sum(1):按行统计缺失;
df.loc[df.isna().any(1)]:筛选含缺失的行。
5、数据合并三类方式
堆叠合并 concat:纵向上下拼接、横向左右拼接;
concat:堆叠合并,axis=0纵向/上下,axis=1横向/左右
merge:主键合并,on 找相同字段连接 ,how指定连接方式
combine_first:重叠合并,用一张表有效值填充另一张表空缺
三、数据探索(EDA:数据校验 + 特征分析)
数据探索:通过检验数据集的数据质量、绘制图表、计算某些特征量等手段,对样本数据集的结构和规律进行分析的过程就是数据探索。
探索性数据分析,简称EDA
数据探索有助于选择合适的数据预处理和建模方法,甚至可以完成一些数据挖掘解决的问题。
数据探索的2个角度:数据校验(质量分析)和数据特征分析
(一)数据质量校验:缺失值 + 异常值
缺失值分析:统计缺失数量、缺失率;处理方案:删除、插补、不处理。
异常值(离群点)三种判别方法
1)3σ 准则(正态分布):数值与均值差值>3 倍标准差即为异常;
2)箱线图 / IQR 四分位准则
Q1 (下四分位) 位置 =(n+1)/4,
Q2 中位数 =(n+1)/2,
Q3 上四分位 = 3 (n+1)/4
IQR=Q3-Q1;
上界 = Q3+1.5IQR,
下界 = Q1-1.5IQR,超出边界为异常。
3)简单统计量分析
(二)数据特征分析六大类
1.分布分析
定量数据:计算极差、分组距、绘制频率直方图;
定性数据:饼图、条形图展示分类占比。
2.统计量分析
集中趋势:均值 (易受极值)、中位数、众数;
离散趋势:极差、方差、标准差、变异系数 = 标准差 / 均值。
3.周期性分析:按年 / 季 / 月 / 日分析数据时序波动。
4.贡献度分析(帕累托 2/80 法则):80% 收益来自 20% 产品,抓核心样本。
5.对比分析:多组别数据横向 / 纵向对比。
6.相关性分析(三类相关系数)
Pearson皮尔逊相关系数(线性相关,连续正态数据)
适用条件
两个连续数值变量、服从正态分布、仅衡量线性关系,易受异常值干扰。
标准计算步骤
列出所有x、y原始数据,统计样本总数n;
分别计算:\sum x、\sum y、\sum xy、\sum x^2、\sum y^2;
计算分子:n\sum xy-\sum x \sum y;
分别计算x、y分母项:S_x=\sqrt{n\sum x^2-(\sum x)^2},S_y=\sqrt{n\sum y^2-(\sum y)^2};
总分母 = S_x \times S_y;
r = 分子 \div 总分母;
根据|r|大小判断相关强弱。
判定标准
|r|>0.8高度相关;0.5<|r|≤0.8中度;0.3<|r|≤0.5低度;|r|≤0.3几乎无线性相关。
Spearman斯皮尔曼等级相关系数(单调相关,等级/非正态数据)
适用条件
有序等级数据、数据不满足正态、存在异常值;衡量单调增减关系,不要求线性。
计算公式
d_i:同一样本x等级与y等级的差值;
n样本量
标准计算步骤
分别对x列、y列数据从小到大排序,给每个数据分配排名(等级);
逐行计算每组数据的等级差 d_i = rank_x - rank_y;
对每个差值平方,再全部相加得到\sum d_i^2;
代入公式算出r_s;
判定标准和Pearson完全相同。
Kendall肯德尔τ相关系数(有序评分、小样本排序一致性)
适用条件
两组有序分类评分、小样本;衡量两组数据排序同步程度。
计算公式
\tau = \frac{C-D}{C+D}
C:一致序对;D:不一致序对
标准计算步骤
将数据按x变量升序排列;
遍历所有两两样本组合:
一致对C:x变大,对应y也变大;
不一致对D:x变大,对应y变小;
统计总一致对数C、总不一致对数D;
代入公式计算τ;
\tau=1完全同向排序;\tau=-1完全反向;\tau=0无排序关联。
四、数据预处理
数据预处理四大任务:清洗、集成、变换、规约
原始数据存在的问题:测量存在误差;数据收集错误;
1、缺失值处理
删除缺失样本、固定值填充、均值 / 中位数 / 众数填充、临近值填充、回归填充、拉格朗日插值。
2、异常值处理
删除记录、视作缺失值填充、均值修正、保留不处理。
3、数据规范化(消除量纲,数据变换)
最小 - 最大标准化 [0,1]:
x ∗= x−min/max−min;
零均值标准化 (Z-score):
x ∗= x−μ/σ(均值 0,标准差 1,最常用);
小数定标:移动小数点,数据落在 [-1,1]。
4、连续数据离散化
等宽 cut ():区间宽度一致,数据分布不均时效果差;
等频 qcut ():每个区间样本数量一致;
独热编码 OneHotEncoder:分类特征数字化,解决无序分类数值误导模型。
转换规则
看这一列有多少个不同类别,就生成多少列
每个类别独占一列
样本属于哪个类别,哪一列写 1,其他全写 0
最终结果:只有 0 和 1
import pandas as pd # 一键生成独热编码
pd.get_dummies(数据, columns=['要编码的列名'])
五、机器学习模型(应用题核心考点)
1、线性回归(监督、连续值预测)
最小二乘法 OLS:最小化预测值与真实值平方误差,求解系数 (截距 intercept_)、(系数 coef_)
模型评估::拟合优度,越靠近 1 拟合越好;
sklearn:LinearRegression,fit 训练、predict 预测、score 返回 。
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = [5,7,9,10]
reg = LinearRegression().fit(X, y)
reg.coef_ #表达的含义?
reg.intercept_ #表达的含义?
y i:真实观测值(原始实际数据)
yˉ:y 全部样本平均值(一条水平平均线)
y^i:回归预测值(回归直线上的点)
1、三个公式定义
离差:yi− yˉ
真实值 − 平均值:数据整体和平均线的差距(总波动)
回归差:y^i − yˉ
预测值 − 平均值:回归直线和平均线的差距(模型能解释的波动),又叫回归偏差
残差:y i − y^i
真实值 − 预测值:真实点到回归直线的垂直距离(模型解释不了的剩余误差)
恒等式:y i − yˉ =( y^i − yˉ)+(y i − y^i )
离差 = 回归差 + 残差
数字实例(一眼看懂)
设一组数据:真实值
y i=10,yˉ=6,y^i =8
离差:10−6=4
回归差:8−6=2
残差:10−8=2
验算:4=2+2
拟合问题:欠拟合(模型简单) 过拟合(模型复杂)
2、逻辑回归(分类模型,二分类为主)
原理 = 线性回归 + sigmoid 函数,输出概率 [0,1],阈值 0.5 划分 0/1 类别;
数据集拆分:train_test_split 划分训练集 / 测试集,random_state 固定随机种子;
sklearn:LogisticRegression,penalty (L1/L2 正则防过拟合),C 为正则系数倒数;multi_class:ovr二分类,multinomial多分类,auto自动选择
模型评价:混淆矩阵
TP:真阳
TN:真阴
FP:假阳
FN:假阴
准确率 = 总预测正确 / 总样本
精确率 = TP/(TP+FP)
召回率 = TP/(TP+FN)
3、决策树(分类 + 回归)
经典算法:ID3(信息熵,离散特征)、C4.5、CART(基尼系数,可回归可分类);
ID3 核心:信息熵 + 信息增益,优先选择信息增益最大的特征作为划分节点;
信息熵:衡量数据集混乱程度;信息增益 = 原熵 - 分组后加权熵,增益越大分类效果越好;
sklearn:DecisionTreeClassifier(分类,criterion='entropy/gini')、DecisionTreeRegressor(回归);max_depth 限制树深防过拟合
信息熵、信息增益极简举例(ID3 考点)
数据集:是否出去玩(标签:去 = 1,不去 = 0)
信息增益极简举例(ID3 考点)
数据集:是否出去玩(标签:去 = 1,不去 = 0)
天气 外出
晴 去
晴 不去
雨 不去
雨 不去
n=4
去:1个,不去:3个
信息熵H=-1/4log1/4-3/4log3/4
按天气拆分
晴:2 1去1不去
h=-1/2log1/2-1/2log1/2=1
雨:2 全不去
h=-1log1=0
E=2/4×1+2/4×0=0.5
G=H-E=0.811-0.5=0.311
熵越大越混乱,增益越大,特征分类效果越好,优先选该特征分叉
ID3 算法三大得分要点
步骤 1:全属性算增益
对当前数据集,逐一计算全部特征的信息增益。
步骤 2:选最大增益特征分裂
挑选信息增益最大的特征作为分裂节点;按该特征不同取值,拆分生成若干子数据集。
步骤 3:递归终止判定
① 终止:子样本全为同一标签 → 生成叶子节点,标注类别;
② 递归:子样本仍含多类标签 → 对子数据集重复 1、2 步骤,迭代建树。
一句话核心考点
ID3 择优规则:信息增益最大优先作为分裂特征,递归生成决策树。
4、K-Means 聚类(无监督学习,无标签)
分类 vs 聚类:分类 = 监督有标签;聚类 = 无监督无标签,自动分组;
距离公式:欧式距离、曼哈顿、切比雪夫、闵可夫斯基;
K-Means 步骤:①选 K 个初始中心点 (kmeans++ 优选初始中心)→②样本归到最近簇→③重新更新簇中心→④迭代至中心不变;
肘部法则:遍历不同 K,根据 inertia_(簇内平方误差) 拐点确定最优 K,拐点即肘部;
轮廓系数:遍历不同K,计算整体平均轮廓系数,系数峰值对应的K即为最优聚类数
取值[-1,1],数值越接近1,聚类效果越好;靠近0簇重叠;小于0聚类失效。
代码:silhouette_score(X, kmeans.labels_)计算平均轮廓系数。
搭配肘部法则共同确定最佳K值。
肘部+轮廓系数搭配选K:
肘部法则粗筛:遍历K,inertia下降变缓拐点,圈出候选K区间(如K=2、3、4); 2. 轮廓系数精确定K:候选K里选轮廓系数最大的K;
3. 二者结果一致优先采纳,不一致综合业务场景敲定最优聚类数。
实战:RFM/D 客户分群(最近消费 R、消费频次 F、消费金额 M、停留时长 D)。
5、Apriori 关联规则(购物篮挖掘)
三大指标
支持度:A、B 同时出现概率;
置信度:A 出现前提下 B 出现概率;
强关联规则:同时满足最小支持度 + 最小置信度;
Apriori 两步:
①逐层搜索生成频繁项集(连接 + 剪枝:非频繁子集→全集必非频繁);
②由频繁项集生成强关联规则;
计算流程:
1 项集→筛选频繁 1 项→拼接候选 2 项→筛频繁 2 项… 迭代至无新频繁项。
PCA降维
1. 作用:线性无监督降维,去除特征冗余,压缩维度;
2. 核心流程:标准化→求协方差矩阵→特征值分解→按累计方差贡献率选k维主成分→投影映射;
3. 判断维度k:累计方差贡献率≥85%/90%;
4. 局限:仅适配线性数据、可解释性弱、依赖标准化、易受异常值干扰;
5. 适用场景:特征多、特征高度相关、建模前数据预处理降维
代码
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import pandas as pd
# 数据标准化
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
# 创建PCA,指定保留90%信息
pca = PCA(n_components=0.9)
X_pca = pca.fit_transform(X_std)
# 查看各主成分方差贡献率
print(pca.explained_variance_ratio_)
# 查看累计方差贡献率
print(pca.explained_variance_ratio_.cumsum())
更多推荐



所有评论(0)