python數據分析之人力資源分析


一、數據描述

1.數據字段及解釋

  • left:是否離職
  • satisfaction_level:滿意度
  • last_evaluation:績效評估
  • number_project:完成項目數
  • average_montly_hours:平均每月工作時間
  • time_spend_company:為公司服務的年限
  • work_accident:是否有工作事故
  • promotion:過去5 年是否有升職
  • salary:薪資水平

2.導入數據

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('I:\HR_comma_sep.csv')

 

 共有14999條數據,這里代碼默認展示前五行

 

 

##看一下整體數據,大概有76%的人留下了,24%的人離開了
left_rate=df.left.value_counts()/14999
0    0.761917
1    0.238083
Name: left, dtype: float64

二、提出問題

1、失去優秀員工會讓公司產生多大損失?招新人和優秀老員工之間的成本與變現孰輕孰重?

2、什么原因產生了較低的滿意度?

3、為什么離開的員工平均比沒有離開的員工得到更高的評價,甚至是項目數量的增加?低評價的員工不應該更傾向於離開公司嗎?

三、數據清洗和預處理

##檢查是否有缺失值
df.isnull().any()
satisfaction_level       False
last_evaluation          False
number_project           False
average_montly_hours     False
time_spend_company       False
Work_accident            False
left                     False
promotion_last_5years    False
sales                    False
salary                   False
dtype: bool
##適當改名,方便選取列
df = df.rename(columns={'satisfaction_level': 'satisfaction_level', 
                        'last_evaluation': 'last_evaluation',
                        'number_project': 'number_project',
                        'average_montly_hours': 'average_montly_hours',
                        'time_spend_company': 'time_spend_company',
                        'Work_accident': 'Work_accident',
                        'promotion_last_5years': 'promotion',
                        'sales' : 'department',
                        'left' : 'left'
                        })
##由於“部門”和“薪金”的功能是明確的,我將把它轉換為數值,以便更好地分析。
##分別查看department列和salary列唯一值有多少個
df1=pd.Series(df['department']).unique()
df2=pd.Series(df['salary']).unique()
##把兩列的值轉化為數值
df['department'].replace(list(pd.Series(df['department']).unique()),np.arange(10),inplace=True)
df['salary'].replace(list(pd.Series(df['salary']).unique()),[0,1,2],inplace=True)
##把left列移到表的前面,方便分析
front=df['left']
df.drop(labels='left',axis=1,inplace=True)
df.insert(0,'left',front)
df.head()

四、數據可視化

 1.相關性分析

sns.heatmap(corr,xticklabels=corr.columns.values,yticklabels=corr.columns.values);
sns.plt.title('Heatmap of Correlation Matrix')

(+)number_project&average_montly_hours&last_evaluation

(-)left&satisfaction_level&salary

從熱圖上看,有大的正(+)相關性的有,完成項目數(number_project)和平均月度工作時間(average_montly_hours),它們分別和績效評估有較大的正相關,這可能意味着花了更多時間和做了更多項目的員工得到了高度評價。但是,績效評估與響應變量轉換之間幾乎沒有相關關系,也就是說績效評估的高度評價沒有轉換到薪資水平和升職上來,只是得到了好的評價而已,對於負(-)關系,離職率、滿意度和薪水是高度相關的。我們假設員工在不太滿意投入產出比的情況下往往會離開公司。

2.變量分析

##department  vs  left
depart_left_table=pd.crosstab(index=df['department'],columns=df['left'])
##職位:'sales', 'accounting', 'hr', 'technical', 'support', 'management','IT', 'product_mng', 'marketing', 'RandD'
depart_left_table.plot(kind='bar',figsize=(5,5),stacked=True)
##department  vs  salary
depart_salary_table=pd.crosstab(index=df['department'],columns=df['salary'])
depart_salary_table.plot(kind="bar",figsize=(5,5),stacked=True)
##salary  vs left
salary_left_table=pd.crosstab(index=df['salary'],columns=df['left'])
salary_left_table.plot(kind='bar',figsize=(5,5),stacked=True)
##promotion  vs  left
promotion_left_table=pd.crosstab(index=df['promotion'],columns=df['left'])
promotion_left_table.plot(kind='bar',figsize=(5,5),stacked=True)
##number_project  vs  left
project_left_table=pd.crosstab(index=df['number_project'],columns=df['left'])
project_left_table.plot(kind='bar',figsize=(5,5),stacked=True)
df.loc[(df['left']==1),'number_project'].plot(kind='hist',normed=1,bins=15,stacked=False,alpha=1)
##time_spend_company  vs  left
company_left_table=pd.crosstab(index=df['time_spend_company'],columns=df['left'])
company_left_table.plot(kind='bar',figsize=(5,5),stacked=True)
df.loc[(df['left']==1),'time_spend_company'].plot(kind='hist',normed=1,bins=10,stacked=False,alpha=1)
##average_montly_hours  vs  left
hours_left_table=pd.crosstab(index=df['average_montly_hours'],columns=df['left'])
fig=plt.figure(figsize=(10,5))
letf=sns.kdeplot(df.loc[(df['left']==0),'average_montly_hours'],color='b',shade=True,label='no left')
left=sns.kdeplot(df.loc[(df['left']==1),'average_montly_hours'],color='r',shade=True,label='left')
##last_evaluation  vs  left
evaluation_left_table=pd.crosstab(index=df['last_evaluation'],columns=df['left'])
fig=plt.figure(figsize=(10,5))
left=sns.kdeplot(df.loc[(df['left']==0),'last_evaluation'],color='b',shade=True,label='no left')
left=sns.kdeplot(df.loc[(df['left']==1),'last_evaluation'],color='r',shade=True,label='left')
##satisfaction_level  vs  left  
satis_left_table=pd.crosstab(index=df['satisfaction_level'],columns=df['left'])
fig=plt.figure(figsize=(10,5))
left=sns.kdeplot(df.loc[(df['left']==0),'satisfaction_level'],color='b',shade=True,label='no left')
left=sns.kdeplot(df.loc[(df['left']==1),'satisfaction_level'],color='r',shade=True,label='left')
##last_evaluation  vs  satisfaction_level
df1=df[df['left']==1]
fig, ax = plt.subplots(figsize=(10,10))
pd.scatter_matrix(df1[['satisfaction_level','last_evaluation']],color='k',ax=ax)
plt.savefig('scatter.png',dpi=1000,bbox_inches='tight')
  • department vs left

