您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python的datatable程序包概述

时间:2019-08-28 13:22:49  来源:  作者:

 

从文明之初到2003年,只创造了5艾字节的信息,但是现在每两天就有如此之多的信息产生。埃里克·施密特(Eric Schmidt)

 

如果你是R使用者,可能你已经使用过data.table程序包。Data.table是R中数据帧程序包的延伸。涉及大型数据(包括RAM中1的10GB)快速集合时,该数据包也是R使用者的首选程序包。

 

R的data.table程序包使用简易方便,非常通用且拥有高性能。在R领域,此包十分出名,其每月下载量超过了4万,几乎650 CRAN(新型无线接入网构架)及Bioconductor包使用这个datatable包。

 

所以,Python使用者可以从中得到什么?好消息是Python中也有与data.table等同的程序包,称为datatable,其明确注重大数据支持、高性能、内存外存数据集以及多线程算法。某种程度上来说,这个也可以称为data.table的年轻同胞。

 

Datatable

墙裂推荐!Python的datatable程序包概述

 

 

 

现代机器学习应用需要处理巨大数量的数据并生成多个功能。为了构建更精确的模型,这是必需的。Python的datatable模块正是为了应对这种类问题而创建的。这就相当于是一个在单节机器上以尽可能最大的速度运行大数据(达100GB)的工具包。datatable由H2O.ai 出资开发,其首个使用者是 Driverless.ai。

 

此工具箱与panda非常相似,但更侧重于速度和大数据支持。

 

Pythondatatable也力求用户良好体验,反馈错误信息,拥有强大的API(应用程序编程接口)。通过本文,可以了解如何使用此datatable以及其用于大数据时是如何优于pandas的。

 

安装

 

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,但是其也正在实现对Windows的支持。

Github Repository传送门:https://github.com/parulnith/An-Overview-of-Python-s-Datatable-package

 

读取数据

 

使用的数据集来自于Kaggle网,属于Lending Club Loan DataDataset。此数据集是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 表是相同的概念:数据排列成具有行和列的二维数组。

利用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压缩文档中的下载数据或URLs、读取Excel文件以及其他文件。

不仅如此,datatable分析程序还有以下功能:

· 可以自动删除分隔符、页眉、列类型以及引号规则等。

· 可以多源读取数据,包括包括文件、URL、shell、原始文本、存档和glob。

· 极速多线程文件读取。

· 显示读取文件的进度条。

· 可以读取 RFC4180相容型及非相容型文件。(传送门:https://tools.ietf.org/html/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。因为都i相同数据时,pandas读取时间超过了一分钟,而datatable则只使用了数秒。
 

Frame转换

 

现有的Frame还可以如下所示转化为numpy或dateframe。

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

 

现在将现有frame转化为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框架,然后将其转换为panda的dataframe所需的时间比直接利用pandas的dataframe读取文件所需的时间要少。所以,通过datatable导入一个大数据文件,然后将其转换为panda的dataframe,这似乎是一个好主意。

type(datatable_pandas)
__________________________________
pandas.core.frame.DataFrame

 

基础Frame属性

 

一起来看看与pandas性能相似的datatable fame的基础性能。

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)

 

墙裂推荐!Python的datatable程序包概述

 

datatableframe中前10行略表

颜色表示数据类型。其中,红色表示字符串,绿色表示整数,蓝色则代表浮动。

 

汇总统计信息

 

在panda中计算汇总统计信息是一个消耗内存的过程,但在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中,所有操作最基础的媒介就是方括号符号,即传统矩阵索引,只不过其具备更多的功能。

 

墙裂推荐!Python的datatable程序包概述

 

 

datatable中的方括号符号

 

在指数矩阵、C/C++, R, pandas, numpy等数学运算中利用相同的DT[i, j]符号。来看看如何利用datatable执行常见的数据操作活动:

#选择行/列子集

下列代码从数据集中选择所有的行及 funded_amnt列。

datatable_df[:,'funded_amnt']

 

 

墙裂推荐!Python的datatable程序包概述

 

这里展示了是如何选取5行及3列的。

datatable_df[:5,:3]

 

墙裂推荐!Python的datatable程序包概述

 

 

 

#Frame排序

利用datatable

通过datatable完成利用特定列队frame的排序,如下所示:

%%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

 

关注datatable和pandas大量的时间差异。

#删除行/列

这里阐述了如何删除名为member_id的列:

del datatable_df[:, 'member_id']

 

#分组

就像在pandas中的一样,datatable也有分组功能。来看看如何利用grade列来对funded_amount列平均值进行分组。

利用datatable

%%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代表什么?

f代表frame proxy,提供一种简单的方法来使用当前操作的Frame。就例子而言,dt.f代表dt_df。

#筛选行

 

筛选行的句法与分组相似。对loan_amnt的这些行进行筛选,其中,loan_amnt的值大于funded_amnt。

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

 

储存Frame

还可以将Frame的内容写入csv文件,以便将来使用

datatable_df.to_csv('output.csv')

documentation传送门,了解更多操作功能:https://datatable.readthedocs.io/en/latest/using-datatable.html

 

结论

 

与默认的Panda相比,datatable模块无疑加快了执行速度,这在处理大型数据集时无疑是一个优势所在。然而,datatable在功能方面却落后于Panda。但是,由于仍在积极地开发datatable,将来可能会增加一些库。

 



Tags:datatable   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在进行C#接口开发时经常需要将数据集转换成json返回,下面介绍一种将DataTable数据转换成实体类,然后再转换成json的方法。一、创建全病案类/// <summary> /// 全病案 //...【详细内容】
2021-11-04  Tags: datatable  点击:(45)  评论:(0)  加入收藏
从文明之初到2003年,只创造了5艾字节的信息,但是现在每两天就有如此之多的信息产生。埃里克&middot;施密特(Eric Schmidt) 如果你是R使用者,可能你已经使用过data.table程序包。...【详细内容】
2019-08-28  Tags: datatable  点击:(212)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条