码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据挖掘】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
    
    • 1
    • 2

    2、相关方法

    2.1 判断数据中是否存在NAN

    # 如果存在缺失值就返回true,否则返回false
    pd.isnull(dataframe)
    
    # 如果不是缺失值标记为true,否则标记为false
    pd.notnull(dataframe)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 删除含有缺失值的样式

    # 默认按行删除(axis = 'rows')
    dataframe.dropna()
    
    # 修改原数据
    dataframe.dropna(inplace=True)
    
    # 不会修改原数据,生成新的处理后的对象
    dataframe.dropna(inplace=False)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.3 替换\插入并补充

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

    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() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    (2)通过false判断是否有缺失值
    # 首先将缺失值标记为true
    data2 = pd.notnull(dataframe)
    
    # 通过numpy的all来生成返回值(false代表存在NAN,true代表不存在NAN)
    np.all(data12)
    
    # 或者更简单一点,返回false代表存在NAN
    data1.all()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.2 技巧2 填补缺失值

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

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

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

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

    二、数据离散化

    1、概念

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

    2、分组

    2.1 自动分组

    pd.qcut(data,bins)
    
    • 1

    例子

    data = ['一堆数据....']
    
    # 首先自动分组(将数据分成了三组)
    sr = pd.qcut(data, 3)
    
    # 查看每一组的分组情况
    sr.value_counts()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2 自定义分组

    pd.cut(data,[])
    
    • 1

    例子

    data = ['一堆数据....']
    
    # 首先自定义范围
    bins = [150,165,180,195]
    
    # 再自定义分组
    sr = pd.cut(data, bins)
    
    # 查看每一组的分组情况
    sr.value_counts()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    三、合并操作

    1、概念

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

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

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

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

    2.2 水平拼接(axis=1)

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

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

    3.1 合并策略

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

    3.2 例子

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

    四、交叉表与透视表

    1、交叉表

    1.1 概念

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

    pd.crosstab(value1, value2)
    
    • 1

    例子

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

    2、透视表

    和交叉表差不多

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

    五、分组与聚合

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

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

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

    # 根据color字段分组,再按prices中最大值进行聚合
    col["prices"].groupby(col["color"]).max()
    
    • 1
    • 2
  • 相关阅读:
    【导航】FreeRTOS学习专栏目录 【快速跳转】
    [管理与领导-122]:IT人看清职场中的隐性规则 - 18- 一半佛一半魔,一半君子一半小人,阴阳互转,生生不息,儒、释、道、法,一个不能少
    如何在 Spring Boot 中使用 Quartz 调度作业
    SSM学习52:SSM三大技术整合案例
    C/C++数1的个数 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    Java配置47-Spring Eureka 未授权访问漏洞修复
    用结构化思维解一切BUG(3):实际案例
    IO模型介绍(select、poll、epoll)
    小学生python游戏编程arcade----敌人自动移向角色并开火类的实现
    C++回溯法leetcode练习集
  • 原文地址:https://blog.csdn.net/qq_46106857/article/details/127769400
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号