我有一个完全由 1 个文件组成的 20.2 GB 数据集。需要有关如何打开文件的帮助

数据挖掘 数据集 数据分析
2022-02-18 09:25:16

每当我处理具有以前从未遇到过的奇怪扩展的数据集时,我通常会用记事本打开它们,以查看数据的外观,然后再使用 pandas 分析它们。但是这个数据集(link),它的扩展名为 .tr (我想代表跟踪文件),由于其巨大的大小(这就是错误消息所说的),记事本不支持。

我应该使用哪个软件来打开跟踪文件?还有一种安全的方法可以将文件分割成更小的部分,因为我通常将我的数据上传到 kaggle 并在他们的内核上工作。

我不确定这是否是正确的发布位置,如果不是,请在删除帖子之前将我指向正确的位置。

2个回答

此文件应该是一个纯文本文件,其中n行和m列由制表符分隔。是另一个小得多的文件,他们提供下载并声称它具有相同的数据格式。

由于文件太大而无法放入内存,您可以使用数据格式 HDF5。这将允许您加载数据集的切片,而无需将整个文件加载到内存中。但是,首先,您需要将文件转换为 .h5 文件。这可以通过h5py来完成。

我现在把下面的代码放在一起。它逐行读取文本文件并将每一行写入 .h5 文件。它适用于他们提供下载的较小文件。但是,我还没有在更大的文件上测试它。如果你试一试,请告诉我进展如何。

import h5py
import numpy as np

N_COLS = 3  # adjust to your number of columns

n_rows_dataset = 1000

file = h5py.File('/path/to/your/output.h5', 'w')
dataset = file.create_dataset(
    'my_dataset', 
    (n_rows_dataset, N_COLS), 
    chunks=(5, N_COLS), 
    maxshape=(None, N_COLS))

current_row = 0
# this does not load the whole file but creates an iterator instead
for line in open("/path/to/the/large/file"):  
    if current_row == n_rows_dataset-1:
        n_rows_dataset = n_rows_dataset + 1000
        dataset.resize((n_rows_dataset, N_COLS))
    dset[current_row] = np.fromstring(line, sep=" ", dtype=np.float64)
    current_row += 1


注意:您可以通过打印文件的第一行来找出数据集的列数:

i = 0
for line in open("/path/to/the/large/file"):
    print(line)
    i += 1
    if i >= 5:
        break

如果您只想通过基本的 GUI + 搜索以文本形式查看非常大的文件,我建议您使用glogg它就是为此目的而设计的。

在将大文件拆分成多个小文件时,您可以参考这些针对 WindowsUnix 命令的解决方案,并使用最适合您的方法。