数据导入与预处理-第6章-03数据规约

简介: 数据导入与预处理-第6章-03数据规约3 数据规约3.1 数据规约概述(6.3.1 )

3 数据规约

3.1 数据规约概述(6.3.1 )

数据规约:

对于中型或小型的数据集而言,通过前面学习的预处理方式已经足以应对,但这些方式并不适合大型数据集。由于大型数据集一般存在数量庞大、属性多且冗余、结构复杂等特点,直接被应用可能会耗费大量的分析或挖掘时间,此时便需要用到数据规约。

数据规约类似数据集的压缩,它的作用主要是从原有数据集中获得一个精简的数据集,这样可以在降低数据规模的基础上,保留了原有数据集的完整特性。在使用精简的数据集进行分析或挖掘时,不仅可以提高工作效率,还可以保证分析或挖掘的结果与使用原有数据集获得的结果基本相同。

要完成数据规约这一过程,可采用多种手段,包括维度规约、数量规约和数据压缩。

3.1.1 维度规约概述

维度规约是指减少所需属性的数目。数据集中可能包含成千上万个属性,绝大部分属性与分析或挖掘目标无关,这些无关的属性可直接被删除,以缩小数据集的规模,这一操作就是维度规约。

维度规约的主要手段是属性子集选择,属性子集选择通过删除不相关或冗余的属性,从原有数据集中选出一个有代表性的样本子集,使样本子集的分布尽可能地接近所有数据集的分布。

3.1.2 数量规约概述

数量规约是指用较小规模的数据替换或估计原数据,主要包括

回归与线性对数模型

直方图

聚类

采样

数据立方体

这几种方法,其中直方图是一种流行的数据规约方法。

直方图是一种流行的数据规约方法,它会将给定属性的数据分布划分为不相交的子集或桶(给定属性的一个连续区间)。

采样也是一种常用的数据规约手段,它通过选取随机样本以实现用小数据代表大数据,主要包括简单随机采样、聚类采样、分层采样等几种方法。

简单随机采样:简单随机采样又分为无放回简单随机抽样和有放回简单随机抽样,都是从原有数据集中的若干个元组中抽取部分样本。


聚类采样:聚类采样会先将原有数据集划分成若干个不相交的类,再从这些类的数据中抽取部分样本数据。


分层采样:分层采样会将原有数据集划分为若干个不相交的层,再从每层中随机收取部分样本数据。

3.1.3 数据压缩

数据压缩是利用编码或转换将原有数据集压缩为一个较小规模的数据集。无损压缩:若原有数据集能够从压缩后的数据集中重构,且不损失任何信息,则该数据压缩是无损压缩。

有损压缩:若原有数据集只能够从压缩后的数据集中近似重构,则该数据压缩是有损压缩。

在进行数据挖掘时,数据压缩通常采用两种有损压缩方法,分别是小波转换和主成分分析,这两种方法都会把原有数据变换或投影到较小的空间。


pandas中提供了一些实现数据规约的操作,包括重塑分层索引(6.3.2小节)和降采样(6.3.3小节),其中重塑分层索引是一种基于维度规约手段的操作,降采样是一种基于数量规约手段的操作,这些操作都会在后面的小节展开介绍。

3.2 重塑分层索引(6.3.2 )

3.2.1 重塑分层索引介绍

重塑分层索引是pandas中简单的维度规约操作,该操作主要会将DataFrame类对象的列索引转换为行索引,生成一个具有分层索引的结果对象。



df起初是一个只有单层索引的二维数据,其经过重塑分层索引操作之后,生成一个有两层行索引结构的result对象。

3.2.2 stack和unstack用法

pandas中可以使用stack()方法实现重塑分层索引操作。

stack(level=- 1, dropna=True)

level:表示索引的级别,默认为-1,即操作内层索引,若设为0,则会操作外层索引。

dropna:表示是否删除结果对象中存在缺失值的一行数据,默认为True。

同时还有一个stack的逆操作,unstack。两者的操作如下:


案例操作:

初始化数据

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1,2,3],[4,5,6]]),
                    index=pd.Index(['A', 'B'], name='index_name'),
                    columns=pd.Index(['one', 'two', 'three'],
                    name='col_name'))
df

输出为:

使用stack列转行

# 重塑df,使之具有两层行索引
# 原来的列数据one, two, three就到了行上来了,形成多层索引。
# 注意这里:stack()操作后返回的对象是Series类型
result = df.stack()
result

输出为:


