数据分析-pandas数据处理

概述

业务建模流程

  • 不是机器学习建模流程
  • 将业务抽象为分类or回归问题
  • 定义标签,得到y
  • 选取合适的样本,并匹配出全部的信息作为特征的来源
  • 特征工程 + 模型训练 + 模型评价与调优(相互之间可能会有交互)
  • 输出模型报告
  • 上线与监控

特征工程

  • 基础特征构造(基础特征提取)
  • 特征预处理
    • 数据清洗/归一化/标准化
  • 特征衍生— 用已有的特征构造新的特征
    • 多项式 平方 三次方
    • 特征交叉
      • 数值 x1*x2
      • 离散:交叉组合
    • 非线性变换— 用非线性函数对原特征进行计算
      • 对数/指数/ cos/sin/相除得到比例/ knn中的近邻法/svm中的核方法
  • 特征筛选和特征降维— 防止过拟合,减小计算量

数据清洗

  • 缺失值,异常值和重复值的处理

缺失值处理

  • 缺失值分类
    • 行缺失/列缺失
  • 处理方法
    • 删除
      • 原则:根据确实比例和重要性进行衡量
  • 删除行— 数据量大的时候可以删除空行
    • 注意问题
      • 删除后数据量小了不能删
      • 注意类别平衡问题
  • 删除列
    在这里插入图片描述
  • A:直接删出特征
  • B:重新获取数据
  • C:删或者简单填充
  • D:精准填充

填充

  • 统计法 --简单填充
    • 数值:均值,中位数
    • 类别特征:众数
  • 模型法
    • 用没有确实的数据作为训练数据,训练模型,对缺失数据进行预测,来补全缺失值
      • 数值:用回归模型
      • 类别:分类模型
  • 逻辑推测—比较常用的方法
    • 身份证号推测年龄,名字推测性别
  • 专家补全
  • 随机填充
    • 真值转换法
      • 将缺失值本身也看成是一种值
      • 性别:男,女 未知
      • 地铁线路未知代表没有地铁
        • 注意:距离地铁的距离 0-1 2:代表离地铁站很远
      • 注意:要跟业务人员沟通后确定
    • 不处理
      • 很多算法可以兼容缺失值
        • knn,决策树,xgboost等
  • 缺失值处理套路
    • 发现缺失值
    • 统计每个特征中缺失值比例
    • 考虑如何额处理缺失值

异常值(极值)处理

如何判断异常:

  • 正态分布

  • 画箱线图

    • boxplot
  • 异常检测算法: GMM、孤立森林

  • 判断异常值

    • 假异常:有业务导致的异常数据,真实存在的
    • 真异常:就是数据本身有异常
  • 异常值处理

    • 不删:
      • 由业务导致的假异常 ,反映的是真实业务
      • 做异常检测不用删
      • 对异常值不敏感的算法
        • 决策树:对数值型异常值不敏感
          • 原因:决策树关注的顺序,不是值本身的大小
          • 1,2,3,4,5,6,7,8
    • 看成缺失值进行填充

重复值处理

  • 去重
  • 什么时候不去重
    • 样本不平衡的时候重复采样的数据
    • 真实业务产生的重复数据

python数据清洗案例

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
#缺失值处理
df=pd.DataFrame(np.random.randint(0,10,(6,4)),columns=['col1', 'col2', 'col3', 'col4'])
df.iloc[1:3,1]=np.nan
df.iloc[4,2:]=np.nan
df
df.isnull()
df.isnull().any(0)
df.isnull().sum()
df2=df.dropna()
df2

nan_model=SimpleImputer(missing_values=np.nan,strategy='mean')  #使用sklearn填充空值
result=nan_model.fit_transform(df)
result

# pandas填充
# 向上填充
df3=df.fillna(method='backfill')
# 向上填充
df3=df.fillna(method='bfill',limit=1)
# 向下填充
df4=df.fillna(method='pad')
# 指定值填充
df5=df.fillna(0)
# 字典为每个列指定不同的填充
df6=df.fillna({
   
   'col2':10,'col3':100})

df7=df.fillna(df.mean())
# 异常值
import pandas as pd
df=pd.DataFrame({
   
   
    'col1': [1, 120, 3, 5, 2, 12, 13],
    'col2': [12, 17, 31, 53, 22, 32, 43]
})
df
z_score=(df-df.mean())/df.std()
z_score

from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
new=sc.fit_transform(df)
pd.DataFrame(new)

z_score.abs()<=2.2
df[(z_score.abs()<=2.2)].dr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值