Engee 文档
Notebook

组合分类数组

此示例演示如何组合类别变量数组。

创建分类数组

让我们创建一个类别值数组,其中存储了一组25名学生的午休饮料偏好。 A.

In [ ]:
Pkg.add("CategoricalArrays")
In [ ]:
using Random, CategoricalArrays
Random.seed!(123)

A = rand(["молоко", "сок", "вода"], 25)
A = categorical(A, levels=["молоко", "сок", "вода"], ordered=true) # Передаем вектор меток чтобы задать их порядок
Out[0]:
25-element CategoricalArray{String,1,UInt32}:
 "сок"
 "сок"
 "вода"
 "молоко"
 "сок"
 "сок"
 "молоко"
 "вода"
 "сок"
 "молоко"
 "сок"
 "вода"
 "молоко"
 "сок"
 "сок"
 "молоко"
 "вода"
 "сок"
 "сок"
 "молоко"
 "молоко"
 "вода"
 "вода"
 "молоко"
 "сок"

分类数组的汇总统计信息:

In [ ]:
Pkg.add( "FreqTables" )
In [ ]:
using FreqTables
freqtable(A)
Out[0]:
3-element Named Vector{Int64}
Dim1   │ 
───────┼───
молоко │  8
сок    │ 11
вода   │  6

让我们创建另一个类别数组,其中包含来自该组的28名学生的愿望。 B.

In [ ]:
B = rand(["молоко", "сок", "вода"], 28) # Более сжатый синтаксис
B = categorical(B)
Out[0]:
28-element CategoricalArray{String,1,UInt32}:
 "молоко"
 "молоко"
 "молоко"
 "сок"
 "вода"
 "молоко"
 "молоко"
 "сок"
 "молоко"
 "молоко"
 "молоко"
 "сок"
 "молоко"
 ⋮
 "вода"
 "сок"
 "вода"
 "молоко"
 "вода"
 "вода"
 "вода"
 "молоко"
 "сок"
 "вода"
 "молоко"
 "вода"

统计摘要:

In [ ]:
freqtable(B)
Out[0]:
3-element Named Vector{Int64}
Dim1   │ 
───────┼───
вода   │  9
молоко │ 13
сок    │  6

组合分类数组

让我们结合类中的数据 AB 成一个分类数组 Group1.

In [ ]:
Group1 = vcat(A, B)
Out[0]:
53-element CategoricalArray{String,1,UInt32}:
 "сок"
 "сок"
 "вода"
 "молоко"
 "сок"
 "сок"
 "молоко"
 "вода"
 "сок"
 "молоко"
 "сок"
 "вода"
 "молоко"
 ⋮
 "вода"
 "сок"
 "вода"
 "молоко"
 "вода"
 "вода"
 "вода"
 "молоко"
 "сок"
 "вода"
 "молоко"
 "вода"

统计摘要:

In [ ]:
freqtable(Group1)
Out[0]:
3-element Named Vector{Int64}
Dim1   │ 
───────┼───
молоко │ 21
сок    │ 17
вода   │ 15

使用其他类别创建分类数组

创建分类数组 Group2,包含50名学生的愿望与一个额外的饮料选项:苏打水

In [ ]:
Group2 = rand(["сок", "молоко", "газировка", "вода"], 50)
Group2 = categorical( Group2 )
Out[0]:
50-element CategoricalArray{String,1,UInt32}:
 "молоко"
 "газировка"
 "вода"
 "газировка"
 "газировка"
 "вода"
 "молоко"
 "молоко"
 "сок"
 "газировка"
 "газировка"
 "молоко"
 "вода"
 ⋮
 "вода"
 "газировка"
 "сок"
 "сок"
 "сок"
 "газировка"
 "вода"
 "сок"
 "вода"
 "газировка"
 "сок"
 "газировка"

统计摘要:

In [ ]:
freqtable(Group2)
Out[0]:
4-element Named Vector{Int64}
Dim1      │ 
──────────┼───
вода      │ 13
газировка │ 18
молоко    │  7
сок       │ 12

组合不同类别的数组

结合来自 Group1Group2.

In [ ]:
students = [Group1; Group2]
Out[0]:
103-element CategoricalArray{String,1,UInt32}:
 "сок"
 "сок"
 "вода"
 "молоко"
 "сок"
 "сок"
 "молоко"
 "вода"
 "сок"
 "молоко"
 "сок"
 "вода"
 "молоко"
 ⋮
 "вода"
 "газировка"
 "сок"
 "сок"
 "сок"
 "газировка"
 "вода"
 "сок"
 "вода"
 "газировка"
 "сок"
 "газировка"

汇总统计。 组合时,第二个数组(soda)特有的类别被添加到第一个数组(milk,water,juice,soda)中的类别列表的末尾。

In [ ]:
freqtable(students)
Out[0]:
4-element Named Vector{Int64}
Dim1      │ 
──────────┼───
молоко    │ 28
сок       │ 29
вода      │ 28
газировка │ 18

要更改类别数组中类别的顺序,请使用以下函数 levels!.

In [ ]:
levels!(students, ["сок", "молоко", "вода", "газировка"])
levels(students)
Out[0]:
4-element Vector{String}:
 "сок"
 "молоко"
 "вода"
 "газировка"

组合分类数组

要查找存在于以下类别的唯一值 Group1Group2,您可以使用该功能 union.

In [ ]:
C = union(Group1, Group2)
Out[0]:
4-element Vector{CategoricalValue{String, UInt32}}:
 "сок"
 "вода"
 "молоко"
 "газировка"

结论

此示例中的所有分类数组都是无序的。 要组合有序类别数组,它们必须具有相同的类别集,包括它们的顺序。