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

subsample的Python项目详细描述


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

从stdin

取样

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

> 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实现了三种采样算法,每种算法都有自己的优点 以及弱点。

ReservoirApproximateTwo-pass
flag^{tt21}$^{tt22}$^{tt23}$
^{tt24}$-compatibleyesyesno
space complexity^{tt25}$^{tt26}$^{tt26}$
fixed sample sizecompatiblenot compatiblecompatible
fractional sample sizenot compatiblecompatiblecompatible
sample orderrandomsourcesource

空间复杂度,^ {TT28 } $是样本中的记录数 {TT29 } $是记录的最大大小。

样本顺序是返回记录的顺序。仅储层取样 给出随机顺序的结果;近似和两遍返回结果 与源数据的顺序相同。

储层取样

储层取样(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到a-p

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

两次采样

顾名思义,双通采样使用两个pas塞斯:首先是数一数 记录的数量(即总体大小),第二个是发出记录 它们是样本的一部分。因此它与^{tt24}不兼容$ 作为输入。

示例:

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

两次抽样也接受样本量作为分数或百分比:

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

测试

包括一个简单的gnu make驱动测试脚本。运行make testfrom subsample的基本目录,安装后运行一些回归测试。

由于随机抽样固有的随机性,测试仅限于 当随机种子不变时检查输出是否相同。 这主要是为了发现未来变化带来的新bug,以及 并不意味着代码本身是正确的(从示例的意义上说 确实是随机的)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java 安卓碎片问题   java获取通过字符串删除的内容。replaceAll()   java中的三角形数   JavaSpringbean作用域:会话和全局会话   java为什么JavaBeans不序列化类型列表中的属性?   java无法使用Spring和Thymeleaf在视图上传输对象   Java中变量内部的变量   java在Eclipse上调整黄盒大小并保持其大小   java使用Jackson将名称-值对数组反序列化为对象   安卓 Java多变量长度参数   java JavaFX版本的“isDescendingFrom(组件a、组件b)”   java如何在春季发送多个PDF?   java以不同的格式为联系人分配相同的号码   如何从打包到自己的java库中访问资源的文件。罐子   java模块化反射公共闭包原理   java应用程序在使用进程时停止响应。等待()   java React setState不工作,出现错误