使用和不使用生成器对庞大但有组织的文本数据进行预处理的方法

数据挖掘 Python
2021-10-14 23:57:44

我有一个巨大的文本文件,因此我正在逐行阅读它,应用一些基本的清理,并将 X 和 Y 分别写入 2 个不同的 csv 文件。此外,我正在为每个 csv 准备 3 个目录 - 训练、验证和测试,并将每一行作为单独的 csv 写入适当的目录 - 这有助于fit_generator()方便地使用该方法,通过一次读取这些文件并训练模型。

担心的是,在训练之前,我已经对这些许多文件执行了预处理步骤,一次一个文件,这似乎不是一种实用的方法(它不会节省时间,因为操作不会'不被矢量化,除了磁盘上会有很多读/写,因为存储每个处理过的文件也是不可避免的),还有其他方法来处理这种情况吗?最佳实践是什么?自定义生成器函数是唯一的方法吗?感谢任何帮助。

更新:另外,如果我处理的数据集是一个 coo 矩阵怎么办?除了在写作之前将其转换为密集之外,还有其他可行的方法吗?此外,我关心的既不是最佳资源利用,也不是时间效率,更多的是处理这种情况的不同方法,一个例子可能会有所帮助。

3个回答
  • 你能不能把数据类型减少,例如int32到int16,但是你要小心,你必须确保你不会因为减少内存而丢失重要的信息。
  • 迭代地读取 CSV 并将行转储到 SQLite 表中。处理数据库比处理 CSV 文件要快。
  • 在 Python 中使用该库进行并行计算,例如 Dask 或 Pandarallel。
  • 尝试使用 PySpark 及其对海量数据的优化(并行化、批量读取等)
  • 逐步进行预处理,并将每个步骤的结果保存在文件/表中。
  • 在一个 DataFrame 中进行预处理,最后只需将其写入文件中,只需将其截断以获取 X、Y 和 X_test 集。

一种选择是迁移到云计算服务并租用一台更大、更快且不受内存限制的计算机。