python数据挖掘常用的几种大数据存储格式
来源:互联网 发布:数据库查询学号去重复 编辑:程序博客网 时间:2024/05/02 00:36
一直想找个机会好好学习下这块的知识,但是毕竟实践出真知,下面的就按照我自己使用过的一点点补充吧^^
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)
- python数据挖掘常用的几种大数据存储格式
- python数据挖掘常用包
- Python 数据挖掘 常用库
- Python 文本挖掘:数据存储和读取
- 常用的数据挖掘网址
- 数据挖掘常用的数据源
- python在数据挖掘领域常用工具包
- 基于python的数据挖掘
- python的数据挖掘--YongGG
- Hive的数据存储格式
- 常用数据挖掘算法
- 数据挖掘常用算法
- 常用数据挖掘算法
- 常用数据挖掘算法
- 数据挖掘常用算法
- 数据挖掘常用算法
- 数据挖掘常用算法
- 数据挖掘常用方法
- Linux驱动学习-platform驱动模型
- Android APP与AMS交互
- JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
- Android Studio提交代码至SVN
- 合并两个有序链表
- python数据挖掘常用的几种大数据存储格式
- MySQL_主从_主主_复制
- (58)String类:替换、切割、获取子串、转换(大小写、去除空格、字符大小比较)
- Android自定义控件——创建复合控件
- conda镜像
- TCP连接
- python和Java实现斐波那契Fibonacci数列
- 打鱼还是晒网
- Ubuntu16.04安装cuda及cudnn