職位分別是:'sales', 'accounting', 'hr', 'technical', 'support', 'management','IT', 'product_mng', 'marketing', 'RandD'

公司職位基本對應業務支持,技術,和銷售。大多數部門的離職率相似,也就管理層和研發低一些,但管理層離職率最低。這可能意味着地位較高的人傾向於不離開。

 

 

 

  • department vs salary

可以看出管理層的薪資最高,離職率最低

 

 

 

  • salary vs left

很形象的看出,離職的員工薪資幾乎都在低到中等水平,很少有高新的員工離開公司。

 

 

 

  • promotion vs left

在離職的員工中幾乎都沒有得到升職。

  • number_project vs left

本圖顯示超過一半的員工只有2個項目就離開了公司,但同樣有從4-7個項目統計的員工離開。我們可以猜測一下,也許這意味着,項目數量在2或更少的員工工作不夠,或者沒有被高度重視,從而離開了公司?6個項目以上員工會過度勞累,從而離開公司?3個項目的員工離職率最低。

 

 

 

 

 

 

  • time_spend_company vs left

離職員工在離職前大部分在公司已經工作了3-6年,在公司工作7-10年的員工沒有人離開。

 

 

 

  • average_montly_hours vs left

是一個很明顯的雙峰分布,說明員工平均每月工作時間少的(低於150小時)和工作時間多的(高於250小時)的員工離職率最高。

所以一般離開公司的員工要么工作時間少的,要么過度工作的。

  • last_evaluation vs left

又是一個雙峰分布,表現糟糕的和表現出色的出現了離職的兩個峰值,根據前邊的分析,效績評估出色的員工,公司沒有相應的轉化到升職和薪資上。0.6-0.8之間有比較好的員工留存。

 

 

 

  • satisfaction_level vs left

出現了三個峰值,滿意度低於0.1的員工基本離職,滿意度在0.3-0.5之間離開的員工又到達一個峰值,滿意度在0.8左右時,又出現了一個峰值,這些是滿意度較高的員工,這些員工可能找到了更好的工作機會,離職不是對公司不滿,這些員工對公司是有比較高的滿意度的。

 

 

 

  • last_evaluation vs satisfaction_level

在績效評估與滿意度的散射矩陣中,可以看到有三個不同的集群。

集群1:滿意度低於0.2,績效評估大於0.75,這可以很好地表明離開公司的員工都是好員工,但對自己的工作感到不滿意,當你受到高度評價的時候,這個集群應該代表着“過度勞累”的員工。

集群2:滿意度在0.35~0.45之間,績效評估在0.58以下,這可以被看作是雇員受到了不太好的評價,這可能意味着這些員工表現不好,所以員工自己的滿意度也不好,這個集群代表着表現不佳的員工。

集群3:滿意度在0.7~1之間,評價大於0.8,這可能意味着這個集群的員工是最理想的,他們熱愛他們的工作,公司對他們的表現評價很高,這個類別的員工離開可能是因為他們找到了另一個工作機會。

 

 

 五、總結

員工離職概述:

離職員工工作時間大部分是~6hours /天(工作)和~10小時/天(勞累);

大部分離職員工薪資都在low~medium這一檔,薪資水平低;

離職員工,幾乎都沒有得到升職;

大多數離職員工的評價分數在0.6以下和0.8以上;

離職員工大多數有2個項目,但同樣有4-7個項目的員工離開,3個項目的員工離職率最低;

完成項目數,每月平均工作時間,績效評估有正相關關系。意味着你工作越多,得到的評價就越高;

離職率、滿意度與薪酬呈負相關關系。這意味着較低的滿意度和工資產生了較高的離職率;

優秀員工看中的是良好的待遇,和更好的職業發展,這些因素都直接影響員工的主觀感受,公司給予了員工高的評價,但沒有相應轉化到薪資和升職的變量中,即使一部分離職的優秀員工給予了公司不錯的滿意度,但依然不能阻擋他們會追尋更好的工作機會。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM