0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在大型数据集中使用datatable包进行数据处理

WpOh_rgznai100 来源:lq 2019-07-18 14:24 次阅读

【导读】工具包 datatable 的功能特征与 Pandas 非常类似,但更侧重于速度以及对大数据的支持。此外,datatable 还致力于实现更好的用户体验,提供有用的错误提示消息和强大的 API 功能。通过本文的介绍,你将学习到如何在大型数据集中使用 datatable 包进行数据处理,特别在数据量特别大的时候你可以发现它可能比 Pandas 更加强大。

前言

data.table 是 R 中一个非常通用和高性能的包,使用简单、方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Bioconductor 软件包使用它。如果你是 R 的使用者,可能已经使用过 data.table 包。

而对于 Python 用户,同样存在一个名为 datatable 包,专注于大数据支持、高性能内存/内存不足的数据集以及多线程算法等问题。 在某种程度上,datatable 可以被称为是 Python 中的 data.table。

Datatable初教程

为了能够更准确地构建模型,现在机器学习应用通常要处理大量的数据并生成多种特征,这已成为必要的。而 Python 的 datatable 模块为解决这个问题提供了良好的支持,以可能的最大速度在单节点机器上进行大数据操作 (最多100GB)。datatable 包的开发由 H2O.ai 赞助,它的第一个用户是 Driverless.ai。

接下来,我们就开始初体验一下 datatable 的简单使用。

安装

在 MacOS 系统上,datatable 包可以通过 pip 命令安装,如下图所示:

pip install datatable

Linux 平台上,安装过程需要通过二进制分布来实现,如下所示:

# If you have Python 3.5pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp35-cp35m-linux_x86_64.whl# If you have Python 3.6pipinstallhttps://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp36-cp36m-linux_x86_64.whl

很遗憾的是,目前 datatable 包还不能在 Windows 系统上工作,但 Python 官方也在努力地增加其对 Windows 的支持。更多的信息可以查看 Build instructions 的说明。

地址:

https://datatable.readthedocs.io/en/latest/install.html

数据读取

这里使用的数据集是来自 Kaggle 竞赛中的 Lending Club Loan Data 数据集, 该数据集包含2007-2015期间所有贷款人完整的贷款数据,即当前贷款状态 (当前,延迟,全额支付等) 和最新支付信息等。整个文件共包含226万行和145列数据,数据量规模非常适合演示 datatable 包的功能。

# Importing necessary Librariesimport numpy as npimport pandas as pdimport datatable as dt

首先将数据加载到 Frame 对象中,datatable 的基本分析单位是 Frame,这与Pandas DataFrame 或 SQL table 的概念是相同的:即数据以行和列的二维数组排列展示。

datatable 读取

%%timedatatable_df = dt.fread("data.csv")____________________________________________________________________CPU times: user 30 s, sys: 3.39 s, total: 33.4 s Wall time: 23.6 s

如上图,fread() 是一个强大又快速的函数,能够自动检测并解析文本文件中大多数的参数,所支持的文件格式包括 .zip 文件、URL 数据,Excel 文件等等。此外,datatable 解析器具有如下几大功能:

能够自动检测分隔符,标题,列类型,引用规则等。

能够读取多种文件的数据,包括文件,URL,shell,原始文本,档案和 glob 等。

提供多线程文件读取功能,以获得最大的速度。

在读取大文件时包含进度指示器。

可以读取 RFC4180 兼容和不兼容的文件。

pandas 读取

下面,使用Pandas 包来读取相同的一批数据,并查看程序所运行的时间。

%%timepandas_df= pd.read_csv("data.csv")___________________________________________________________CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 sWall time: 1min 4s

由上图可以看到,结果表明在读取大型数据时 datatable 包的性能明显优于Pandas,Pandas 需要一分多钟时间来读取这些数据,而 datatable 只需要二十多秒。

帧转换 (Frame Conversion)

对于当前存在的帧,可以将其转换为一个Numpy 或Pandas dataframe 的形式,如下所示:

numpy_df = datatable_df.to_numpy()pandas_df = datatable_df.to_pandas()

‍下面,将 datatable 读取的数据帧转换为Pandas dataframe 形式,并比较所需的时间,如下所示:

%%timedatatable_pandas = datatable_df.to_pandas()___________________________________________________________________CPU times: user 17.1 s, sys: 4 s, total: 21.1 sWall time: 21.4 s

看起来将文件作为一个 datatable frame 读取,然后将其转换为Pandas dataframe比直接读取Pandas dataframe 的方式所花费的时间更少。因此,通过 datatable 包导入大型的数据文件再将其转换为Pandas dataframe 的做法是个不错的主意。

