python: 大规模数据集的读存技巧
大规模数据集的读存技巧
养生的控制人
浙江大学 控制科学与工程博士在读
文章来源:https://www.kaggle.com/rohanrao/tutorial-on-reading-large-datasets
本文以Kaggle上最近的Riiid竞赛为例,介绍几种大数据集的读取技巧,因为在大数据面前,常规的pd.read_csv 很容易就会爆内存了。
不同的库有不同的读取方式,这里主要介绍以下几种:
pandas
Dask
Datatable
Rapids
除了能从csv文件中读取数据,还有一种常见的作法是将数据集转换成另外的格式,使得数据集占用硬盘更少,读得更快,这里主要考虑以下数据格式
csv
feather
hdf5
jay
parquet
pickle
不同场景适应的方法可能不一样,没有哪个方法一定是最好的,大家按需选择。如果懒得看想直接看结论的直接看最后的意见即可。
库
Pandas
import pandas as pd
%%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:", data.shape)
Train size: (101230332, 10)
CPU times: user 8min 11s, sys: 10.8 s, total: 8min 22s
Wall time: 8min 22s
Dask
import dask.dataframe as dd
%%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:", data.shape)
Train size: (101230332, 10)
CPU times: user 9min 24s, sys: 28.8 s, total: 9min 52s
Wall time: 7min 41s
Datatable
import datatable as dt
%%timedata = dt.fread("../input/riiid-test-answer-prediction/train.csv")print("Train size:", data.shape)Train size: (101230332, 10)CPU times: user 52.5 s, sys: 18.4 s, total: 1min 10sWall time: 20.5 s
Rapids
import cudf
%%timedata = cudf.read_csv("../input/riiid-test-answer-prediction/train.csv")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 4.58 s, sys: 3.31 s, total: 7.89 s
Wall time: 30.7 s
文件格式
首先介绍一下如何将数据存为不同格式
用datatable读取csv并装成pandas
reading data from csv using datatable and converting to pandas
data = dt.fread("../input/riiid-test-answer-prediction/train.csv").to_pandas()
将数据写为csv格式
data.to_csv("riiid_train.csv", index=False)
将数据写为hdf5
data.to_hdf("riiid_train.h5", "riiid_train")
将数据写为feather
data.to_feather("riiid_train.feather")
将数据写为parquet
data.to_parquet("riiid_train.parquet")
将数据写为pickle
data.to_pickle("riiid_train.pkl.gzip")
将数据写为jay
dt.Frame(data).to_jay("riiid_train.jay")
接下来看看不同数据格式的读取时间差异
csv
%%time
dtypes = {"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:", data.shape)
Train size: (101230332, 10)
CPU times: user 8min 36s, sys: 11.3 s, total: 8min 48s
Wall time: 8min 49s
feather
%%timedata = pd.read_feather("../input/riiid-train-data-multiple-formats/riiid_train.feather")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 2.59 s, sys: 8.91 s, total: 11.5 s
Wall time: 5.19 s
hdf5
%%timedata = pd.read_hdf("../input/riiid-train-data-multiple-formats/riiid_train.h5", "riiid_train")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 8.16 s, sys: 10.7 s, total: 18.9 s
Wall time: 19.8 s
jay
%%timedata = dt.fread("../input/riiid-train-data-multiple-formats/riiid_train.jay")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 4.88 ms, sys: 7.35 ms, total: 12.2 ms
Wall time: 38 ms
parquet
%%timedata = pd.read_parquet("../input/riiid-train-data-multiple-formats/riiid_train.parquet")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 29.9 s, sys: 20.5 s, total: 50.4 s
Wall time: 27.3 s
pickle
%%timedata = pd.read_pickle("../input/riiid-train-data-multiple-formats/riiid_train.pkl.gzip")print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 5.65 s, sys: 7.08 s, total: 12.7 s
Wall time: 15 s
个人建议:如果遇到的数据表规模比较大,读取的时候可以采用Datatable,数据的存储可以使用jay或者feather。
python: 大规模数据集的读存技巧相关推荐
- 大规模数据集的读存技巧
作者:养生的控制人 链接:https://zhuanlan.zhihu.com/p/336614195 本文转载自知乎,作者已授权,未经许可请勿二次转载 本文以Kaggle上最近的Riiid竞赛为例, ...
- python怎么导入数据集keras_keras使用Sequence类调用大规模数据集进行训练的实现
使用Keras如果要使用大规模数据集对网络进行训练,就没办法先加载进内存再从内存直接传到显存了,除了使用Sequence类以外,还可以使用迭代器去生成数据,但迭代器无法在fit_generation里 ...
- python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧
原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...
- Python 内编写类的各种技巧和方法
简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...
- 快速提高Python数据分析速度的八个技巧
今天整理了几个在使用python进行数据分析的常用小技巧.命令.记得搭配Pandas+Jupyter Notebook使用哦. 01 使用Pandas Profiling预览数据 这个神器我们在之前 ...
- 下列不是python对文件的读操作方法是-大工20春《数据挖掘》在线作业1【参考答案】...
可做奥鹏全部院校作业论文!答案请添加qq:599792222 或 微信:1095258436 大工20春<数据挖掘>在线作业1 试卷总分:100 得分:100 一.单选题 (共 10 道 ...
- 机器学习13大规模数据集
大型数据集的学习(Learning With Large Datasets) 如果我们有一个低方差的模型, 增加数据集的规模可以帮助你获得更好的结果. 我们应该怎样应对一个有 100 万条记录的训练集 ...
- 使用python对数据集进行批处理
[机器学习]使用python对数据集进行批处理 只输入一张图像数据过程和一次性处理100张图像数据过程中,数组形状变换如下图所示: 这些数组形状可以在代码中输出出来: def get_data():( ...
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (14) - 读存操作写存操作
Load and Store Operation Overview 本节讲述读存与写存操作. Loads 当指令从回写式类型的存储器中的某个地址读取数据时,处理器会从高速缓存和存储器中查找数据.下表描 ...
- python语言中文怎么读-python中文读什么
python中文叫什么 python中文叫什么? python中文叫蟒蛇,通常情况下,Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随 ...
最新文章
- JVM内存泄漏检测与处理
- 【Java】反射( reflection)机制 详解
- shell脚本获取绝对路径
- nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
- linux系统下RocketMQ的集群搭建
- python3中的rang()函数
- ZJOI 2014 星系调查(推导)
- 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(2)
- 在OpenStack虚拟机实例中创建swap分区的一种方法
- 【原创】C++关于创建和使用静态链接库
- 关于Http请求后返回json乱码的问题
- 用友u8不显示服务器名,用友u8提示对数据库服务器名
- android壁纸服务,android壁纸服务流程浅析
- 目标检测:Object Detection in 20 Years: A Survey
- PCL_点云数据处理方法概述
- 算法篇 干货!!!字母重排 打卡第七天
- 正多边形和多面体的对称群
- 谈谈关于网瘾的看法和建议
- 【OpenCV】 - 图像分割之分水岭算法,watershed()函数的输出,对marker和image的改变
- 上海创蓝253董事长_从世界记忆大师到互联网百强企业CEO:创蓝253钛牛哥的传奇之路...