Julia 可视化库:VegaLite.jl 【笔记6 - transform 之 aggregate】

aggregate 特性

// Json 版本
{
  ...
  "transform": [
    {
      // Aggregate Transform
      "aggregate": [
          {"op": ..., "field": ..., "as": ...},
          {"op": ..., "field": ..., "as": ...}, 
          ...],
      "groupby": [...]
    }
     ...
  ],
  ...
}
# Julia 版本
@vlplot(
    ...
    transform=[{
        aggregate=[
            {op=..., field=..., as=...}, 
            {op=..., field=..., as=...}, 
            ...],
        groupby=[...]
        },
        ...
    ],
    ...
)
  1. aggregate 字段下有 opfieldas 三个必需的属性。

    • field 指的是操作的变量对象。

    • as 给操作后的变量一个名称,该名称于所在的代码环境内起作用。

    • op 支持以下操作函数。在 Json 格式中函数名称使用双引号,即使用 "op": "operation",在 Julia 中语法为 op=:operation

  2. aggregate 可与 groupby 字段连用,实现对不同的组进行操作。

operation 解释 operation 解释
count 计数 stderr 标准误
valid 对非空等数值计数 median 中位数
missing 空值或未定义字段值 q1 下四分位数
distinct 对不同字段的值计数 q3 上四分位数
sum 求和 ci0 根据bootstrapped方法得到的95%下置信区间
mean 均值 ci1 根据bootstrapped方法得到的95%上置信区间
average 均值 min 最小值
variance 样本方差 max 最大值
variancep 总体方差 argmin 达到最小值的数据对象
stdev 样本标准差 argmax 达到最大值的数据对象
stdevp 总体标准差

栗子

一个简单的例子:画出 poplulation 数据集中 150 年各年龄段的平均人口数量。

using VegaLite, VegaDatasets, DataFrames
popu = DataFrame(dataset("population"))
describe(popu[:,1]) # 1850-2000 年 -> 151 年
dataset("population") |>
@vlplot(
    transform=[
        {
            aggregate=[
            {op=:mean, field=:people, as=:mean_people} # 每个年龄段的人口均值
        ],
            groupby=[:age] # 以年龄段分组
        }
    ],
    :rule,
    x="age:o",
    y="mean_people:q",
)
Summary Stats:
Mean:           1927.333333
Minimum:        1850.000000
1st Quartile:   1880.000000
Median:         1930.000000
3rd Quartile:   1970.000000
Maximum:        2000.000000
Length:         570
Type:           Int64

这里写图片描述

应用

一个带有最大值、最小值触须的箱线图 ↓

using VegaLite, VegaDatasets
dataset("population") |>
@vlplot(
    transform=[{
        aggregate=[
            {op=:q1, field=:people, as=:lowerBox},
            {op=:q3, field=:people, as=:upperBox},
            {op=:median, field=:people, as=:midBox},
            {op=:min, field=:people, as=:lowerWhisker},
            {op=:max, field=:people, as=:upperWhisker}
        ],
        groupby=[:age]
    }]
) +
@vlplot(
    mark={:rule, style=:boxWhisker},
    y={"lowerWhisker:q", axis={title="population"}},
    y2="lowerBox:q",
    x="age:o"
) +
@vlplot(
    mark={:rule, style=:boxWhisker},
    y="upperBox:q",
    y2="upperWhisker:q",
    x="age:o"
) +
@vlplot(
    mark={:bar, style=:box},
    y="lowerBox:q",
    y2="upperBox:q",
    x="age:o",
    size={value=5}
) +
@vlplot(
    mark={:tick, style=:boxMid},
    y="midBox:q",
    x="age:o",
    color={value=:white},
    size={value=5}
)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37952030/article/details/81586491
今日推荐