最近一直都在读唐亘老师的《精通数据科学:从线性回归到深度学习》,所以代码都是从这本书上来的,往后看的时候,再回忆一下前面作图用的函数,发现自己还是一知半解,所以今天就来记录一下pandas库里的crosstab交叉
import pandas as pd
import numpy as np
#用seed固定生成的随机数
np.random.seed(1223)
#生成0到99中20个随机整数
a=np.random.randint(0,100,20)
#创建DataFrame并把数据a作为第一列数据录入
data=pd.DataFrame(a,columns=['a'])
#增加一列label是从0到1的20个随机整数
data['label']=np.random.randint(0,2,20)
#把第一列a按照最小值,25%分位数,50%分位数,75%分位数到最大值分为4份
cross_data1=pd.qcut(data['a'],[0,0.25,0.5,0.75,1])
#用crosstab对数据进行分类汇总
cross1=pd.crosstab(cross_data1,data['label'])
print(cross1)
显示结果如下
label 0 1
a
(16.999, 35.5] 2 3
(35.5, 46.5] 3 2
(46.5, 67.0] 4 1
(67.0, 99.0] 2 3
还有就是我觉得最神奇的部分画图
import matplotlib.pyplot as plt
#对数据cross1进行归一化,axis=0表示对行数据操作
cross_norm=cross1.div(cross1.sum(1).astype(float),axis=0)
cross_norm.plot(kind='bar')
plt.show()
交叉报表
还有一个马赛克图,props是设置两种类别的颜色,stack()我认为是堆积图的意思,没有的话就会报错:You must pass an index if data is a DataFrame
from statsmodels.graphics.mosaicplot import mosaic
props = lambda key: {"color": "0.45"} if '0' in key else {"color": "#C6E2FF"}
mosaic(cross1[[0, 1]].stack(), properties=props)
马赛克交叉报表