分类数组概述

分类数组是定性数据数组,其值取自离散数据、非数值数据组成的有限集。分类数组的元素可以是有序的等级数据,如“很小”、“小”、“中”、“大”,或“少年”、“青年”、“中年”、“老年”等;也可以是无序的定性数据,如“红”、“橙”、“黄”、“绿”等。本节主要介绍分类数组的创建、分类值的查看和分类数组是否有序。[大谦MATLAB,dqmatlab点com]

创建分类数组

使用分类数组,首先要创建它,MATLAB和Python的pandas包都提供了创建分类数组的函数。

【MATLAB】

MATLAB用categorical函数创建分类数组。在命令窗口中输入:

code.matlab
>> S=categorical({'XL';'L';'M';'S';'M';'L';'XXL'})
S=
  7×1 categorical 数组
     XL
     L
     M
     S
     M
     L
     XXL

【Python】

Python中使用pandas包的Categorical函数直接创建分类数组,例如:

code.python
>>> import pandas as pd
>>> cat=pd.Categorical(['XL', 'L', 'M', 'S', 'M', 'L', 'XXL'])
>>> cat
['XL', 'L', 'M', 'S', 'M', 'L', 'XXL']
Categories(5, object): ['L', 'M', 'S', 'XL', 'XXL']

可以用Series函数将分类数组转换为Series对象。

code.python
>>> s=pd.Series(cat)
>>> s
0     XL
1      L
2      M
3      S
4      M
5      L
6    XXL
dtype: category
Categories(5, object): ['L', 'M', 'S', 'XL', 'XXL']

查看分类值

分类数组中的分类,可以用数组中的唯一元素值表示。MATLAB和Python的pandas包都提供了相应的函数进行查看。

【MATLAB】

MATLAB用categories函数查看分类数组的类别。

code.matlab
>> S=categorical({'XL';'L';'M';'S';'M';'L';'XXL'})
>> categories(S)
ans =
  5×1 cell 数组
    {'L'  }
    {'M'  }
    {'S'  }
    {'XL' }
    {'XXL'}

【Python】

Python中使用pandas包中分类数组对象的categories属性进行查看。

code.python
>>> import pandas as pd
>>> cat=pd.Categorical(['XL', 'L', 'M', 'S', 'M', 'L', 'XXL'])
>>> cat.categories
Index(['L', 'M', 'S', 'XL', 'XXL'], dtype='object')

有序分类数组

分类数组中的元素如果是有序的等级数据,可以在使用categorical(Categorical)函数创建分类数组时指定相关参数的值,指定数组为有序。

【MATLAB】

下面先创建一个数值数组:

code.matlab
>> A=[4 3 2 1 2 3 5]
A =
     4     3     2     1     2     3     5

然后用categorical函数将A转换为有序分类数组,其中1到5分别用类别'S'、'M'、'L'、'XL'和'XXL'表示。将categorical函数中Ordinal参数的值设置为true。

code.matlab
>> valueset=[1:5];
>> catnames={'S','M','L','XL','XXL'};
>> B=categorical(A,valueset,catnames,'Ordinal',true)
B=
  1×7 categorical 数组
     XL      L      M      S      M      L      XXL

用iscategorical函数可以确定输入是否为分类数组,用iscategory函数可以测试分类数组的类别。

【Python】

类似地,Python中将一个分类数组设置为有序,可在使用Categorical函数创建分类数组时将ordered参数的值设置为True。

code.python
>>> import pandas as pd
>>> size_categories=['S', 'M', 'L', 'XL', 'XXL']
>>> cat=pd.Categorical(['XL','L','M','S', 'M', 'L', 'XXL'], categories=size_categories, ordered=True)
>>> cat
['XL', 'L', 'M', 'S', 'M', 'L', 'XXL']
Categories(5, object): ['S' < 'M' < 'L' < 'XL' < 'XXL']

可见,将分类数组设置为有序后,Categorical函数返回的分类数组的类别显示部分会有一个分类值的排序。