快试试这个Kaggle大数据集高效访问教程 数据太多而无法使用 (快试试这个家常烧饼做法)

文章编号:36889 资讯动态 2024-11-30 数据处理 kaggle

译者:AI研习社( 季一帆 )

双语原文链接: Tutorial on reading large>大规模数据集

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

我敢肯定,你在解决某些问题时,一定报怨过没有足够的数据,但偶尔也会抱怨数据量太多难以处理。本文探讨的问题就是对超大规模数据集的处理。

在数据过多的情况下,最常见的解决方案是根据RAM采样适量数据,但这却浪费了未使用的数据,甚至可能导致信息缺失问题。针对这些问题,研究人员提出多种不同的非子采样方法。需要注意的时,某一方法是无法解决所有问题的,因此在不同情况下要根据具体需求选择恰当的解决方案。

本文将对一些相关技术进行描述和总结。由于 Riiid! Answer Correctness Prediction 数据集由10列,超1亿行的数据组成,在Kaggle Notebook中使用pd.read_csv方法读取会导致内存不足,因此本文将该数据集做为典型示例。

不同安装包读取数据的方式有所不同,Notebook中可用方法包括(默认为Pandas,按字母表排序):

除了从csv文件读取数据外,还可以将数据集转换为占有更少磁盘空间、更少内存、读取速度快的其他格式。Notebook可处理的文件类型包括(默认csv,按字母表排序):

请注意,在实际操作中不单单是读取数据这么简单,还要同时考虑数据的下游任务和应用流程,综合衡量以确定读取方法。本文对此不做过多介绍,读者可自行查阅相关资料。

同时,你还会发现,对于不同数据集或不同环境,最有效的方法往往是不同的,也就是所,没有哪一种方法就是万能的。

后续会陆续添加新的数据读取方法。

方法

我们首先使用Notebook默认的pandas方法,如前文所述,这样的读取因内存不足失败。

import pandas as pdimport dask.dataframe as dd# confirming the default pandas doesn't work (running thebelow code should result in a memory error)#> 数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

是最常用的数据集读取方法,也是Kaggle的默认方法。Pandas功能丰富、使用灵活,可以很好的读取和处理数据。

使用pandas读取大型数据集的挑战之一是其保守性,同时推断数据集列的数据类型会导致pandas>

帮助文档:

