如何在Python中快速加载大型数据集?

3
我从事数据挖掘研究,通常需要使用Python脚本从SQLite数据库、CSV文件、pickle文件等加载大型数据集。在开发过程中,我经常需要修改脚本,但是每次等待数据加载需要20至30秒。
有时,加载数据流(例如来自SQLite数据库)可以正常工作,但并非所有情况都适用 - 如果我经常需要返回到数据集,则宁愿支付加载数据的前期时间成本。
我目前最好的解决方案是对数据进行子抽样,直到我满意为止。是否有更好的解决方案/设计实践?
我的“理想”解决方案将 cleverly 利用Python调试器(pdb),以便数据保留在内存中,我可以编辑脚本,然后从给定点恢复。

你能使用RAM驱动器(并将数据库文件复制到其中)吗?或者数据量太大而无法实现? - nvlass
3个回答

3

一种做法是将加载和操作脚本分别存储在文件X和Y中,然后让X.py读取。

import Y
data = Y.load()
.... your code ....

当你编写 X.py 代码时,可以将此部分从文件中省略,并在交互式 shell 中手动运行它。然后,您可以修改 X.py 并在 shell 中执行 import X 来测试您的代码。

谢谢!但是如果我的 X.py 文件中有 if __name__=='__main__': 代码,那么我该如何让 X.py 中的代码“看到”变量 data - wwwilliam
除非您调用其他函数并将数据传递给这些函数,否则它仍应该能够查看变量。 - dfb
谢谢。我按照您上面描述的做法,然后运行了 execfile('X.py'),它成功了。 - wwwilliam

0
编写一个脚本,执行选择、对象关系转换,然后将数据存储到本地文件中。 您的开发脚本将从反序列化数据开始并继续执行。
如果数据比物理内存小得多,则可以在两个进程之间共享文件的内存映射,并将pickled数据写入内存。

0
Jupyter笔记本允许您在一个单元格中将大型数据集加载到内存驻留的数据结构中,例如Pandas dataframe。然后,您可以在随后的单元格中对该数据结构进行操作,而无需重新加载数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接