一、數據描述
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個項目的員工離職率最低;
完成項目數,每月平均工作時間,績效評估有正相關關系。意味着你工作越多,得到的評價就越高;
離職率、滿意度與薪酬呈負相關關系。這意味着較低的滿意度和工資產生了較高的離職率;
優秀員工看中的是良好的待遇,和更好的職業發展,這些因素都直接影響員工的主觀感受,公司給予了員工高的評價,但沒有相應轉化到薪資和升職的變量中,即使一部分離職的優秀員工給予了公司不錯的滿意度,但依然不能阻擋他們會追尋更好的工作機會。
