文章目录[隐藏]
今天我将继续和大家一起学习竞赛中的各种基础知识点,从基础库使用到具体的比赛案例。
今天将介绍的比赛中存储特征的几种方法,供大家学习和选择。
方法1:csv/txt
存储为csv、text或者json是最为简单的存储格式,阅读和解析起来非常方便。
如果使用Pandas则可以在存储的过程中设置压缩方法,对磁盘比较友好。
- 场景:通用
- 数据:表格、文本
- 文件大小:压缩后较少
- 读取速度:较慢
compression_opts = dict(method='zip',
archive_name='out.csv')
df.to_csv('out.zip', index=False,
compression=compression_opts)
方法2:hdf
HDF(Hierarchical Data File)是能满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。
HDF格式支持分层存储,可以将多个变量同时存在一个HDF文件中,同时在读取速度上也比较快。
- 场景:通用
- 数据:表格、文本
- 文件大小:较大
- 读取速度:较快
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]},
index=['a', 'b', 'c'])
df.to_hdf('data.h5', key='df', mode='w')
方法3:npy
如果将特征和数据处理为Numpy格式,则可以考虑存储为Numpy中的npy或npz格式。
- 场景:文件存储
- 数据:矩阵
- 文件大小:适中
- 读取速度:较快
1. npy文件:二进制格式
np.load()和np.save()是读写磁盘数组数据的两个重要函数。使用时数组会以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
import numpy as np
arr=np.arange(5)
np.save('test',arr) print(np.load('test.npy'))
- npz文件:压缩文件
使用np.savez()函数可以将多个数组保存到同一个文件中。读取.npz文件时使用np.load()函数,返回的是一个类似于字典的对象,因此可以通过数组名作为关键字对多个数组进行访问。
import numpy as np
a = np.arange(5)
b = np.arange(6)
c = np.arange(7)
np.savez('test', a, b, c_array=c) # c_array是数组c的命名 data = np.load('test.npz') print('arr_0 : ', data['arr_0']) print('arr_1 : ', data['arr_1']) print('c_array : ', data['c_array'])
方法4:memmap
NumPy实现了一个类似于ndarray的memmap对象,它允许将大文件分成小段进行读写,而不是一次性将整个数组读入内存。
如果需要存储的对象大于内存,则可以选择memmap进行存储。
- 场景:大文件存储
- 数据:矩阵
- 文件大小:较大、特别大
- 读取速度:适中
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
fpc[0,:] = 0
方法5:joblib
类似于pkl存储,joblib.dump可以将任意的Python对象持久化到一个文件中,并使用joblib.load进行读取。
- 场景:任意
- 数据:任意
- 文件大小:适中
- 读取速度:适中
from joblib import load, dump
X = [[0, 0], [1, 1]]
Y = [1, 0]
dump((X, Y), "data.pkl")
X, Y = load("data.pkl")