绩效管理是企业进行人力资源管理的重要内容之一,通过绩效考核发现员工在工作中存在的问题,并为员工解决这些问题,实现员工在工作能力上的提高,现实中企业一般对员工的考核指标较多,且把绩效结果反馈给员工时员工并不详细的知道自己和别人存在的差异,所以我们用聚类分析把员工进行分类,所谓的物以类聚,对不同群组的员工分类培训,不但降低了人事部门的工作量,也让员工可以看到自己和别人之间的差距,在聚类之前使用主成分分析是因为在指标复杂性和多样性存在的情况下,人为评价绩效时很难设定权重,主成分分析根据其算法特性,能克服一些主观设置造成的偏差,根据载荷矩阵系数大小判断不同主成分反应的主要问题,简而言之主成分就相当于对指标的聚类,同时也有降维作用,对主成分得分进行聚类更容易在大量复杂考核指标中发现员工在哪方面存在的不足。
python代码实现:
#读取数据
import pandasas pd
file ='C:/Users/gh/Desktop/02.xls'
data = pd.read_excel(file)
#缺失值处理
data.head()
explore = data.describe(percentiles=[],include='all').T
explore['null'] =len(data) - explore['count']
colrate = explore['null']/len(data)#纵向缺失值占比,因为评价公司,所以不用计算横向占比
#本节后面为了聚类,对缺失值占不作处理,仅删除占比超多80%的变量
#数据标准化
import numpyas np
b =list(np.std(data, ddof=1))
mu =list(data.mean())
for iin range(1,13):
for jin range(0,len(data.iloc[:,i])):
data.iloc[j,i] = (data.iloc[j,i]-mu[i-1])/b[i-1]
outputfile ='C:/Users/gh/Desktop/021.xls'
data.to_excel(outputfile,index=False)
#主成分分析
import pandasas pd
inputfile ='C:/Users/gh/Desktop/021.xls'
outputfile ='C:/Users/gh/Desktop/022.xls'
data46 = pd.read_excel(inputfile)
from sklearn.decompositionimport PCA
pca = PCA()
data = data46.iloc[:,1:13]
pca.fit(data)
pca.components_#返回模型的特征向量
ratio = pca.explained_variance_ratio_#返回个个成分的方差百分比
ratio*100
#保留五个主成分
pca = PCA(5)
pca.fit(data)
low_d = pca.fit_transform(data)#用data来训练PCA模型,同时返回降维后的数据
pd.DataFrame(low_d).to_excel(outputfile)
#聚类分析
from sklearn.clusterimport KMeans
from scipy.spatial.distanceimport cdist
import matplotlib.pyplotas plt
x = pd.read_excel(outputfile)
#判断聚类个数
from sklearn.clusterimport KMeans
from scipy.spatial.distanceimport cdist
K =range(1,10)
meandistortion = []
for kin K:
kmeans = KMeans(n_clusters = k)
kmeans.fit(x)
meandistortion.append(
(sum(
np.min(
cdist(x,kmeans.cluster_centers_,'euclidean'),axis =1))) /x.shape[0])
plt.subplot(2,1,2)
plt.plot(K,meandistortion,'bx-')
plt.xlabel('k')
plt.ylabel(u'平均畸变程度',fontproperties = font)
plt.title(u'用肘部法则确定的最佳k值',fontproperties = font)
#聚类效果评估
from sklearn.clusterimport KMeans
from sklearnimport metrics
for tin test:
kmeans_model = KMeans(n_clusters=t).fit(x)
print(u'K=%s,轮廓系数 = %.03f' % (t, metrics.silhouette_score(
x, kmeans_model.labels_, metric='euclidean')))
#由上图可知:分为3类
kmeans_model = KMeans(n_clusters=3).fit(x)
kmeans_model.cluster_centers_#查看聚类中心
kmeans_model.labels_#类别标签