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的默认方法。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
|
Dask介绍
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()
|
Datatable介绍
受R语言data.table的启发,Python中提出,该包可快速读取大型数据集,一般要比pandas快得多。值得注意的是,该包专门用于处理表格数据集,能够快速读取大规模的表格数据集。
帮助文档:
#>
|
%%timedata = dt.fread("../input/riiid-test-answer-prediction/train.csv")print("Train size:",>
Rapids介绍
提供了在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()
|
文件格式
通常,我们会将数据集存储为容易读取、读取速度快或存储容量较小的格式。数据集存储有各种不同的格式,但不是每一种都可以被处理,因此接下来,我们将介绍如何将这些数据集转换为不同的格式。
# 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
|
不同方法各有千秋
每种方法都有自己的优缺点,例如:
因此,希望读者掌握不同的方法,并根据实际需求选择最恰当的方法。我始终相信,研究不是技术驱动的,技术方法只是手段,要有好主意、新想法、改进技术才能推动数据科学的研究与发展。
在经过大量研究后,我确信不同数据集具有不同的适用方法,因此要多尝试,千万不要试图一招半式闯江湖。
在不断更新的开源软件包和活跃的社区支持下,数据科学必将持续蓬勃发展。
AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。
如果,你也是位热爱分享的AI爱好者。欢迎与
译站
一起,学习新知,分享成长。
版权文章,未经授权禁止转载。详情见
转载须知
。
|
|
|