登陆

比美pandas的数据剖析工具包Datatable

admin 2019-10-01 298人围观 ,发现0个评论

1 前语

data.table 是 R 中一个十分通用和高功用的包,运用简略、便利并且速度快,在 R 言语社区十分受欢迎,每个月的下载量超越 40 万,有近 650 个 CRAN 和 Bioconductor 软件包运用它。假如你是 R 的运用者,或许现已运用过 data.table 包。

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

2 Datatable简介

为了可以更精确地构建模型,现在机器学习运用一般要处理很多的数据并生成多种特征,这已成为必要的。而 Python 的 datatable 模块为处理这个问题供给了杰出的支撑,以或许的最大速度在单节点机器上进行大数据操作 (最多100GB)。datatable 包的开发由 H2O.ai 资助,它的第一个用户是 Driverless.ai。

2.1 装置

Mac OS体系

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

2.2 数据读取

这儿运用的数据集是来自 Kaggle 比赛中的 Lending Club Loan Data 数据集, 该数据集包括2007-2015期间一切借款人完好的借款数据,即当时借款状况 (当时,推迟,全额付出等) 和最新付出信息等。整个文件共包括226万行和145列数据,数据量规划十分合适演示 datatable 包的功用。

数据集:

"""
链接:https://pan.baidu.com/s/1_vVviJWj6A9I05F7bmQNlg 暗码:y4jd
"""
import numpy as np
import pandas as pd
import datatable as dt

首先将数据加载到 Frame 目标中,datatable 的根本剖析单位是 Frame,这与Pandas DataFrame 或 SQL table 的概念是相同的:即数据以行和列的二维数组摆放展现。

运用datatable读取数据

%%time
dft = dt.fread('loan.csv')
CPU times: user 23.8 s, sys: 2.32 s, total: 26.1 s
Wall time: 2.54 s

这个数据集一共226万行,145列,将近1.2G的数据,经过datatable读取只用了2.54s

如上所示,fread() 是一个强壮又快速的函数,可以自动检测并解析文本文件中大大都的参数,所支撑的文件格局包括 .zip 文件、URL 数据,Excel 文件等等。此外,datatable 解析器具有如下几比美pandas的数据剖析工具包Datatable大功用:

  • 可以自动检测分隔符,标题,列类型,引证规矩等。
  • 可以读取多种比美pandas的数据剖析工具包Datatable文件的数据,包括文件,URL,shell,原始文本,档案和 glob 等。
  • 供给多线程文件读取功用,以取得最大的速度。
  • 在读取大文件时包括进展指示器。
  • 可以读取 RFC4180 兼容和不兼容的文件。

运用pandas读取数据

!!!留意:因为数据量过大,运用pandas读取数据会常常使服务挂机,所以可以运用数据量稍小的数据集来测验

%%time
df = pd.read_csv('loan.csv')
CPU times: user 27.3 s, sys: 4.68 s, total: 31.9 s
Wall time: 28.5 s

由此可以看出,结果表明在读取大型数据时 datatable 包的功用显着优于 Pandas,Pandas 需求挨近30秒的时刻来读取这些数据,而 datatable 只需求2秒多。

2.3 帧转化 (Frame Conversion)

关于当时存在的帧,可以将其转化为一个 Numpy 或 Pandas dataframe 的方法,如下所示:

numpy_df = dft.to_num主持人马婷去世py()
pandas_df = dft.to_pandas()

下面,将 datatable 读取的数据帧转化为 Pandas dataframe 方法,并比较所需的时刻,如下所示:

因为 Lending Club Loan Data 数据集的数据量过大,运用to_padnas操作,jupyte服务简略挂机,所以运用一个数据集较小的进行测验。

%%time
dft = dt.fread('baba.csv')
pandas_df = dft.to_pandas()
CPU times: user 2.44 ms, sys: 287 s, total: 2.72 ms
Wall time: 2.62 ms

经过datatable读取数据加上将其转化为DataFrame数组,一共是2.62ms.

%%time
dft = pd.read_csv('baba.csv')
CPU times: user 7.95 ms, sys: 3.18 ms, total: 11.1 ms
Wall time: 14.4 ms

单经过pandas读取数据,一共需求14.4ms。

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

2.4 帧的根底特点

下面来介绍 datatable 中 frame 的一些根底特点,这与 Pandas 中 dataframe 的一些功用类似。

print(dft.shape) # (nrows, ncols)
print(dft.names[:5]) # top 5 column names
print(dft.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 行数据,如下所示:

dft.head(10)

留意:这儿用色彩来指代数据的类型,其间赤色表明字符串,绿色表明整型,而蓝色代表浮点型。

2.5 核算总结

在 Pandas 中,总结并核算数据的核算信息是一个十分耗费内存的进程,但这个进程在 datatable 包中是很便利的。如下所示,运用 datatable 包核算以下每列的核算信息:

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

下面别离运用 datatable 和Pandas 来核算每列数据的均值,并比较二者运转时刻的差异。

Datatable读取

%%time
dft.mean()
____________________________________________比美pandas的数据剖析工具包Datatable______________________
CPU times: user 3.56 s, sys: 5.35 ms, total: 3.56 s
Wall time: 302 ms

Pandas读取

pandas_df.mean()
__________________________________________________________________
Throws memory error.

运用 Pandas 核算时抛出内存过错的反常。

3 数据操作

和 dataframe 相同,datatable 也是柱状数据结构。在 datatable 中,一切这些操作的首要东西是方括号,其创意来自传统的矩阵索引,但它包括更多的功用。比如矩阵索引,C/C++,R,Pandas,Numpy 中都运用相同的 DT[i,j] 的数学表明法。下面来看看怎么运用 datatable 来进行一些常见的数据处理作业。

挑选行/列的子集

下面的代码可以从整个数据会集筛选出一切行及 funded_amnt 列:

dft[:,'funded_amnt']

展现怎么挑选数据会集前5行3列的数据,如下所示:

dft[:5,:3]

帧排序

  • datatable 排序

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

%%time
dft.sort('funded_amnt_inv')
CPU times: user 1.47 s, sys: 77.1 ms, total: 1.55 s
Wall time: 147 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 dft[:, 'member_id']

分组 (GroupBy)

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

  • datatable 分组
%%time
for i in range(100):
dft[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)]
CPU times: user 9.45 s, sys: 643 ms, total: 10.1 s
Wall time: 861 ms
  • 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 的值,如下所示。

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

保存帧

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

dft.to_csv('output.csv')

有关数据操作的更多功用,可检查 datatable 包的阐明文档

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

总结

在数据科学范畴,与默许的 Pandas 包比较,datatable 模块具有更快的履行速度,这是其在处理大型数据集时的一大优势地点。但是,就功用而言,现在 datatable 包所包括的功用还不如 pandas 完善。信任在不久的将来,不断完善的 datatable 可以愈加强壮。

  • 英飞拓10月15日快速反弹
  •   记者了解到,在农药化肥污染管理方面,南昌市要点环绕科学安全用药用肥、用药台账、上肥结构、上肥方法等方面展开排查整江西南昌市将展开“百日攻坚”整治农业乡村污染改,力求年末前农药化肥使用量继

  • 江西南昌市将展开“百日攻坚”整治农业乡村污染

    2019-10-19
  • 中科金财10月15日盘中跌幅达5%
  • 请关注微信公众号
    微信二维码
    不容错过
    Powered By Z-BlogPHP