1. Python之pickle的用法(用于序列化和反序列化数据)
该pickle模块实现了二进制协议,用于对Python对象结构进行序列化和反序列化Pickling是将Python对象层次结构转换为字节流的过程,而 “ unpickling”是逆运算,将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构的过程。
序列化指的是将对象的状态信息转化为可以存储或传输的形式的过程。(简单理解即将数据存储到相应存储过程,如dict存储到json文件中)
常用的四个方法:
dump()、load()、dumps()、loads()
dump(): 将数据序列化到文件中
load(): 将序列化后的数据读出(反序列化)
dumps()和loads()与上述的区别:无需读入文件,实现str和数据类型的转化
import pickle
file = open(fileDir,'w+')#以二进制式打开
myData = [{"key": "value"},[1,2,3,4,5],'str',123]
pickle.dump(myData, file)
import pickle
file = open(fileDir, 'r+')
print(pickle.load(file)) #此处的fileDir是前面dump()的
#打印出来的是[{"key": "value"},[1,2,3,4,5],'str',123]
#type:list
2. 机器学习中的应用
训练写出
csv_data = pd.read_csv(
r'mapping.csv',
header=None)
Y = list(map(lambda x: float(x), csv_data.iloc[1:, 0]))
X = list(map(lambda x: float(x), csv_data.iloc[0, 1:]))
Z = pd.DataFrame(csv_data.iloc[1:, 1:], dtype=float)
model = interp2d(X, Y, Z) # 其它模型用法类似
# print(model(10, 500)[0]) # 44.375
s = pickle.dumps(model)
with open(r'interp2d.model', 'wb+') as f: # 注意此处mode是'wb+',表示二进制写入
f.write(s)
加载预测
import pickle
f = open(r'interp2d.model', 'rb') # 注意此处model是rb
s = f.read()
model = pickle.loads(s)
# 之后就可以使用model了
print(model(10, 500)[0]) # 44.375