首页 > 编程学习 > 【数据挖掘】2022数据挖掘之数据的高级处理(消除缺失值、数据离散化、合并等)

数据挖掘之数据高级处理

  • 一、缺失值处理
    • 1、导入包
    • 2、相关方法
      • 2.1 判断数据中是否存在NAN
      • 2.2 删除含有缺失值的样式
      • 2.3 替换\插入并补充
    • 3、实例
      • 3.1 技巧1 通过返回true或false来判断是否有缺失值
        • (1)通过true判断是否有缺失值
        • (2)通过false判断是否有缺失值
      • 3.2 技巧2 填补缺失值
    • 4、处理其它标记的缺失值
      • 4.1 针对不是NAN也不是数字的特殊字符
  • 二、数据离散化
    • 1、概念
    • 2、分组
      • 2.1 自动分组
      • 2.2 自定义分组
    • 3、将分组好的结果转换成one-hot编码
  • 三、合并操作
    • 1、概念
    • 2、按方向合并(pd.concat())
      • 2.1 竖直拼接(axis=0,默认情况)
      • 2.2 水平拼接(axis=1)
    • 3、按索引合并(pd.merge())
      • 3.1 合并策略
      • 3.2 例子
  • 四、交叉表与透视表
    • 1、交叉表
      • 1.1 概念
    • 2、透视表
  • 五、分组与聚合
    • 1、用dataframe的方法进行分组聚合
    • 2、用Series的方法进行分组聚合

一、缺失值处理

1、导入包

import numpy as np
import pandas as pd

2、相关方法

2.1 判断数据中是否存在NAN

# 如果存在缺失值就返回true,否则返回false
pd.isnull(dataframe)

# 如果不是缺失值标记为true,否则标记为false
pd.notnull(dataframe)

2.2 删除含有缺失值的样式

# 默认按行删除(axis = 'rows')
dataframe.dropna()

# 修改原数据
dataframe.dropna(inplace=True)

# 不会修改原数据,生成新的处理后的对象
dataframe.dropna(inplace=False)

2.3 替换\插入并补充

# 向原数据中的NAN替换成自己指定的value值,inplace策略和上述一样
dataframe.fillna(value, inplace=False)

3、实例

3.1 技巧1 通过返回true或false来判断是否有缺失值

(1)通过true判断是否有缺失值

# 首先将缺失值标记为true
data1 = pd.isnull(dataframe)

# 通过numpy的any来生成返回值(true代表存在NAN,false代表不存在NAN)
np.any(data1)

# 或者更简单一点,返回true代表存在NAN
data1.any() 

(2)通过false判断是否有缺失值

# 首先将缺失值标记为true
data2 = pd.notnull(dataframe)

# 通过numpy的all来生成返回值(false代表存在NAN,true代表不存在NAN)
np.all(data12)

# 或者更简单一点,返回false代表存在NAN
data1.all()

3.2 技巧2 填补缺失值

food["含有NAN的字段名"].fillna(food["含有NAN的字段名"].mean(), inplace=True)

4、处理其它标记的缺失值

4.1 针对不是NAN也不是数字的特殊字符

# 先将特殊字符转换成NAN,之后再逐一处理
data_new = data.replace(to_replace="特殊字符", value=np.nan)

二、数据离散化

1、概念

连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数,离散化方法经常作为数据挖掘的工具

2、分组

2.1 自动分组

pd.qcut(data,bins)

例子

data = ['一堆数据....']

# 首先自动分组(将数据分成了三组)
sr = pd.qcut(data, 3)

# 查看每一组的分组情况
sr.value_counts()

2.2 自定义分组

pd.cut(data,[])

例子

data = ['一堆数据....']

# 首先自定义范围
bins = [150,165,180,195]

# 再自定义分组
sr = pd.cut(data, bins)

# 查看每一组的分组情况
sr.value_counts()

3、将分组好的结果转换成one-hot编码

# 数据离散化
pd.get_dummies(sr, prefix="height")

三、合并操作

1、概念

当数据由多张表组成,有时候需要将不同的内容合并在一起分析

2、按方向合并(pd.concat())

2.1 竖直拼接(axis=0,默认情况)

pd.concat([data1, data2], axis=1)

2.2 水平拼接(axis=1)

pd.concat([data1, data2], axis=0)

3、按索引合并(pd.merge())

3.1 合并策略

left:左连接 主要根据左表索引合并
right:右连接 主要根据右表索引合并
outer:外连接 根据两表所有的索引合并
inner:内连接 根据两表共同的索引合并

3.2 例子

# left左表,right右表,how合并策略:inner内连接,on:按哪个索引合并
pd.merge(left, right, how="inner", on=['索引..'])

四、交叉表与透视表

1、交叉表

1.1 概念

交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)

pd.crosstab(value1, value2)

例子

pd.crosstab(food["土豆"], food["天"])

2、透视表

和交叉表差不多

# dataframe:表数据
dataframe.pivot_table(["土豆"], index=["天"])

五、分组与聚合

1、用dataframe的方法进行分组聚合

# col:数据对象    color:字段   prices:字段
# 根据color字段分组,再按prices中最大值进行聚合
col.groupby(by="color")["prices"].max()

2、用Series的方法进行分组聚合

# 根据color字段分组,再按prices中最大值进行聚合
col["prices"].groupby(col["color"]).max()
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式