📜  Julia 中数据的分类表示

📅  最后修改于: 2022-05-13 01:55:02.312000             🧑  作者: Mango

Julia 中数据的分类表示

Julia 是一种高性能的动态编程语言,因为它是一种高级语言,所以很容易学习。但有时,在使用 Julia 等编程语言处理数据时,我们会遇到具有少量级别的结构或表示,如下所示。

Julia
# Creating an array of stings
a = ["Geeks", "For", "Geeks", "Useful", "For", "Everybody"]


Julia
# Creating an array of the 
# CategoricalArray type of the array 'a'
cat = CategoricalArray(a)


Julia
# Creating array of CategoricalArray 
# type with some missing values
cat = CategoricalArray(["Geeks", "For", "Geeks",
                         missing, missing, "Everybody"])


Julia
# Determining levels of the array
levels(cat)


Julia
# Changing the order of the levels displayed
levels!(cat, ["Geeks", "For", "Everybody"]);
levels(cat)


Julia
# Sorting array according to the levels
sort(cat)


Julia
# Decreasing the number of levels for the array 'cat'
cat = compress(cat)


Julia
# Creating a categorical array and 
# applying the compress function
cat2 = categorical(["Geeks", "For", "Geeks"], compress = true)


Julia
# Creating an ordered categorical array
cat3 = categorical(["Geeks", "For", "Geeks"], ordered=true)


Julia
# Testing levels of unordered array
cat2[1] < cat2[2]


Julia
# Testing levels of the ordered array
cat3[1] < cat3[2]


Julia
# Checking if array is ordered
isordered(cat2)


Julia
# Changing unordered array to an ordered array
ordered!(cat2, true)


Julia
# Testing levels of the array
cat2[1] < cat2[2]


Julia
# Creating a DataFrame with String elements
using DataFrames
  
df = DataFrame(A = ["A", "A", "A", "B", "B", "C"],
               B = ["D", "E", "E", "F", "G", "G"])


Julia
# Changing the column A to categorical
categorical!(df, :A)


Julia
# Changing columns to categorical type
categorical!(df, compress=true)


Julia
# Displaying column types
eltype.(eachcol(df))


如您所见,数组的元素被简单地归类为完整字符串。

分类数据

通过将数组类型更改为CategoricalArray类型,我们可以更好地表示元素,以便将来更轻松地完成某些任务。 CategoricalArray 类型将字符串表示为多个级别中的索引。

朱莉娅

# Creating an array of the 
# CategoricalArray type of the array 'a'
cat = CategoricalArray(a)

在上面提到的示例中,表示了 2 32 个级别(UInt32)。

CategoricalArray 类型还可以对缺失值进行分类,如下所示:

朱莉娅

# Creating array of CategoricalArray 
# type with some missing values
cat = CategoricalArray(["Geeks", "For", "Geeks",
                         missing, missing, "Everybody"])

数组的级别

CategoricalArray 类型允许我们通过使用要传递的参数是数组的levels()函数来知道存在重复数据时有效的级别。

朱莉娅

# Determining levels of the array
levels(cat)

我们可以使用levels!()函数更改关卡的位置或顺序,因为它可能在以后有用。

朱莉娅

# Changing the order of the levels displayed
levels!(cat, ["Geeks", "For", "Everybody"]);
levels(cat)

我们可以根据级别的更改顺序对数组进行排序。

朱莉娅

# Sorting array according to the levels
sort(cat)

压缩级别

CategoricalArray 类型可以有2 32 级别,如输出中数组的描述所示。如果不需要这么多级别,我们可以使用compress()函数来减少它们。以下示例显示级别减少到2 8个级别。

朱莉娅

# Decreasing the number of levels for the array 'cat'
cat = compress(cat)

分类函数

我们可以直接使用分类函数而不是使用 CategoryArrays,它允许我们应用一个关键字参数,如compress关键字,当设置为“true”时,暗示该关键字在元素上的实现。

朱莉娅

# Creating a categorical array and 
# applying the compress function
cat2 = categorical(["Geeks", "For", "Geeks"], compress = true)

同样,我们实现了compress关键字,ordered关键字可以通过将其等同于'true'来实现,它为数组的级别提供了顺序。

朱莉娅

# Creating an ordered categorical array
cat3 = categorical(["Geeks", "For", "Geeks"], ordered=true)

级别的顺序

我们可以检查数组的级别是否有序,当它不是有序数组时,会产生如下所示的错误。

朱莉娅

# Testing levels of unordered array
cat2[1] < cat2[2]

当数组被排序时,它会根据级别的顺序产生真或假。

朱莉娅

# Testing levels of the ordered array
cat3[1] < cat3[2]

我们可以使用isordered()函数检查数组是否有序。

朱莉娅

# Checking if array is ordered
isordered(cat2)

我们可以使用ordered!()函数将无序数组更改为有序数组,反之亦然。

朱莉娅

# Changing unordered array to an ordered array
ordered!(cat2, true)

现在我们已经订购了数组,我们可以测试它。

朱莉娅

# Testing levels of the array
cat2[1] < cat2[2]

DataFrame 中的分类数据

我们可以使用categorical!()函数在 DataFrame 的一个或多个列上实现分类函数,其中第一个参数是 DataFrame,第二个参数可以是我们要应用的 DataFrame 的列和一些关键字函数。

朱莉娅

# Creating a DataFrame with String elements
using DataFrames
  
df = DataFrame(A = ["A", "A", "A", "B", "B", "C"],
               B = ["D", "E", "E", "F", "G", "G"])

我们可以将 DataFrame 的特定列的类型更改为分类类型。

朱莉娅

# Changing the column A to categorical
categorical!(df, :A)

如果我们不指定列,则具有 AbstractString 类型的列将更改为分类。通过将 compress 关键字函数等同于 true,我们可以将函数应用于所有列。

朱莉娅

# Changing columns to categorical type
categorical!(df, compress=true)

我们可以使用eltype()函数检查 DataFrame 列的类型。

朱莉娅

# Displaying column types
eltype.(eachcol(df))