使用Python处理大量数据

我尝试处理大量数据(几GB),但我的个人电脑无法在合理的时间内完成任务,所以我想知道我有哪些选择?我之前使用Python的csv.reader,但即使读取20万行也非常慢。之后我将数据迁移到sqlite数据库中,查询速度稍微快了一些,且内存使用减少,但速度仍然是一个主要问题。

那么,再次问一下,我有什么方法可以处理这些数据?我在考虑使用亚马逊的竞价实例,这似乎适合这种用途,但可能还有其他解决方案值得探索。

假设竞价实例是一个不错的选择,并且考虑到我之前从未使用过它们,我想问一下我可以期待什么?有没有人有使用它们处理这类事情的经验?如果有的话,你的工作流程是什么?我以为我能找到一些详细介绍科学计算、图像处理等工作流程的博客文章,但什么也没找到,所以如果你能解释一下这方面的情况或提供一些链接,我会很感激的。

提前感谢。


回答:

我建议你尝试使用numpy来处理你的大型数据集。Numpy数组相比csv.reader应该会使用更少的内存,并且使用向量化的numpy函数计算速度会快得多。

然而,读取文件时可能会遇到内存问题。numpy.loadtxtnumpy.genfromtxt在读取文件时也会消耗大量内存。如果这是个问题,可以参考这里对一些(全新的)替代解析引擎的比较。根据这篇文章,新的pandas(一个基于numpy构建的库)解析器似乎是一个选择。

正如评论中提到的,我还建议在你读取文件后将数据存储为二进制格式,如HDF5。从我的经验来看,从HDF5文件加载数据非常快(我想知道与你的sqlite相比速度如何)。我知道的最简单的方法是使用pandas将你的数组保存为HDF5

import pandas as pddata = pd.read_csv(filename, options...)store = pd.HDFStore('data.h5')store['mydata'] = datastore.close()

加载你的数据就变得非常简单

import pandas as pdstore = pd.HDFStore('data.h5')data = store['mydata']store.close() 

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注