跳转到主要内容

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

项目描述

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

安装

samplepip一起分发。一旦您安装了pip,只需运行

> pip install sample-cli

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

使用方法

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

简单示例

要从文件big_data.csv中采样1000个样本,按以下方式运行sample

> sample -n 1000 big_data.csv

这将在终端打印出文件中的1000行随机数据。

文件重定向

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

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

标题行

CSV文件通常具有带有列名的标题行。您可以通过传递-r标志到sample来保留标题行

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

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

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

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

随机种子

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

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

抽样算法

算法比较

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

水库抽样

近似

两次遍历

标志

--res

--app

--tp

与stdin兼容

空间复杂度

O(ss * rs)

O(1)

O(ss)

固定样本大小

兼容

不兼容

兼容

分数样本大小

不兼容

兼容

兼容

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

水库抽样

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

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

如果使用水库抽样,样本大小必须是固定的,而不是分数。

示例

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

近似抽样

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

示例

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

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

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

两次遍历抽样

两次遍历抽样允许两次遍历,第一次是计算记录数(即,总体大小),第二次是输出样本中的记录。因此,它不兼容stdin作为输入。

由于两次遍历抽样知道总体大小,它将接受分数或固定数量的元素作为样本大小。

示例

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

两次遍历抽样使用的内存与样本中的元素数量成比例。

项目详情


下载文件

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

源代码分发

sample-cli-0.0.1.tar.gz (5.1 kB 查看哈希值)

上传于

支持者