对于数据进行离散化和面元划分的前提条件是:连续变化的数据

从运行的结果中可以看到,pandas返回的是每一个数据所在的区间范围以及数据的长度,还返回一个特殊的Categories对象,包含了分组的数量以及不同分类的名称。





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


源码:
# coding: utf-8
# In[1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
# In[2]:
# 使用pandas的cut函数划分年龄组
ages = [20,22,25,27,21,23,37,31,61,45,32]
bins = [18,25,35,60,100]
cats = pd.cut(ages,bins)
print(cats)
# In[3]:
# 使用codes为年龄数据进行标号
cats.codes
# In[4]:
# 统计落在各个区间的值数量
pd.value_counts(cats)
# In[5]:
# 设置区间数学符号
pd.cut(ages,bins,right=False)
# In[6]:
# 设置自己想要的面元名称
group_names = ['Youth','YoungAdult','MiddleAged','Senior']
pd.cut(ages,bins,labels=group_names)
# In[7]:
# 向cut传入面元的数量,则会根据数据的最小值和最大值计算等长面元
data = np.random.rand(20)
pd.cut(data,4,precision=2) # precision=2表示设置的精度
# In[8]:
# qcut可以根据样本分位数对数据进行面元划分
data = np.random.randn(1000) # 正态分布
cats = pd.qcut(data,4) # 按四分位数进行切割
print(cats)
# In[9]:
pd.value_counts(cats)
# In[10]:
# 通过指定分位数(0到1之间的数值,包含端点)进行面元划分
pd.qcut(data,[0,0.1,0.5,0.9,1])
网友评论