跳转到主要内容

用于从文本文件中采样行的命令行界面

项目描述

subsample 是一个从大型、换行符分隔的数据集中采样数据的命令行工具(通常是类似CSV的文件)。

安装

subsamplepip 一同分发。一旦您安装了 pip,只需运行

> pip install subsample

然后 subsample 将被安装到您的Python环境中。

用法

subsample 需要一个参数,即输入文件。如果输入文件是 -,则将从标准输入读取数据(在这种情况下,只能使用水库和近似算法)。

简单示例

要从 big_data.csv 文件中抽取1000个样本,按照以下方式运行 subsample

> subsample -n 1000 big_data.csv

这将打印出文件中的1000条随机行到终端。

文件重定向

通常我们希望将样本保存到另一个文件中。 subsample 并未内置文件输出;相反,它依赖于终端的输出重定向功能。要将样本保存到 big_data_sample.csv,运行以下命令

> subsample -n 1000 big_data.csv > big_data_sample.csv

从标准输入采样

要使用标准输入作为源,请使用 - 作为文件名,例如

> subsample -n 1000 < big_data.csv > big_data_sample.csv

请注意,只有水库抽样支持stdin,因为其他抽样算法需要可定位的输入流。

标题行

CSV文件通常具有包含列名的标题行。您可以通过传递 -r 标志给 subsample 来保留标题行

> subsample -n 1000 big_data.csv -r > big_data_sample.csv

很少,您可能需要从具有跨越多行的标题的文件中进行抽样。 -r 参数可以指定要保留作为标题的行数

> subsample -n 1000 -r 3 data_with_header.csv > sample_with_header.csv

请注意,如果 -r 参数直接位于输入文件名之前,它必须有一个参数,否则它将尝试将输入文件名解释为标题行数,从而失败。将 -r 参数放在输入文件名之后可以避免这种情况。

随机种子

subsample 的输出是随机的,依赖于计算机的随机状态。有时您可能希望以可重复的方式抽样。您可以通过使用 -s 标志将随机种子传递给 subsample 来实现这一点。

> subsample -s 45906345 data_file.csv > reproducable_sample.csv

抽样算法

算法比较

subsample 实现了三种抽样算法,每种算法都有其自身的优缺点。

蓄水池

近似

两遍扫描

标志

-res

-app

-tp

stdin-兼容性

空间复杂度

O(ss*rs)

O(1)

O(1)

固定样本大小

兼容

不兼容

兼容

分数样本大小

不兼容

兼容

兼容

样本顺序

随机

来源

来源

对于空间复杂度,ss 是样本中的记录数,而 rs 是记录的最大大小。

样本顺序是返回的记录的顺序。只有蓄水池抽样会以随机顺序给出结果;近似和两遍扫描以与源数据相同的顺序返回结果。

蓄水池抽样

蓄水池抽样(Random Sampling with a Reservoir (Vitter 85))是一种从未知大小的流中进行抽样的方法,其中样本大小是预先固定的。它是一个单遍算法,使用的空间与样本中的数据量成比例。

蓄水池抽样是 subsample 默认使用的算法。为了保持一致性,也可以使用 --reservoir 参数来调用。

在使用蓄水池抽样时,样本大小必须是固定的,而不是分数形式的。

示例

> subsample --reservoir -n 1000 big_data.csv > sample_data.csv

近似抽样

近似抽样简单地以样本比例给出的概率将每行包含在样本中。它是一个无状态的算法,空间要求最小。样本的大小平均为 fraction * population_size,但每次调用之间会有所不同。由于这个原因,近似抽样仅在样本大小不需要精确时才有用(因此得名)。

示例

> subsample --approximate -f 0.15 my_data.csv > my_sample.csv

等价地,通过将 -f 切换到 -p 来提供一个百分比而不是分数。

> subsample --approximate -p 15 my_data.csv > my_sample.csv

两遍扫描抽样

正如其名所示,两遍扫描抽样使用两遍:第一遍是统计记录数(即人口规模),第二遍是发出样本中的记录。因此,它不兼容作为输入的 stdin

示例

> subsample --two-pass -n 1000 my_data.csv > my_sample.csv

两遍扫描抽样也接受分数或百分比形式的样本大小。

> subsample --two-pass -p 15 my_data.csv > my_sample.csv

测试

包含了一个简单的 GNU Make 驱动的测试脚本。在安装后,从 subsample 的基本目录中运行 make test 以运行一些回归测试。

由于随机抽样的固有随机性,测试仅限于检查在随机种子未改变时输出是否相同。这主要用来寻找未来更改引入的新错误,并不表示代码本身是正确的(即样本确实是随机的)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

subsample-0.0.6.tar.gz (5.7 kB 查看哈希值)

上传时间 源代码

支持者