python数据挖掘常用的几种大数据存储格式
2017-07-14 16:20
375 查看
一直想找个机会好好学习下这块的知识,但是毕竟实践出真知,下面的就按照我自己使用过的一点点补充吧^^
虽然简单,但是pickle真的很好用,因为他可以保存训练了一半的模型,下次接着训练!厉害吧!
怎么用 dump and load:
基本接口:
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以’w’方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
我用的时候:
除此之外我还遇到了一个错误,pickle在load一个训练了一半的模型的时候报EOFError,查了一下发现原来是因为我写入的时候是’wb’写入,但读的时候是用的’r’,应该用’rb’,代表着二进制格式读写。最好这样写下:
pickle操作还有一些复杂一点的对象操作,感觉在数据挖掘中不太常用,我是没用过啦,就不细看了~
使用函数np.memmap并传入一个文件路径、数据类型、形状以及文件模式,即可创建一个新的memmap:
memmap(filename,dtype=uint8,mode=“r+”,offset=0,shape,order=‘C’)
其中,offset是文件中存储数据的起始位置;mode可以是c(不写入的修改)r+(可读写)w+(创建或是覆盖已有文件)。
我用的时候:
发现这个可以和csv读写结合在一起,起到边读边写的效果,操作就是用iterrows按行读取文件,然后每一行都flush存储。看了下内存几乎没有消耗,超级赞。
创建后是纯0的,对memmap切片将会返回磁盘上的数据的视图:
如果将数据赋值给这些视图:数据会先被缓存在内存中(就像是Python的文件对象),调用flush即可将其写入磁盘。
在使用的时候它和ndarray几乎没有区别。
有几个notes:
The memmap object can be used anywhere an ndarray is accepted. Given a memmap fp, isinstance(fp, numpy.ndarray) returns True.
Memory-mapped files cannot be larger than 2GB on 32-bit systems.
读的时候只要把mode改成mode=’r’就可以了,我用的时候:
X = np.memmap(X_fname, dtype=np.float32, mode=’r’, shape=X_shape)
pickle 存储对象
项目中常用pickle,不了解前以为是多么高大上的东西,了解之后发现并不神秘,用一句话概括就是持久化操作。之前做java那么久,还是第一次接触python的持久化操作,明显还是跟java的持久化机制差了一大截。虽然简单,但是pickle真的很好用,因为他可以保存训练了一半的模型,下次接着训练!厉害吧!
import Cpickle as pickle #python2 import pickle #python3
怎么用 dump and load:
基本接口:
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以’w’方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
>>> a1 = 'apple' >>> b1 = {1: 'One', 2: 'Two', 3: 'Three'} >>> c1 = ['fee', 'fie', 'foe', 'fum'] >>> f1 = file('temp.pkl', 'wb') >>> pickle.dump(a1, f1, True) >>> pickle.dump(b1, f1, True) >>> pickle.dump(c1, f1, True) >>> f1.close() >>> f2 = file('temp.pkl', 'rb') >>> a2 = pickle.load(f2) >>> a2 'apple' >>> b2 = pickle.load(f2) >>> b2 {1: 'One', 2: 'Two', 3: 'Three'} >>> c2 = pickle.load(f2) >>> c2 ['fee', 'fie', 'foe', 'fum'] >>> f2.close()
我用的时候:
pickle.dump(encoder, open('../../models/encoder.pkl', 'wb'))
除此之外我还遇到了一个错误,pickle在load一个训练了一半的模型的时候报EOFError,查了一下发现原来是因为我写入的时候是’wb’写入,但读的时候是用的’r’,应该用’rb’,代表着二进制格式读写。最好这样写下:
with open(model.model_history_fname,'rb') as f: # net.train_history_ = pickle.load(f) try: net.train_history_=pickle.load(f) except EOFError: net.train_history_ = None
pickle操作还有一些复杂一点的对象操作,感觉在数据挖掘中不太常用,我是没用过啦,就不细看了~
numpy.memmap内存映射方式
将大文件分成小段读写,而不是一次性读入整个文件,节约内存空间。后悔比赛的时候一次都没试过,后面总是溢出溢出,那时候只求用最快的方式投机取巧的解决,哎,丧失了最好的学习机会。使用函数np.memmap并传入一个文件路径、数据类型、形状以及文件模式,即可创建一个新的memmap:
memmap(filename,dtype=uint8,mode=“r+”,offset=0,shape,order=‘C’)
其中,offset是文件中存储数据的起始位置;mode可以是c(不写入的修改)r+(可读写)w+(创建或是覆盖已有文件)。
我用的时候:
X_fp = np.memmap(X_fname, dtype=np.float32, mode='w+', shape=X_shape)
发现这个可以和csv读写结合在一起,起到边读边写的效果,操作就是用iterrows按行读取文件,然后每一行都flush存储。看了下内存几乎没有消耗,超级赞。
创建后是纯0的,对memmap切片将会返回磁盘上的数据的视图:
section = mmap[:5]
如果将数据赋值给这些视图:数据会先被缓存在内存中(就像是Python的文件对象),调用flush即可将其写入磁盘。
section[:] = np.random.randn(5, 10000) mmap.flush() del mmap
在使用的时候它和ndarray几乎没有区别。
有几个notes:
The memmap object can be used anywhere an ndarray is accepted. Given a memmap fp, isinstance(fp, numpy.ndarray) returns True.
Memory-mapped files cannot be larger than 2GB on 32-bit systems.
读的时候只要把mode改成mode=’r’就可以了,我用的时候:
X = np.memmap(X_fname, dtype=np.float32, mode=’r’, shape=X_shape)
相关文章推荐
- Android上常用的几种本地数据存储方式:1、使用SharedPreferences存储数据
- Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识
- Content-Type的几种常用数据编码格式【原创】
- iOS 常用几种数据存储方式
- 几种不同存储形式下的数据挖掘问题(转载)
- 利用python进行数据分析之数据加载存储与文件格式
- 数据加载、存储与文件格式 利用Python进行数据分析 第6章
- Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识
- Python -- 数据加载、存储与文件格式
- iOS中几种常用的数据存储方式
- Python中数据加载、存储与文件格式
- Python数据分析与挖掘实战(开发流程及常用库安装)
- python数据分析之:数据加载,存储与文件格式
- Python中数据加载、存储与文件格式
- 使用python读取数据科学最常用的文件格式
- python相关的几种数据类型的存储读取方式
- Python中数据加载、存储与文件格式
- 利用Python进行数据分析--数据加载、存储与文件格式
- 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法