type(datatable_pandas)___________________________________________________________________pandas.core.frame.DataFrame

帧的基础属性

下面来介绍 datatable 中 frame 的一些基础属性,这与Pandas 中 dataframe 的一些功能类似。

print(datatable_df.shape) # (nrows, ncols)print(datatable_df.names[:5]) # top 5 column namesprint(datatable_df.stypes[:5]) # column types(top 5)______________________________________________________________(2260668, 145)('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv')(stype.bool8,stype.bool8,stype.int32,stype.int32,stype.float64)

也可以通过使用 head 命令来打印出输出的前 n 行数据,如下所示:

datatable_df.head(10)

注意:这里用颜色来指代数据的类型,其中红色表示字符串,绿色表示整型,而蓝色代表浮点型。

统计总结

在Pandas 中,总结并计算数据的统计信息是一个非常消耗内存的过程,但这个过程在 datatable 包中是很方便的。如下所示,使用 datatable 包计算以下每列的统计信息:

datatable_df.sum() datatable_df.nunique()datatable_df.sd() datatable_df.max()datatable_df.mode() datatable_df.min()datatable_df.nmodal() datatable_df.mean()

下面分别使用 datatable 和Pandas 来计算每列数据的均值,并比较二者运行时间的差异。

datatable 读取

%%timedatatable_df.mean()_______________________________________________________________CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 sWall time: 1.43 s

Pandas 读取

pandas_df.mean()__________________________________________________________________Throws memory error.

可以看到,使用Pandas 计算时抛出内存错误的异常。

数据操作

和 dataframe 一样,datatable 也是柱状数据结构。在 datatable 中,所有这些操作的主要工具是方括号,其灵感来自传统的矩阵索引,但它包含更多的功能。诸如矩阵索引,C/C++,R,Pandas,Numpy 中都使用相同的 DT[i,j] 的数学表示法。下面来看看如何使用 datatable 来进行一些常见的数据处理工作。

▌选择行/列的子集

下面的代码能够从整个数据集中筛选出所有行及 funded_amnt 列:

datatable_df[:,'funded_amnt']

这里展示的是如何选择数据集中前5行3列的数据,如下所示:

datatable_df[:5,:3]

▌帧排序

datatable 排序

在 datatable 中通过特定的列来对帧进行排序操作,如下所示:

%%timedatatable_df.sort('funded_amnt_inv')_________________________________________________________________CPU times: user 534 ms, sys: 67.9 ms, total: 602 msWall time: 179 ms

Pandas 排序

%%timepandas_df.sort_values(by = 'funded_amnt_inv')___________________________________________________________________CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 sWalltime:12.4s

可以看到两种包在排序时间方面存在明显的差异。

▌删除行/列

下面展示如何删除 member_id 这一列的数据:

del datatable_df[:, 'member_id']

▌分组 (GroupBy)

与Pandas 类似,datatable 同样具有分组 (GroupBy) 操作。下面来看看如何在 datatable 和Pandas 中,通过对 grade 分组来得到 funded_amout 列的均值:

datatable 分组

%%timefor i in range(100): datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)]____________________________________________________________________CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 sWall time: 2.42 s

pandas 分组

%%timefor i in range(100): pandas_df.groupby("grade")["funded_amnt"].sum()____________________________________________________________________CPU times: user 12.9 s, sys: 859 ms, total: 13.7 sWalltime:13.9s

▌.f 代表什么

在 datatable 中,f 代表 frame_proxy,它提供一种简单的方式来引用当前正在操作的帧。在上面的例子中,dt.f 只代表 dt_df。

▌过滤行

在 datatable 中,过滤行的语法与GroupBy的语法非常相似。下面就来展示如何过滤掉 loan_amnt 中大于 funding_amnt 的值,如下所示。

datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"]

▌保存帧

在 datatable 中,同样可以通过将帧的内容写入一个 csv 文件来保存,以便日后使用。如下所示:

datatable_df.to_csv('output.csv')

有关数据操作的更多功能,可查看 datatable 包的说明文档

地址:

https://datatable.readthedocs.io/en/latest/using-datatable.html

总结

在数据科学领域,与默认的Pandas 包相比,datatable 模块具有更快的执行速度,这是其在处理大型数据集时的一大优势所在。 然而,就功能而言,目前 datatable 包所包含的功能还不如pandas 完善。相信在不久的将来,不断完善的 datatable 能够更加强大。

本文所涉及的代码可以从 Github 或 binder 上获取:

Github 地址:

https://github.com/parulnith/An-Overview-of-Python-s-Datatable-package)