%%Timedtypes = {"row_id": "int64","timestamp": "int64","user_id": "int32","content_id": "int16","content_type_id": "boolean","task_container_id": "int16","user_answer": "int8","answered_correctly": "int8","prior_question_ELApsed_time": "float32","prior_question_had_explanation": "boolean"}data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes)print("Train size:",> Train size: (101230332, 10)CPU times: user 8min 11s, sys: 10.8 s, total: 8min 22sWall time: 8min 22s
data.head()

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

Dask介绍

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

Dask提供并行处理框架对pandas工作流进行扩展,其与Spark具有诸多相似之处。

帮助文档:

%%timedtypes = {"row_id": "int64","timestamp": "int64","user_id": "int32","content_id": "int16","content_type_id": "boolean","task_container_id": "int16","user_answer": "int8","answered_correctly": "int8","prior_question_elapsed_time": "float32","prior_question_had_explanation": "boolean"}data = dd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes).compute()print("Train size:",> Train size: (101230332, 10)CPU times: user 9min 24s, sys: 28.8 s, total: 9min 52s

Wall time: 7min 41s

data.head()

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

Datatable介绍

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

受R语言data.table的启发,python中提出,该包可快速读取大型数据集,一般要比pandas快得多。值得注意的是,该包专门用于处理表格数据集,能够快速读取大规模的表格数据集。

帮助文档:

#> %%timedata = dt.fread("../input/riiid-test-answer-prediction/train.csv")print("Train size:",> 数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

Rapids介绍

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

提供了在GPU上处理数据的方法。通过将机器学习模型转移到GPU,Rapids可以在一个或多个GPU上构建端到端的数据解决方案。

帮助文档:

# rapids installation (make sure to turn on GPU)import sys!cp ../input/rapids/rapids.0.15.0 /opt/conda/envs/rapids.tar.gz!cd /opt/conda/envs/ && tar -xzvf rapids.tar.gz > /dev/nullsys.path = ["/opt/conda/envs/rapids/lib/python3.7/site-packages"] + sys.pathsys.path = ["/opt/conda/envs/rapids/lib/python3.7"] + sys.pathsys.path = ["/opt/conda/envs/rapids/lib"] + sys.pathimport cudf
%%timedata = cudf.read_csv("../input/riiid-test-answer-prediction/train.csv")print("Train size:",> Train size: (101230332, 10)CPU times: user 4.58 s, sys: 3.31 s, total: 7.89 s

Wall time: 30.7 s

data.head()

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

文件格式

通常,我们会将数据集存储为容易读取、读取速度快或存储容量较小的格式。数据集存储有各种不同的格式,但不是每一种都可以被处理,因此接下来,我们将介绍如何将这些数据集转换为不同的格式。

# target="_blank">此处获取,不包括竞赛组提供的原始csv数据。

csv格式

大多数Kaggle数据集都提供了csv格式文件。该格式几乎成为数据集的标准格式,而且所有方法都支持从csv读取数据。

更多相关信息见:

%%timedtypes = {"row_id": "int64","timestamp": "int64","user_id": "int32","content_id": "int16","content_type_id": "boolean","task_container_id": "int16","user_answer": "int8","answered_correctly": "int8","prior_question_elapsed_time": "float32","prior_question_had_explanation": "boolean"}data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes)print("Train size:",> Train size: (101230332, 10)CPU times: user 8min 36s, sys: 11.3 s, total: 8min 48sWall time: 8min 49s

feather格式

以feature(二进制)格式存储数据对于pandas极其友好,该格式提供了更快的读取速度。

了解更多信息:

%%timedata = pd.read_feather("../input/riiid-train-data-multiple-formats/riiid_train.feather")print("Train size:",> Train size: (101230332, 10)CPU times: user 2.59 s, sys: 8.91 s, total: 11.5 sWall time: 5.19 s

hdf5格式

HDF5是用于存储、管理和处理大规模数据和复杂数据的高性能数据管理组件。

了解更多信息:

%%timedata = pd.read_hdf("../input/riiid-train-data-multiple-formats/riiid_train.h5", "riiid_train")print("Train size:",> Train size: (101230332, 10)CPU times: user 8.16 s, sys: 10.7 s, total: 18.9 sWall time: 19.8 s

jay格式

Datatable支持.jay(二进制)格式,其在读取jay格式数据时速度快得超乎想象。从下面的示例可以看到,该方法读取整个riiid数据集用时甚至不到1秒!

了解更多信息:

%%timedata = dt.fread("../input/riiid-train-data-multiple-formats/riiid_train.jay")print("Train size:",> Train size: (101230332, 10)CPU times: user 4.88 ms, sys: 7.35 ms, total: 12.2 msWall time: 38 ms

parquet格式

在Hadoop生态系统中,parquet是tabular的主要文件格式,同时还支持Spark。经过近年的发展,该数据格式更加成熟,高效易用,pandas目前也支持了该数据格式。

%%timedata = pd.read_parquet("../input/riiid-train-data-multiple-formats/riiid_train.parquet")print("Train size:",> Train size: (101230332, 10)CPU times: user 29.9 s, sys: 20.5 s, total: 50.4 sWall time: 27.3 s

pickle格式

对象可以以pickle格式存储,pandas内置支持pickle对象的读取和写入。

了解更多信息:

%%timedata = pd.read_pickle("../input/riiid-train-data-multiple-formats/riiid_train.pkl.gzip")print("Train size:",> Train size: (101230332, 10)CPU times: user 5.65 s, sys: 7.08 s, total: 12.7 sWall time: 15 s

不同方法各有千秋

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

每种方法都有自己的优缺点,例如:

因此,希望读者掌握不同的方法,并根据实际需求选择最恰当的方法。我始终相信,研究不是技术驱动的,技术方法只是手段,要有好主意、新想法、改进技术才能推动数据科学的研究与发展。

在经过大量研究后,我确信不同数据集具有不同的适用方法,因此要多尝试,千万不要试图一招半式闯江湖。

在不断更新的开源软件包和活跃的社区支持下,数据科学必将持续蓬勃发展。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与 译站 一起,学习新知,分享成长。

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程

版权文章,未经授权禁止转载。详情见 转载须知 。

数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程


本文地址: https://www.gpxz.com/article/9cb2757b3934de4a061a.html
全局中部横幅
全局中部横幅
理想汽车

理想汽车致力于为家庭打造更安全、更便捷、更舒适的智能电动车,产品包括理想L9(全尺寸六座SUV)、理想L8(中大型六座SUV)、理想L7(中大型五座SUV)。自研增程电动系统、魔毯空悬、智能驾驶、智能空间。

凯氏定氮仪

山东恒美电子科技有限公司致力于凯氏定氮仪的研发生产,生产的全自动闪点仪稳定性好,电位滴定仪价格优惠,开口闪点测定仪厂家直销,全自动凯氏定氮仪操作简单快速,深受客户信赖,咨询电话19153685881

合肥瑶海同缮皮肤病专科门诊部

合肥同缮皮肤病专科门诊部是由卫生部门批准的安徽省较早从事皮肤病专科的诊疗机构,主要以中医中药为特色开展白癜风、银屑病(牛皮癣)、鱼鳞病、皮炎、湿疹、荨麻疹、痤疮、黄褐斑、疣、甲癣(灰指甲)、手足癣、体股癣、手足皲裂、脱发等各类皮肤病

北京

安居搜房为您提供全国各地最新最全面的新房、二手房楼盘信息以及各地区2018年房价走势图,及时了解各地楼市实时新闻快讯、房地产资讯、政策法规、购房百科、旅游攻略等最新消息,无论是选房还是看房,所有问题答案均在安居搜房房地产信息网!

蚂蚁下载网

蚂蚁下载网专注于手游App及应用软件下载和攻略分享,覆盖各类热门应用,提供便捷的下载渠道。我们还汇聚了最实用的游戏攻略,助您轻松突破游戏各种难关,享受游戏的乐趣发现更多精彩!

全球静脉识别及可信身份认证解决方案服务商

上海芯灵科技有限公司成立于2019年,总部位于上海临港松江科技城,是全球静脉识别及可信身份认证解决方案优秀提供商。主要提供指静脉识别模块、指静脉识别仪、指静脉智能柜等指静脉识别全栈式产品及服务。

安徽鑫登峰机电设备科技有限公司

安徽鑫登峰机电设备科技有限公司以优良的品质和优良的服务赢得广大客户的信赖和大力支持,业绩节节上升,不断壮大发展,资金实力雄厚,设备齐全。本公司拥有先进的三轴数控电脑植毛机、四轴数控电脑植毛机和五轴数控电脑植毛机及钻孔机、马钉机,专业生产、加工各类钢丝轮、毛刷轮、毛刷辊、条刷、板刷、海绵辊、针辊、皮带刷、管道刷、圆盘刷、弹簧刷(内绕.边绕.侧绕)等,产品品质配备高品质的检验设备,经验丰富的技师,鑫登峰同时还具有开模、注塑,植毛,包装等系列服务,所生产的产品获得众厂商的认可信赖。

智能道闸

浙江兆磊电子设备有限公司是一家专业研发、生产和销售智能门禁系统及LED显示屏的企业,主要产品包括指纹门禁、可视门禁、消费系统、道闸系统、金属安检门及巡更系统等系列产品,我们始终致力于为客户提供经济实用的全套设备解决方案,深受用户的一致好评。

淄博天凯耐火保温材料有限公司,保温抹面料,浇注料,耐火砖,耐火材料,硅酸铝纤维毯,保温隔热涂料

淄博天凯耐火保温材料有限公司主要生产保温抹面料,浇注料,耐火砖,耐火材料,硅酸铝纤维毯,保温隔热涂料等产品,在浇注料等各种异型耐火保温砖生产方面拥有多年的经验和技术。

折幕终结者

懒图(深圳)数字动漫技术研发中心


全局底部横幅