降低数据大小的四大绝招。
↑↑↑关注后"星标"炼丹笔记
炼丹笔记干货
作者:Kaggle竞赛宝典摘自Chris Deotte的分享
降低数据大小的四大绝技
简介
在非常多的问题中,例如商品推荐数据存储(大量的用户和商品,还有购买金额等信息),金融数据存储(大量的标的,价格等),我们不可避免的都会碰到数据过大的问题,如果对这类数据进行处理显得直观重要,本文我们介绍碰到大数据时,我们采用的四种策略。
四大节省内存的方式
01
数据类型转换
通过数据转换往往可以帮助我们节省好几倍的内存,同时因为类型的转换,在一些数值计算中还可以起到加速运算的作用。我们以American Express竞赛为案例:
1. customer_ID从64 bytes降低为4bytes
长度为64的字符串,每行使用64个字节!
- 我们可以将此转换为仅使用4字节或8字节的int32或int64。典型的技巧如获取十六进制字符串的最后16个字母,然后将该base16数字转换为base10并另存为int64。
2. S_2将10 bytes降低为3 bytes
此列是带时间的日期。由长度为10的字符串提供,每行使用10个字节!
- 如果我们用pd.datetime进行转化,那么变为4个字节。
- 或者,我们可以将此列保存为三列,分别为year,month,day,每列为int8,并且每行仅使用3个字节。
3. 类别特征,从8 bytes降低为1 bytes
将一些最大值为8个值的类别列转化为int8的正数,这样就变成了1个byte,将原先8个bytes转化为了1个byte。
4. 数值特征,从8 bytes降低为2 bytes
对于一些将float64转化为float32而不损失信息的字段可以直接转化,还有很多字段可以直接从float64转化为float16,这样就可以转化为2个bytes。
02
选择存储文件形式
通过数值类型转化策略转化之后,我们需要将文件保存到磁盘。而这个时候有两个重要属性:
- 压缩比;
- 一些文件格式(如Feather、Parquet和Pickle)会压缩数据。NumPy中的np.savez()也会对数据进行压缩,一般压缩之后数据还会变小很多。
- 保存顺序;
- 一些文件格式(如CSV)逐行保存数据。一些文件格式(如Parquet)逐列保存数据。这将影响以后读取数据。如果将来我们想读取行的子集。也许行顺序更好更快。如果将来我们想读取列的子集,那么列顺序可能会更好更快。
03
多文件存储与否
这个对于数据大小影响不大,如果一次处理整个训练和测试数据集有困难,那么我们可以考虑分块处理,并将数据作为单独的文件保存到磁盘。如果可以一起存储处理,则直接单个文件即可。
04
噪音处理
有非常多的数据存在噪音,而这些噪音处理之后对于数据的训练预测有帮助而没什么害处,例如American Express中的一些数据本来是int型,后来加了噪音变成了float型,此处如果稍加处理则可以节省大量的内存。
小结
适用于所有数据存储问题。
参考文献
- How To Reduce Data Size
相关文章
- 数据透视表上线!如何在纯前端实现这个强大的数据分析功能?
- matlab如何导入txt数据画图形_matlab画复杂函数图像
- hive性能调优 读书笔记 - 调优多样性(改写sql、数据块大小、格式、分区、分桶)
- 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
- 第二种方式读取并显示HDFS中的内容详解大数据
- 深入Oracle:查看数据的实际大小(oracle查看数据大小)
- 库维护MySQL: 一周内的数据库保养指南(mysql一周内数据)
- Mysql查看数据库表中的大小:实现方法(mysql查看数据大小)
- 网络数据的大小端问题
- Oracle 表大小排序:管理海量数据(oracle表大小排序)
- 向MySQL插入数据的正确方法(insertmysql)
- Linux下数据块的优化与分配(linux数据块大小)
- 解析Redis数据库储存大小(redis数据大小)
- 优化Oracle数据库块大小提升性能(oracle数据块大小)
- MySQL的二进制数据存储之道(mysql二进制数据)
- 从头到尾,MySQL 数据拷贝的完整指南(mysql数据拷贝)
- Oracle如何判断数据大小(oracle判断大小)
- Linux互斥锁读写,如何实现数据的稳定性?(linux互斥锁读写)
- MySQL中int类型数据存储与大小限制(mysql中int型)
- 探索Redis数据库的容量大小(查看redis数据总量)
- 拥抱变化Oracle云数据库架构让数据变得更简单(oracle云数据库架构)
- 数据一致性解决Redis集群保证数据一致性的方法(redis集群怎么保证)
- 数据Redis实现Set数据随机取值(redis随机取set)
- Redis确保数据去重(redis 防止重复数据)
- Oracle提出实现企业数据运营升级的新策略(oracle claim)
- sql2005数据库转为sql2000数据库的方法(数据导出导入)