搜索、采样和聚合

数据是统计分析中不可或缺的因素。本节概述了用于检索数据以进行可视化和统计分析的关键功能:搜索、抽样和聚合。

搜索

探索

search 函数可用于搜索 SolrCloud 集合并返回结果集。

以下是 Zeppelin-Solr 解释器调用的最基本的 search 函数示例。Zeppelin-Solr 将 seach(logs) 调用发送到 /stream 处理程序,并以表格格式显示结果。

在此示例中,search 函数仅传递正在搜索的集合的名称。这将返回一个包含所有字段的 10 条记录的结果集。此简单函数对于探索数据中的字段以及了解如何开始优化搜索条件非常有用。

search1

搜索和排序

一旦了解记录的格式,即可向 search 函数添加参数以开始分析数据。

在以下示例中,已向 search 函数添加了搜索查询、字段列表、行和排序。现在,搜索仅限于特定时间范围内的记录,并返回按 tdate_dt 升序排列的最大 750 条记录的结果集。我们还将结果集限制为三个特定字段。

search sort

将数据加载到表格后,我们可以切换到散点图,并将 filesize_d 列绘制在x 轴上,并将 response_d 列绘制在y 轴上。

search sort plot

这使我们可以快速可视化从索引的非常特定切片中选择的两个变量之间的关系。

评分

当对文本字段执行查询时,search 函数会对文档进行评分和排名。以下示例显示了结果评分和排名的示例。

scoring

采样

random 函数从分布式搜索结果集中返回随机样本。这允许对样本进行快速可视化、统计分析和建模,这些样本可用于推断有关较大结果集的信息。

以下可视化示例使用较小的随机样本,但 Solr 的随机采样在超过 200,000 的样本量上提供亚秒级响应时间。这些较大的样本可用于构建可靠的统计模型,这些模型以亚秒级性能描述大型数据集(数十亿个文档)。

以下示例演示了随机样本的单变量和双变量散点图。随机样本的统计建模在 统计概率分布线性回归曲线拟合机器学习 部分中进行了介绍。

单变量散点图

在以下示例中,random 函数以其最简单的形式调用,仅将集合名称作为参数。

当不带其他参数调用时,random 函数返回集合中包含所有字段的 500 条记录的随机样本。当不带字段列表参数 (fl) 调用时,random 函数还会生成一个序列,在本例中为 0-499,可用于绘制 x 轴。此序列在名为 x 的字段中返回。

以下可视化显示了一个散点图,其中 filesize_d 字段绘制在 y 轴上,x 序列绘制在 x 轴上。这样做的好处是将 filesize_d 样本分散在绘图的长度上,以便更容易地研究它们。

通过研究散点图,我们可以了解有关 filesize_d 变量分布的许多信息

  • 样本集的范围为 34,875 至 45,902。

  • 最高密度似乎约为 40,000。

  • 该样本似乎在 40,000 以上和以下具有平衡的观测数量。基于此,平均值众数似乎在 40,000 左右。

  • 观测数量在样本的低端和高端逐渐减少到少数异常值。

可以多次重新运行此样本,以查看样本是否产生类似的绘图。

univariate

双变量散点图

在下一个示例中,已将参数添加到 random 函数。字段列表 (fl) 现在指定两个字段随每个样本一起返回:filesize_dresponse_dqrows 参数与默认值相同,但作为如何设置这些参数的示例而包含在内。

通过在 x 轴上绘制 filesize_d,在 y 轴上绘制 response_d,我们可以开始研究这两个变量之间的关系。

通过研究散点图,我们可以了解以下内容

  • 随着 filesize_d 的增加,response_d 倾向于增加。

  • 这种关系似乎是线性的,因为通过数据绘制的直线可用于对关系进行建模。

  • 这些点似乎沿着中间的直线更密集地聚集,并且随着它们远离该线,密度会降低。

  • 在每个 filesize_d 点处,数据的方差似乎相当一致。这意味着预测模型在预测范围内将具有始终如一的误差。

bivariate

聚合

聚合是一种强大的统计工具,用于总结大型数据集以及发现数据中的模式、趋势和相关性。聚合也是一种强大的可视化工具,并为进一步的统计分析提供数据集。

统计信息

最简单的聚合是 stats 函数。stats 函数计算与查询匹配的整个结果集的聚合。stats 函数支持以下聚合函数:count(*)summinmaxavg。可以在单个函数调用中计算任意数量和组合的统计信息。

stats 函数可以在 Zeppelin-Solr 中以表格形式可视化。在下面的示例中,对结果集计算了两个统计信息,并显示在表格中

stats table

stats 函数还可以使用 number 可视化,该可视化用于突出显示重要数字。以下示例显示了在数字可视化中显示的 count(*) 聚合

stats

facet

facet 函数执行单维和多维聚合,其行为类似于 SQL 分组聚合。在底层,facet 函数将聚合推送到 Solr 的 JSON Facet API 以实现快速分布式执行。

