import pandas as pd
import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns
#交叉分析
df = pd.read_csv('HR_comma_sep.csv')
dp_indices = df.groupby(by="sales").indices#全部求均值,根据sales列进行分组。根据indices属性,求分组之后的索引
sales_values =df["left"].iloc[dp_indices["sales"]].values #取出离职率,取出seles。 iloc是取几行,loc是取到第几行。sales存在的left都需要选取
technical_values =df["left"].iloc[dp_indices["technical"]].values#取left 的前几行,值为分组后technical的索引值
# print(ss.ttest_ind(sales_values,technical_values))#打印P值统计量
#两个两个求p值
dp_keys =list(dp_indices.keys())#取出dp_indices的key,即所有索引值
dp_t_mat = np.zeros([len(dp_keys),len(dp_keys)])#初始化一个矩阵
for i in range(len(dp_keys)):#遍历索引长度
for j in range(len(dp_keys)):#遍历索引长度
p_value = ss.ttest_ind(df["left"].iloc[dp_indices[dp_keys[i]]].values
,df["left"].iloc[dp_indices[dp_keys[j]]].values)[1]#计算P的独立检验值
if p_value <0.05:#使图像更明显
dp_t_mat[i][j] = -1#当值小于0.5,说明影响不大,直接设置为-1
else:
dp_t_mat[i][j] = p_value #赋值
sns.heatmap(dp_t_mat,xticklabels=dp_keys,yticklabels=dp_keys)#绘制图像
plt.show()
结果:
2.透视表。
import pandas as pd
import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns
#透视表
sns.set_context(font_scale=1.5)#设置字体
df = pd.read_csv('HR_comma_sep.csv')
#查找行为promotion_last_5years和salary,列为Work_accident,聚合函数为np.mean。分析离职率与5年来的事故率和晋升之间的联系。
piv_tb = pd.pivot_table(df,values="left",index=['promotion_last_5years','salary']
,columns=['Work_accident'],aggfunc=np.mean)
sns.heatmap(piv_tb,vmin =0,vmax=1,cmap=sns.color_palette("Reds",n_colors=256))
#把图画出来,最大值我为1,最小值为0。cmap设置颜色。
plt.show()
结果: