跳转到内容

报表的使用说明

版本时间:2024-07-27

以列为单位

数据类型

query data source

transformation多个df做转换

可以参考 Polars-Rust/Transformations

sql execute

linear equations

nonlinear equations

mixed integer linear programming, objective function related DF name, constraint related DF name

nonlinear programming

脚本

以 EvalType 的方式,执行 Expr 表达式。可参考 Polars-Rust/Expressions/

目前支持的 EvalType 如下:

  • Select 执行 Vec<Expr> 中的多个 Expr ,每个 Expr 为一列或多列,并将执行后的一个或多个列作为一个新的 Dataframe。要保证多个 Expr的执行结果行数相同。
  • Filter Vec<Expr> 中最后一个 expr 是过滤条件,之前的 expr 为最终输出的列。
  • WithColumn 在原有Dataframe最右边增加一列,Vec<Expr> 中只有最后一个 expr 有效,是该增加列的表达式。
  • WithColumns 在原有Dataframe最右边增加多列,Vec<Expr> 是增加的各列的表达式。
  • GroupBy Vec<Expr> 中最后一个 expr 是分组条件,之前的 expr 为最终输出的列。

expr可以嵌套。多个公式用分号 ; 相隔。目前支持的 expr如下:

  • 字符串 str:需要符合测点中的变量命名规则,否则会被识别错误。

  • 数字 number :输入时均被统一处理成f64格式。如需特定格式,可使用 cast 进行强制类型转换。包含的数据格式有:null、i8、i16、i32、i64、u8、u16、u32、u64、f32、f64、bool、binary、str、date、time、unknown,以上同时是表达数据格式时的写法。

  • 双目运算符:加减乘除等

    • expr_a + expr_b
    • expr_a - expr_b
    • expr_a * expr_b
    • expr_a / expr_b
    • expr_a % expr_b
    • expr_a ^ expr_b
    • expr_a < expr_b
    • expr_a > expr_b
    • expr_a <= expr_b
    • expr_a >= expr_b
    • expr_a == expr_b
    • expr_a != expr_b
    • expr_a && expr_b 按位与
    • expr_a || expr_b 按位或
    • expr_a ^^ expr_b 按位异或
  • 单目运算符: 正负号

    • +expr
    • -expr
  • 函数

    • col(str) 根据列名选择列。特殊的,col('*') 代表取所有列。
    • cols(str,str,str,···) 根据多个列名选择多个列。
    • all() 所有列。
    • alias(expr,str) 重命名,如 alias(expr_a,b) 将列”a”重命名为”b”。
    • cast(expr, datatype_str) 数据类型转换,datatype_str为数据类型,可以是 “null”、“i8” 、“i16”、“i32”、“i64”、“u8”、“u16”、“u32”、“u64”、“f32”、“f64”、“bool”、“binary”、“str”、“date”、“time”、“unknown”。
    • sort(expr, bool) 排序,bool为 “true” 时降序,“false” 时升序。
    • filter(expr, expr) 过滤,第一个expr为过滤对象,第二个expr为过滤条件。
    • not(expr) 求逆
    • not_null(expr) 是否为空值,结果为bool
    • drop_nulls(expr) 去掉空值的行
    • not_nan(expr) 在列的数据类型为数字时,判断是否为NAN
    • is_nan(expr) 在列的数据类型为数字时,判断是否为NAN
    • drop_nans(expr) 在列的数据类型为数字时,去掉NAN的行
    • eq(expr, expr) 等于
    • eq_missing(expr, expr) 等于,空值之间相等
    • neq(expr, expr) 不等于
    • neq_missing(expr, expr) 不等于,空值之间不相等
    • lt(expr, expr) 小于
    • gt(expr, expr) 大于
    • lt_eq(expr, expr) 小于等于
    • gt_eq(expr, expr) 大于等于
    • n_unique(expr) 获取唯一值的数量
    • unique(expr) 获取唯一值
    • arg_unique(expr)获取唯一值的第一个索引
    • arg_min 最小值的索引
    • arg_max 最大值的索引
    • any_horizontal(expr) 对每行的数据按位或,结果形成一个新列,默认列名为any
    • min_horizontal(expr) 每行数据的最小值形成一个新列,默认列名为min
    • max_horizontal(expr) 每行数据的最大值形成一个新列,默认列名为max
    • sum_horizontal(expr) 每行数据的和形成一个新列,默认列名为sum
    • reverse(expr) 反转列的顺序
    • shift(expr, number) 向下移动 number 行,空值填充null。
    • shift_and_fill(expr, number, fill_value) 向下移动 number 行,空值填充 fill_value。fill_value 是一个Expr。
    • first(expr) 第一个值
    • last(expr) 最后一个值
    • head(expr, number) 前 number 行
    • tail(expr, number) 后 number 行
    • slice(expr, offset_number, length_number) 从 offset_number 行开始,取 length_number 行
    • count(expr) 计数
    • sum(expr/str) 求和,其中参数支持表达式或直接使用列名
    • min(expr/str) 最小值,其中参数支持表达式或直接使用列名
    • max(expr/str) 最大值,其中参数支持表达式或直接使用列名
    • mean(expr/str) 或 avg(expr) 平均值,其中参数支持表达式或直接使用列名
    • median(expr/str) 中位数,其中参数支持表达式或直接使用列名
    • nan_min(expr/str) 最小值,忽略NAN。
    • std(expr, number) 标准差,number为自由度,0表示总体标准差,1表示样本标准差
    • var(expr, number) 方差,number为自由度,0表示总体方差,1表示样本方差
    • cum_count(expr, bool) 累计计数,bool表示是否反向
    • cum_sum(expr, bool) 累计求和,bool表示是否反向
    • cum_min(expr, bool) 累计最小值,bool表示是否反向
    • cum_max(expr, bool) 累计最大值,bool表示是否反向
    • cum_prod(expr, bool) 累计乘积,bool表示是否反向
    • abs(expr) 绝对值
    • exp(expr) 指数
    • pow(expr, number) 幂次方,number为指数
    • log1p(expr) 所有元素加1后的自然对数
    • log(expr, number) 对数,number为底数
    • sqrt(expr) 开方
    • cbrt(expr) 立方根
    • sin(expr) 正弦
    • cos(expr) 余弦
    • tan(expr) 正切
    • cot(expr) 余切
    • arcsin(expr) 反正弦
    • arccos(expr) 反余弦
    • arctan(expr) 反正切
    • sinh(expr) 双曲正弦
    • cosh(expr) 双曲余弦
    • tanh(expr) 双曲正切
    • degrees(expr) 弧度转角度
    • radians(expr) 角度转弧度
    • floor(expr) 向下取整
    • ceil(expr) 向上取整
    • round(expr, number) 四舍五入,number为保留小数位数
    • dot(expr, expr) 内积
    • ···