以下示例从 nyc311(纽约投诉)数据集执行单维聚合。该聚合按 计数返回状态为 Pending 的记录的五大 投诉类型。结果以表格形式显示在 Zeppelin-Solr 中。

facettab1

以下示例显示使用饼图可视化的表格。

facetviz1

下一个示例演示了多维聚合。请注意,buckets 参数现在包含两个维度:borough_scomplaint_type_s。这将按计数返回行政区和投诉类型的前 20 个组合。

facettab2

以下示例显示了多维聚合可视化为分组条形图。

facetviz2

facet 函数支持以下聚合函数的任意组合:count(*)、sum、avg、min、max。

facet2D

facet2D 函数执行二维聚合,可以将其可视化为热图或转换为矩阵,并由机器学习函数操作。

facet2D 具有不同的语法和行为,而不是二维 facet 函数,后者不控制每个维度的唯一切面的数量。facet2D 函数具有 dimensions 参数,该参数控制xy 维度的唯一切面的数量。

以下示例可视化 facet2D 函数的输出。在示例中,facet2D 返回每个行政区的前 5 个行政区和前 5 个投诉类型。然后将输出可视化为热图。

facet2D

facet2D 函数支持以下聚合函数之一:count(*)sumavgminmax

timeseries

timeseries 函数执行快速、分布式的时间序列聚合,利用 Solr 的内置分面和日期数学功能。

以下示例对每日股票价格数据集合执行每月时间序列聚合。在此示例中,计算股票代码amzn 在特定日期范围内的平均每月收盘价。

然后使用折线图可视化 timeseries 函数的输出。

timeseries1

timeseries 函数支持以下聚合函数的任意组合:count(*)sumavgminmax

significantTerms

significantTerms 函数查询集合,但它不返回文档,而是返回在结果集中找到的文档中的重要术语。此函数根据术语在结果集中出现的频率以及在整个语料库中出现的频率对术语进行评分。significantTerms 函数为每个术语发出一个元组,其中包含术语、分数、前景计数和背景计数。前景计数是术语出现在结果集中的文档数。背景计数是术语出现在整个语料库中的文档数。前景和背景计数对于集合是全局的。

significantTerms 函数通常可以提供无法从其他类型的聚合中收集到的见解。以下示例说明了 facet 函数和 significantTerms 函数之间的差异。

在第一个示例中,facet 函数聚合了布鲁克林排名前 5 的投诉类型。这返回了布鲁克林最常见的五种投诉类型,但尚不清楚这些术语在布鲁克林出现的频率是否高于其他行政区。

significantTermsCompare

在下一个示例中,significantTerms 函数返回布鲁克林行政区 complaint_type_s 字段中的前 5 个重要术语。得分最高的术语“老年人虐待”的前景计数为 285,背景计数为 298。这意味着整个数据集中有 298 起老年人虐待投诉,其中 285 起发生在布鲁克林。这表明老年人虐待投诉在布鲁克林的发生率远高于其他行政区。

significantTerms2

最后一个示例显示了包含电影评论的文本字段的 significantTerms 的可视化。结果显示了出现在包含短语“科幻”的电影评论中的重要术语。

结果使用气泡图进行可视化,其中 前景 计数绘制在 x 轴上,背景 计数绘制在 y 轴上。每个术语显示在一个气泡中,气泡的大小由 分数 决定。

sterms

节点

nodes 函数在图的广度优先搜索期间执行节点聚合。此函数在 图遍历 部分中有详细介绍。在此示例中,重点将放在使用 nodes 表达式在时间序列图中查找相关节点。

以下示例查找其每日变动趋势与股票代码jpm(摩根大通)相关的股票代码。

内部search表达式查找特定日期范围内的记录,其中股票代码符号为jpm,且change_d字段(股票价格的每日变化)大于 0.25。此搜索返回索引中的所有字段,包括yearMonthDay_s,它是匹配记录的年份、月份和日期的字符串表示形式。

nodes函数包装search函数并对其结果进行操作。walk参数将搜索结果中的一个字段映射到索引中的一个字段。在此情况下,yearMonthDay_s映射回同一索引中的yearMonthDay_s字段。这将查找具有初始搜索返回的相同yearMonthDay_s字段值的记录,并将返回那些日期的所有股票代码的记录。将筛选查询应用于搜索,以将搜索筛选到change_d大于 0.25 的行。这将查找匹配日期中所有每日变化大于 0.25 的记录。

gather参数告诉 nodes 表达式在广度优先搜索期间收集ticker_s符号。count(*)参数统计股票代码的出现次数。这将统计广度优先搜索中每个股票代码出现的次数。

最后,top函数按计数选择前 5 个股票代码并返回它们。

以下结果显示nodes字段中的股票代码符号和每个节点的计数。请注意,jpm排在第一位,这显示了jpm在此时间段内有多少天的变化大于 0.25。下一组股票代码符号(mtbslvbgspnc)是在jpm变化大于 0.25 的同一天变化大于 0.25 的天数最多的符号。

nodestab

nodes函数支持以下聚合函数的任意组合:count(*)sumavgminmax