binder 地址:

https://mybinder.org/v2/gh/parulnith/An-Overview-of-Python-s-Datatable-package/master?filepath=An%20Overview%20of%20Python%27s%20Datatable%20package.ipynb

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据处理
    +关注

    关注

    0

    文章

    506

    浏览量

    28246
  • 代码
    +关注

    关注

    30

    文章

    4554

    浏览量

    66729
  • 数据集
    +关注

    关注

    4

    文章

    1178

    浏览量

    24347

原文标题:媲美Pandas?一文入门Python的Datatable操作

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数据处理

    初学者想请教一下大家,采集的噪声信号,想要对采集到的数据累计到一定数量再进行处理,计划每隔0.2秒进行一次数据处理,(得到均方根值等一些特征
    发表于 01-07 10:11

    DSP怎么在进行数据处理的同时进行串口通信

    DM642的学习版中,怎么在进行数据处理的同时进行串口通信?求大神指导啊纠结了好长时间了
    发表于 02-24 15:42

    对高速电主轴振动进行数据的采集,但不知怎么对数据处理

    我想对高速电主轴振动进行数据的采集,然后对他进行然后对数据进行数据的分析,请大神帮给这个程序加一个滤波然后在进行时域分析,频谱分析,功率谱分
    发表于 07-25 11:18

    labview实时处理数据出现的问题

    我现在可以用labview将单片机采集的数据通过串口visa函数上传在labview中,然后才可以进行数据处理,也就是发送完数据才可以进行数据处理,怎样可以在发送
    发表于 09-11 15:05

    电子称重显示器的数据处理方法

    显示器为例,介绍在电子秤中利用MCS-51系列单片机进行数据处理的方法.更多详情:https://www.elecfans.com/soft/31/2011/20110419195441.html
    发表于 11-17 16:58

    HX711如何进行数据处理

    HX711如何进行数据处理
    发表于 11-21 22:03

    关于通信原理中使用QPSK进行数据包传输实验的若干问题,求解答

    问题如下:1.在脉冲成形滤波之前,为什么要对符号进行内插操作?2. 匹配滤波器的作用是什么3.(最重要) 进行数据包传输时数据同步原理 以及 如何确定起始抽样时刻十分紧急,希望有好心人可以帮帮忙,感激不尽。
    发表于 06-04 17:07

    数据专业技术学习之大数据处理流程

    集中大型分布式数据库 或者分布式存储集群,利用分布式技术来对存储于其内的集中的海量数据进行普通
    发表于 06-11 16:41

    请问下位机采集多通道数据怎么通过VISA串口上传到labview进行数据处理

    请问我想用单片机stm32采集两个通道的数据通过labview串口上传,然后进行数据处理,比如说:波形显示、保存数据,单通道的我会弄程序,但是多通道的就不知道怎么做了。VISA是不是只能接收一个通道的
    发表于 07-28 11:33

    请问连续多数据数据传输速度超过DSP的数据处理速度怎么解决?

    RT目前在做一个项目,可能会出现连续多数据数据传输速度超过DSP的数据处理速度,请问这种情况怎么解决?是否有现成的解决思路可以参考?
    发表于 09-30 08:05

    怎么解决人工神经网络并行数据处理的问题

    本文提出了一个基于FPGA 的信息处理的实例:一个简单的人工神经网络应用Verilog 语言描述,该数据流采用模块化的程序设计,并考虑了模块间数据传输信号同 步的问题,有效地解决了人工神经网络并
    发表于 05-06 07:22

    STM32 USART串口是如何进行数据处理的呢

    STM32 USART串口接收数据的具体步骤有哪些?STM32 USART串口是如何进行数据处理的呢?
    发表于 11-25 08:56

    Thumb数据处理指令

    Thumb数据处理指令 数据处理指令是指那些操作寄存器中数据的指令。Thumb指令集中数据处理指令是ARM指令集
    发表于 10-19 10:04 0次下载

    成功进行数据整合的案例

    预置数十个开箱即用连接器,基于SDK和热插拔的连接器扩展技术,快速启动数据集成,然后利用低代码、自动化数据处理管道方式进行数据建模。
    的头像 发表于 08-19 14:14 646次阅读

    数据处理的基本问题

    计算机是进行数据处理、运算的机器(有点儿像机电系统中的电动机)。当我们回顾数据管理简史并较深入理解计算机原理后会发现,有两个基本问题就包含在其中, 一是处理数据在在什么地方,二是要
    的头像 发表于 02-21 16:12 738次阅读
    <b class='flag-5'>数据处理</b>的基本问题