离散化和面元划分(可以理解为划分段)

为了便于分析, 连续数据常常被离散化或拆分为“面元”(bin)。假设有一组人员数据, 而你希望将他们划分为不同的年龄组:

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

接下来将这些数据划分为“18到25”, 26-35, 35-60, 60以上几个面元。要实现该功能,需要pandas的cut函数:

cut

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

bins = [18, 25, 35, 60, 100]

cats = pd.cut(ages, bins)

print(cats)

 

pandas返回的是一个特殊的Categorical对象。你可以将其看作一组表示面元名称的字符串。实际上它含义一个表示不同分类名称的levels数组以

及一个为年龄数据进行标号的labels属性。, 以及各个阶段人的数量统计

特别注意,已经取消的levels,而且labels将被替换成codes

print(cats.labels)
print(cats.codes)
print(pd.value_counts(cats))

调整区间符号

 跟“区间”的数学符号一样, 圆括号表示开端, 而方括号表示闭端(包括)。哪边是闭端可以通过right=False进行修改:

自定义面元名称--可以结合value_counts使用

自定义面元名称, 将labels选项设置为一个列表或数组即可:

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

bins = [18, 25, 35, 60, 100]

print(pd.cut(ages, bins, labels=[i for i in "abcd"]))

 

 如果不确定面元切面怎么办

 如果向cut传入的是面元数量而不是确切的面元边界, 则它会根据数据的最小值和最大值计算等长面元。看例子, 分4组

data = np.random.rand(20)

ret = pd.cut(data, 4, precision=2)

print(ret)

 

 qcut 是一个非常类似于cut的函数, 它可以根据样本分位数对数据进行面元划分。

data = np.random.randn(1000)  #正泰分布

cats = pd.qcut(data, 4) #按四分位数进行切割

print(cats)
print(pd.value_counts(cats))

 感觉那里怪怪的,下面这个

 

 

posted @ 2017-03-10 17:42  我当道士那儿些年  阅读(984)  评论(0编辑  收藏  举报