samplitude(s8e)是一个统计分布命令行工具
samplitude的Python项目详细描述
samplitude
随机变量的cli生成和绘制:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.0
samplitude这个词是sample和amplitude的组合词。这个 项目也是以一个方向开始的,因此应该发音为sampl-tude
samplitude
是一个链,从生成器开始,后跟零或更多
过滤器,然后是使用者。大多数发电机是无限的
范围
和列表
以及可能的stdin
除外)。一些过滤器可以
将无限生成器转换为有限生成器(例如sample
和gobble
),
一些滤波器可以将有限的生成器转换为无限的生成器,例如
选择
消费者是必须刷新输入的过滤器;列表
,cli
,
tojson
,unique
和绘图工具,hist
,scatter
和line
是
消费者的例子。列表
消费者是Jinja2内置的
Jinja2的消费者是sum
,min
,以及max
:
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
为了简单起见,s8e是samplitude的别名。
发电机
除了标准的范围
函数外,我们还支持无限生成器
指数(lambd)
:lambd
是1.0除以期望的平均值。均匀(a,b)
:获取范围[a,b)
或[a,b]
内的随机数 取决于四舍五入。gauss(mu,sigma)
:mu
是平均值,sigma
是标准偏差。正常(mu,sigma)
:如上所述对数正态分布(mu,sigma)
:如上所述三角形(低,高)
:以给定的低和 上限,并具有介于两者之间的给定模式值。beta(alpha,beta)
:参数的条件是alpha>;0
和beta>;0
。返回的值介于0和1之间。伽马(α,β)
:如上所述weibull(alpha,beta)
:alpha
是比例参数,beta
是形状 参数。pareto(alpha)
:pareto分布。alpha
是形状参数。vonmises(mu,kappa)
:mu
是平均角度,以0之间的弧度表示2*pi
,kappa
是浓度参数,必须大于 大于或等于零。如果kappa等于零,这个分布会减少 在0到2*pi范围内的均匀随机角度
如果您已经安装了scipy.stats
包,则
PERT(低、峰值、高)
支持分发。
我们有一个特殊的无限生成器(筛选器),它在有限生成器上工作:
选择
,
其行为解释如下。
对于来自文件的输入,请对指定的环境变量使用words
。
字典
或管道连接
stdin()
从stdin
如果该文件是csv文件,则有一个csv
生成器读取csv文件
熊猫和输出第一列(如果没有其他指定)。指定
具有整数索引或列名的列:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
对于其他文件,我们有文件
生成器:
>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica
最后,我们有com二进制
和排列
继承自
他们的工作和行为正是这样。
>>> s8e "'ABC' | permutations | cli"
然而,它的输出是相当非unixy的,抽象通过:
>>> s8e "'HT' | permutations | cli"('H', 'T')('T', 'H')
因此,为了获得更好的输出,我们可以使用元素连接
>>> s8e "'HT' | permutations | elt_join | cli"
H T
T H
它还使用分隔符作为参数:
>>> s8e "'HT' | permutations | elt_join(';') | cli" H;T T;H
jinja的map
函数已经支持此功能(请注意join
周围的字符串):
>>> s8e "'HT' | permutations | map('join', ';') | cli" H;T T;H
因此,我们可以计算一组大小为10的置换数:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.00
乘积
生成器接受两个生成器并计算
这些。此外,
关于无穷大的警告
所有生成器都是(潜在的)无限生成器,必须使用
食用前的样品(n)
!
使用和安装
使用安装
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.01
或是为了止血,
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.02
示例
这是纯正的Jinja2:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.03
但是,为了获得更为单一的输出,我们使用cli
而不是list
:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.04
为了限制输出,我们使用sample(n)
:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.05
对于已经是有限的范围
生成器来说,这不是很有帮助,但是
对一个无穷大的生成器更有用。上面的例子可能是
最好写成
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.06
然而,更有趣的是无限随机生成器,例如
统一
生成器:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.07
如果不需要那么多数字,我们可以对输出进行舍入(注意舍入
也是一个生成器,可以放在
示例的任一侧:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.08
选择和修改
示例
行为相当于头
程序,或来自语言
比如哈斯克尔。支持头
别名:
$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0 0.309 0.588 0.809 0.951 1.09
drop
也可用:
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9510
为了移位和缩放分布,我们可以使用移位
和
比例
过滤器。要获得从15开始的泊松点过程,我们可以运行
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9511
shift
和scale
都在生成器上工作,因此要添加sin(0.1)
和
sin(0.2)
,我们可以运行
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9512
选择和其他操作
将choice
与有限生成器一起使用,可以得到一个选择
从提供的生成器:
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9513
jinja2支持更通用的列表,例如字符串列表。因此,我们可以编写
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9514
在python中,字符串也可以iterable:
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9515
所以我们可以用
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9516
我们可以掷100个硬币,用计数器计数输出(即
集合。计数器
)
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9517
排序
功能在计数器
对象(a
dict
type),因此如果希望按键排序输出,可以运行
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9518
有一个按值排序的小技巧,即通过交换计数器两次来排序:
samplitude "sin(0.31415) | sample(5) | round | max | cli"0.9519
swap
过滤器执行元素反转,元素反转
在字典中定义为中每个键值对的(value,key)
列表
字典。
因此,为了得到三个最常见的anagram字符串,我们可以运行
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502500
使用stdin()
作为生成器,我们可以导入samplitude
。当心
stdin()
刷新输入,因此stdin
(当前)不能与
无限输入流。
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502501
如果我们愿意的话hufflels
我们可以运行
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502502
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502503
有趣的粉末情节
有趣的是,如果您安装了matplotlib,我们支持打印,hist
最有用的。
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502504
指数分布可以用指数(lamba)
绘制。注意
cli
输出必须是链中的最后一个过滤器,因为这是一个命令行
仅限实用程序:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502505
要在打印后抑制输出,可以使用gobble
过滤器清空
管道:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502506
pert
分发
接受输入low
,peak
和high
:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502507
尽管hist是最有用的,但是可以将运行s8e
on
TimeSeries,其中行
绘图最有意义:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502508
也可以使用scatter函数,但要求输入流是
成对流,可以通过积生成器或通过
对
或计数器
过滤器:
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"0501502509
"file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica 0
您自己的过滤器
如果以编程方式使用samplitude,则可以通过 发送词典
>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica1
到samplitude
函数。
示例:秘书问题
假设您想模拟秘书问题…
间奏曲:问题对那些不熟悉的人来说,你是老板,爱丽丝,他想雇一个新秘书 鲍勃。假设你想雇用所有候选人中最高的鲍勃,但是 候选者到达一条小溪,你只知道候选者的数量。为了 每个候选人,你必须接受(雇用)或拒绝该候选人。曾经的你 拒绝了候选人,您不能撤消决定。
解决这个问题的方法是看第一个n/e
(e~2.71828
欧拉常数)候选,然后接受第一个更高的候选
比所有的第一位候选人都重要。
抽样解决方案
设正常(170,10)
为候选生成器,并让n=100
。我们创造了一个
过滤接受流和整数(n
)并根据
找到解决办法。为了能够评估溶液的质量
稍后,过滤器必须转发整个候选列表;因此我们注释
我们用(c,false)
选择一个我们拒绝的候选人,然后(c,true)
表示我们接受的候选人。
>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica2
现在,用samplitude来模拟秘书问题:
>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica3
在67%的情况下,我们可以期待得到一个最优秀的候选人, 而其余33%的病例将是均匀分布的。运行 10万人的规模为1000人的跑步揭示了这一结构。