Python数据挖掘学习11复合分析方法(总)

之前博客将各个小节分开发现有些不合理,故以后尽可能同一内容将总结在一篇内。

一、交叉分析

Python数据挖掘学习11复合分析方法(总)

(仅仅横向、纵向分析,会忽略数据之间的关系,导致数据失真)

     例:查看各个部门离职率之间是否存在差异

     利用独立t分布进行检验。

效果图:Python数据挖掘学习11复合分析方法(总)Python数据挖掘学习11复合分析方法(总)

                    (颜色越深,越接机0,说明和离职率之间没关系)

代码如下(备注很详细):

#实例:查看各个部门离职率之间是否有明显差异
#使用独立t检验方法,两两间求t检验统计量并求出p值,得到各个部门离职分布

import pandas as pd
import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns
#设置图形的字体为1.5倍
sns.set_context(font_scale=1.5)
df = pd.read_csv("/Users/ren/PycharmProjects/untitled7/data/HR.csv")
#按部门分组,用indices得到索引
dp_indices = df.groupby(by="department").indices
#print(dp_indices)
#关注离职率
sales_values = df["left"].iloc[dp_indices["sales"]].values
technical_values = df["left"].iloc[dp_indices["technical"]].values
#打印p统计量
print(ss.ttest_ind(sales_values,technical_values))
#只打印p统计量
print(ss.ttest_ind(sales_values,technical_values)[1])

#两两求p值,热力图
#取出indices的keys
dp_keys = list(dp_indices.keys())
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值小于0.05,直接赋值为黑
       if p_value<0.05:
           dp_t_mat[i][j]=-1
       else:
           dp_t_mat[i][j] = p_value
#print(dp_t_mat)
#颜色越深,越接机0,说明和离职率之间没关系
sns.heatmap(dp_t_mat,xticklabels=dp_keys,yticklabels=dp_keys)
plt.show()

#透视表,index横坐标,columns列坐标,aggfunc聚合方法,0代表否,1代表是
piv_tb = pd.pivot_table(df,values="left",index=["promotion_last_5years","salary"],columns=["Work_accident"],aggfunc=np.mean)
#颜色越深,越接机0,说明和离职率之间没关系
sns.heatmap(piv_tb,vmin=0,vmax=1,cmap=sns.color_palette("Reds"))
plt.show()

 

二、因子分析

三、分组与钻取

有两种含义:第一种:顾名思义,对数据进行分组后再进行比较。第二种:根据数据的特征,将数据进行切分,分成不同的组,使组内成员尽可能靠拢,组间成员尽可能远离。

分类、聚类以后学。

常用手段:钻取

钻取:改变维的层次,变换分析的粒度

钻取分为:向上钻取,向下钻取。

离散属性分组比较容易,连续属性需要先离散化。

离散化之前,需要先观察数据有没有明显分隔(一阶差分)或者拐点(二阶差分)---》可以直接使用

也可以使用聚类的方法进行连续分组。

不存度(gin系数i):Python数据挖掘学习11复合分析方法(总)

(D为目标属性,例如是否离职,Ck为比较属性)

例:Python数据挖掘学习11复合分析方法(总)

则:Python数据挖掘学习11复合分析方法(总)

Python数据挖掘学习11复合分析方法(总)Python数据挖掘学习11复合分析方法(总)

(图二中有两个明显拐点,可以根据拐点进行分组)

代码如下:

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("/Users/ren/PycharmProjects/untitled7/data/HR.csv")
#离散值:观察工资和离职率,柱状图
#属性hue,向下根据部门钻取分组
sns.barplot(x="salary",y="left",hue="department",data=df)
plt.show()

#连续值:根据满意度观察
sl_s = df["satisfaction_level"]
sns.barplot(list(range(len(sl_s))),sl_s.sort_values())
#根据拐弯的点进行分组
plt.show()

四、相关分析

定义:衡量两组数据或者两组样本,分布趋势或者变化趋势的分析方法,

最常用项关系数来衡量。

相关系数Python数据挖掘学习11复合分析方法(总)

使用相关系数衡量连续属性相关性:

Python数据挖掘学习11复合分析方法(总)

import pandas as pd
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns
import math
sns.set_context(font_scale=1.5)
df = pd.read_csv("/Users/ren/PycharmProjects/untitled7/data/HR.csv")
#连续情况下:
#表里有很多离散属性,计算相关性会自动去除离散属性
sns.heatmap(df.corr(),vmin=-1,vmax=1,cmap=sns.color_palette("RdBu",n_colors=128))
plt.show()

离散属性相关性的衡量:

特例:二类离散属性(只有0,1)相关性分析,可以皮尔逊相关系数来直接衡量大小。

多类离散属性比较麻烦,如果都是定序数据(可以转换为0、1、2、3等)进行比尔逊相关系数进行计算(会有一定的失贞)

更为一般的,可以使用熵进行离散属性的相关系数计算

Python数据挖掘学习11复合分析方法(总)

 

五、聚类分析

六、回归分析