原始数据

nrsnamesrandomgroups
i32strf64str
---------------------
1foo1.1A
2ham3.3A
3spam5.5B
nulleggs2.2C
5null5.5B
  • EvalType::Select,表达式为 “sum(nrs); sort(col(names),false); alias(first(col(names)),firstname); alias(mean(nrs) * 10,nrsx10);” 输出四列,分别为:
nrsnamesfirstnamenrsx10
i32strstrf64
-----------------------------
11nullfoo27.5
11eggsfoo27.5
11foofoo27.5
11hamfoo27.5
11spamfoo27.5
  • EvalType::Filter, “col(nrs);col(names);cast(col(random),i32);col(nrs) > 1;” 输出列”nrs”,过滤出列”nrs”中大于1的行
nrsnamesrandom
i32stri32
------------------
2ham3
3spam5
5null5
  • EvalType::GroupBy, “alias(shift(col(A),1),A_shift); alias(shift_and_fill(col(A),2,10.0),A_shift_fill); col(cars); sum(B); col(fruits);” 根据列fruit分组,得到两行:
fruitsA_shiftA_shift_fillcarsB
strlist[i32]list[f64]list[str]i32
--------------------------------
banana[null, 1, 2][10.0, 10.0, 1.0][“beetle”,“audi”, “beetle”]10
apple[null, 3][10.0, 10.0][“beetle”, “beetle”]5
  • EvalType::GroupBy, “all(); cols(fruits,cars);”
fruitscarsABoptional
strstrlist[i32]list[i32]list[i32]
---------------------------------------
bananabeetle[1, 5][5, 1][28, -30]
applebeetle[3, 4][3, 2][null, 2]
bananaaudi[2][4][300]