分析函数
SmartEDB Python 包装器提供了一个由序列实现的分析操作库,这些序列作为 SequenceIterator 类的方法。
请使用以下链接查看这些方法的详细说明。
方法 | 说明 |
---|---|
一元运算符 | 应用指定操作以生成相同类型结果序列的方法:abs(绝对值)、neg(取反) |
二元方法 | 接受输入序列并生成相同类型结果序列的方法:add(加法)、sub(减法)、mul(乘法)、div(除法)、mod(取模)、max(最大值)、min(最小值) |
比较运算符 | 接受输入序列并生成比较运算符的布尔值结果序列的方法:==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于) |
逻辑运算符 | 接受输入序列并生成逻辑运算符的布尔值结果序列的方法:not(非)、and(与)、or(或)、xor(异或) |
转换运算符 | 将对象的序列元素转换为所需类型 |
压缩方法 | 将两个序列压缩为标量值的方法,例如:加权和、加权平均值、协方差、相关性 |
条件方法 | 根据条件对一个或两个输入序列执行操作的方法,例如:if(如果)、iif(条件判断)、filter(过滤)、filter_pos(正向过滤) |
操作方法 | 执行各种序列操作的方法 |
迭代方法 | 从序列迭代器中提取值的方法,例如:next(下一个)、first(第一个)、last(最后一个)、append(追加)、insert(插入)、delete(删除)、search(搜索)、count(计数)、map(映射)、project(投影)、store(存储) |
顶部方法 | 返回输入序列中前 n 个元素(或其位置)的方法:top_max(最大值)、top_min(最小值)、top_pos_max(最大值位置)、top_pos_min(最小值位置) |
全局聚合 | 在结果序列中生成标量聚合值的方法:count(计数)、max(最大值)、min(最小值)、sum(求和)、prd(乘积)、avg(平均值)、approxdc(近似去重计数)、approxdc_hash(近似去重计数哈希) |
分组聚合 | 根据 group_by 参数的值将序列拆分为组的方法 |
网格聚合 | 根据 interval 参数指定的区间将序列拆分为组,该参数确定组中的最大元素数量 |
窗口聚合 | 与上述“网格”函数类似,不过 interval 参数表示从输入序列中获取的下一个 N 个元素 |
哈希聚合 | 对未排序的分组序列进行分组 |
累积聚合 | 在结果序列中累积所有先前元素的平均值、总和、乘积等 |
示例
本节示例使用了以下股票报价数据库的模式定义:
#define uint4 unsigned<4>
#define MAX_SYMBOL_LEN 21
declare database stockdb;
class Quote
{
char<MAX_SYMBOL_LEN> symbol;
sequence<date asc> day;
sequence<float> low;
sequence<float> high;
sequence<float> open;
sequence<float> close;
sequence<uint4> volume;
unique tree<symbol> by_sym;
};
请注意,此表的主键是字段 symbol 上的唯一索引 by_sym,而所有其他字段均为序列类型,其中字段 day 是有序序列。通常,分析操作是在从 Quote 对象中提取的一个或多个序列字段上执行的,而 Quote 对象实际上是从“结果集”游标中获取的一行。例如,以下代码片段遍历整个数据库,打印出 Quote 字符字段 symbol 以及序列字段 day 和 high 的值:
con.startTransaction(exdb.Transaction.MCO_READ_ONLY)
# Iterate through all objects
cursor = con.cursor("Quote", "by_sym")
for quote in cursor:
# Bind iterators together
quote.day.project('high')
for (day,high) in quote.day:
print "%s[%s]: %f" % (quote.symbol, day, high)
con.rollback()
SQL 和 Python
SmartEDB Python 包装器还通过允许使用序列执行操作扩展了 SQL 数据库 API 规范,如在“在 Python 中使用序列”页面中所述。SequenceIterator 可能是 select 语句的结果,或者作为 insert 或 update 语句中的参数出现。使用通过 SQL 查询获取的序列执行操作涉及将一个序列映射(投影)或存储到另一个 SequenceIterator 中,然后调用适当的方法。例如,以下语句从具有“AAA”符号的 Quote 对象中选择低值和高值,将低值序列复制到 avg,然后计算两个序列元素的加权平均值:
cursor.execute("SELECT stamp, low, high FROM Quote WHERE symbol = ?", ('AAA',))
row = cursor.fetchone()
SequenceIterator avg;
avg.store(low)
avg.wavg(high)