作者 | Parul Pandey

译者 | linstancy

责编 | Jane

出品 | Python大本营(id:pythonnews)

【导读】工具包 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.5
pip 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.6
pip install https://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 Libraries
import numpy as np
import pandas as pd
import datatable as dt

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

  • datatable 读取

%%time
datatable_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 包来读取相同的一批数据,并查看程序所运行的时间。

%%time
pandas_df= pd.read_csv("data.csv")
___________________________________________________________
CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s
Wall 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 形式,并比较所需的时间,如下所示:

%%time
datatable_pandas = datatable_df.to_pandas()
___________________________________________________________________
CPU times: user 17.1 s, sys: 4 s, total: 21.1 s
Wall 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 names
print(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 读取

%%time
datatable_df.mean()
_______________________________________________________________
CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s
Wall 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 中通过特定的列来对帧进行排序操作,如下所示:

%%time
datatable_df.sort('funded_amnt_inv')
_________________________________________________________________
CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms
Wall time: 179 ms
  • Pandas 排序

%%time
pandas_df.sort_values(by = 'funded_amnt_inv')
___________________________________________________________________
CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s
Wall time: 12.4 s

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

删除行/列

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

del datatable_df[:, 'member_id']

分组 (GroupBy)

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

  • datatable 分组

%%time
for 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 s
Wall time: 2.42 s
  • pandas 分组

%%time
for i in range(100):    pandas_df.groupby("grade")["funded_amnt"].sum()
____________________________________________________________________
CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s
Wall time: 13.9 s

.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

原文链接:

https://towardsdatascience.com/an-overview-of-pythons-datatable-package-5d3a97394ee9

(*本文为 AI科技大本营转载文章,转载请微信联系 1092722531

精彩推荐

大会开幕倒计时6天!

2019以太坊技术及应用大会特邀以太坊创始人V神与众多海内外知名技术专家齐聚北京,聚焦区块链技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。即刻扫码,享优惠票价。

推荐阅读

  • 华为最强自研NPU问世,麒麟810“抛弃”寒武纪

  • 真正的博士是如何参加AAAI, ICML, ICLR等AI顶会的?

  • Python最抢手、Java最流行、Go最有前途,7000位程序员揭秘2019软件开发现状

  • 程序员学Python编程或许不知的十大提升工具

  • 不要让 Chrome 成为下一个 IE!

  • 这位博士跑赢“地震波”:提前 10 秒预警宜宾地震!

  • 一张图告诉你到底学Python还是Java!

  • 鸿蒙将至,安卓安否?

  • 25岁创立加密城堡, 曾经独角兽创始人社会名流天才黑客是这里的沙发客, 如今却无人问津……

  • 352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集

你点的每个“在看”,我都认真当成了喜欢

媲美Pandas?一文入门Python的Datatable操作相关推荐

  1. 一文入门 Python 数据分析库 Pandas

    Pandas 通常用于快速简单的数据操作.聚合和可视化.在这篇文章中,我将概述如何学习这一工具的使用. Pandas 通常用于快速简单的数据操作.聚合和可视化.在这篇文章中,我将概述如何学习这一工具的 ...

  2. mac pycharm安装设置_入门python,这样操作,简单易学(安装教程)

    首次接触python,感觉比PHP更加实用,适用性更佳广泛.不局限于网站建设,搭建服务器.选择性更佳广.接下来告诉新手宝宝们,怎么在mac和window上安装python软件Pycharm 一.Pyc ...

  3. 王者荣耀五周年,带你入门Python爬虫基础操作(102个英雄+326款皮肤)

    简单的目录 1.概述 2.网页分析 2.1.html页面源数据 2.2.json源数据 3.数据请求 4.数据解析 4.1.html数据解析 4.1.1.bs4 4.1.2.xpath 4.2.jso ...

  4. 王者荣耀五周年,带你入门Python爬虫基础操作!

    1.概述 <王者荣耀>上线至今5个年头了,作为这些年国内最热门的手游(没有之一),除了带来游戏娱乐之外,我们在这五周年之际,试着从他们的官网找点乐趣,学习一下Python爬虫的一些简单基础 ...

  5. python办公自动化知识点_Python自动化办公知识点整理汇总|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? ​ 这可能是很多非IT职场人士面临的困 ...

  6. python自动办公知识点_Python自动化办公知识点整理汇总|简明python教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? ​ 这可能是很多非IT职场人士面临的困 ...

  7. python 计算机程序设计-某高校计算机编程教授教你如何快速入门python,一文带你进入编程...

    image 如何快速入门Python 学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开 ...

  8. 用python玩转办公软件(pandas数据分析)入门

    用python玩转办公软件(pandas数据分析)入门 文章目录 用python玩转办公软件(pandas数据分析)入门 1.pandas介绍 2.csv文件介绍 3.pandas常用操作csv (1 ...

  9. pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...

    此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...

最新文章

  1. PHP问题 —— PHP Parse error: syntax error, unexpected
  2. Cisco呼吁Arista停止在美国销售产品
  3. pptp client
  4. 语义匹配(二)搜狐文本匹配大赛BaseLine比较:P-tuning和Conditional_LN实现多任务语义匹配
  5. vue-li 配置介绍
  6. hybris测试数据的存放位置
  7. 微信适配国产操作系统:原生支持 Linux
  8. shell脚本之函数篇
  9. 【Vue.js源码解析 二】-- 虚拟 DOM
  10. 微软发现已遭在野利用的 SolarWinds 新0day
  11. nodejs 批处理执行 app.js
  12. 8.2、磁盘、目录和文件计算
  13. 如何实现代码自动生成?
  14. 数据结构PTA期末复习题集
  15. 小程序专题:14款活动报名小程序
  16. Window XP驱动开发(十一) USB2.0 芯片CY7C68013A+FPGA实现的高速传输系统设计(软件及硬件)
  17. 软件测试和调试的区别
  18. 怎样找到优质的APP推广渠道
  19. 关于Windows-Linux双系统的启动引导
  20. linux 批量ping检测

热门文章

  1. 平安陆金所-点金计划,简直是骗子行为。
  2. Linux下的Shell工作原理
  3. 菜鸟学习HTML5+CSS3(一)
  4. 【基础篇】DatePickerDialog日期控件的基本使用(一)
  5. PHP 5.3 中不建议使用的(部分)函数列表
  6. Windows上安装Nacos
  7. EM算法(Expectation Maximization)期望最大化算法
  8. 2018-3-27 遗传算法中的轮盘赌
  9. linux 基础命令一
  10. random类的使用