使用unstack行转列

result.unstack()

输出为:


执行unstack时也可以指定层次

# 由于stack和unstack默认是操作最里层的数据,当我们想操作外层的数据时,就要传入一个层级序号或名称来拆分一个不同的层级。
# result.unstack(0) # 与result.unstack("index_name")等价
result.unstack("index_name")

输出为:


3.3 降采样(6.3.3 )

3.3.1 降采样介绍

降采样是一种简单的数据规约操作,它主要是将高频率采集数据规约到低频率采集数据,比如,从每日采集一次数据降低到每月采集一次数据,会增大采样的时间粒度,且在一定程度上减少了数据量。


降采样常见于时间序列类型的数据。假设现有一组按日统计的包含开盘价、收盘价等信息的股票数据(非真实数据),该

组数据的采集频率由每天采集一次变为每7天采集一次。


左表是按天采集的一个月股票数据,右表是按7天采集的一个月股票数据,且每行数据对应左表相同周期内数据的平均值。


3.3.2 降采样resample用法

pandas中可以使用resample()方法实现降采样操作。resample方法,是针对时间序列的频率转换和重采样的简便方法。对象必须具有类似日期时间的索引(DatetimeIndex、PeriodIndex或TimedeltaIndex),或者调用方必须将类似日期时间的系列/索引的标签传递给on/level关键字参数。

resample(rule, axis=0, closed=None, label=None, convention='start', 
       kind=None, loffset=None, base=None, on=None, level=None, 
       origin='start_day', offset=None)

rule:表示降采样的频率。

axis:表示沿哪个轴完成降采样操作,可以取值为0/‘index’或1/‘columns’,默认值为0。

closed:表示各时间段的哪一端是闭合的,可取值为’right’、'left’或None。

label:表示降采样时设置的聚合结果的标签。

limit:表示允许前向或后向填充的最大时期数。


更多操作可以参考官网

创建9个间隔1分钟的时间戳Series

import numpy as np
import pandas as pd
#  创建9个间隔1分钟的时间戳Series。
index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
series

输出为:


按照时间间隔3分钟下采样:

# 按照时间间隔3分钟下采样
series.resample('3T').sum()

输出为:


相关文章
|
6月前
|
数据采集 数据可视化 数据挖掘
数据清洗有什么方式
数据清洗有什么方式
|
6月前
|
数据采集 数据挖掘
kettle开发-数据清洗之字符串替换
kettle开发-数据清洗之字符串替换
295 2
|
5月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python实现高效的数据清洗与预处理流程
本文旨在探讨如何使用Python编程语言及其强大的数据处理库(如pandas、numpy等)来构建一个高效且灵活的数据清洗与预处理流程。与常规的数据清洗方法不同,本文不仅关注于传统的缺失值填充、异常值处理、数据类型转换等步骤,还引入了数据质量评估、数据特征选择以及自动化处理流程的设计等高级主题。通过实际案例和代码演示,本文将为读者提供一套完整的数据清洗与预处理解决方案,助力数据分析师和数据科学家在数据探索阶段更加高效、准确地处理数据。
|
数据采集 机器学习/深度学习 算法
②数据预处理之数据清理,数据集成,数据规约,数据变化和离散化
数据预处理之数据清理,数据集成,数据规约,数据变化和离散化
812 0
②数据预处理之数据清理,数据集成,数据规约,数据变化和离散化
|
6月前
|
存储 数据采集 分布式计算
ETL-预处理
ETL-预处理
103 3
|
6月前
|
数据可视化 Java Linux
数据导入与预处理-第7章-数据清理工具OpenRefine
数据导入与预处理-第7章-数据清理工具OpenRefine
|
6月前
|
存储 分布式计算 分布式数据库
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
53 0
|
6月前
|
JSON 数据库 数据格式
数据导入与预处理-课程总结-04~06章
数据导入与预处理-课程总结-04~06章
|
SQL 存储 自然语言处理
数据导入与预处理-第6章-01数据集成
数据导入与预处理-第6章-01数据集成 1 数据集成概述 1.1 数据集成需要关注的问题 2 基于Pandas实现数据集成
数据导入与预处理-第6章-01数据集成
|
数据采集 存储 自然语言处理
数据导入与预处理-课程总结-01~03章(上)
数据导入与预处理-课程总结-01~03章 第1章 数据预处理概述 1.1 基本概念 1.1.1 大数据项目开发流程
数据导入与预处理-课程总结-01~03章(上)