📜  Julia 中数据的分类表示

📅  最后修改于: 2021-11-25 04:37:53             🧑  作者: Mango

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
# Tesing 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)

分类函数

我们可以直接使用categorical函数而不是使用 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]

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

朱莉娅

# Tesing 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 类型的列将更改为 categorical。通过将 compress 关键字函数等同于 true,我们可以在所有列上应用该函数。

朱莉娅

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

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

朱莉娅

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