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