kaggle:員工離職情況分析(R語言)

此數據來源Kaggle,只涉及特徵工程沒有預測,所以還是很適合新手來做的,可以重點練習ggplot2和其他數據處理函數。附鏈接,有興趣的小夥伴可以一起做做:)

kaggle.com/ludobenistan

導入數據:nHR<-read.csv(file.choose(),stringsAsFactors=F)n

查看數據結構:

> str(HR)ndata.frame:t14999 obs. of 10 variables:n $ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...n $ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...n $ number_project : int 2 5 7 5 2 2 6 5 5 2 ...n $ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...n $ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...n $ Work_accident : int 0 0 0 0 0 0 0 0 0 0 ...n $ left : int 1 1 1 1 1 1 1 1 1 1 ...n $ promotion_last_5years: int 0 0 0 0 0 0 0 0 0 0 ...n $ sales : chr "sales" "sales" "sales" "sales" ...n $ salary : chr "low" "medium" "medium" "low"n

? satisfaction_level : 滿意度

? last_evaluation : 績效評估

? number_project : 完成項目數

? average_montly_hours : 平均月度工作時間

? time_spend_company : 服務年限

? Work_accident : 是否有工傷

? left : 是否離職

? promotion_last_5years: 過去5年是否有升職

? sales : 工作部門

? salary:薪資水平

變數名稱太長了,我們將這些名稱簡化以下:

將變數重命名:nlibrary(dplyr)nHR<-rename(HR,satisfaction=satisfaction_level,evaluation=last_evaluation,project=number_project,avghours=average_montly_hours,timespend=time_spend_company,accident=Work_accident,promotion=promotion_last_5years,dept=sales)n

查看有沒有缺失值:

> sum(is.na(HR))n[1] 0 n

沒有缺失值的數據幾乎可以直接拿來用哈!

將salary中的字元轉換成數字,且將low記為1,medium記為2,high記為3

> HR$salary[HR$salary=="low"]<-"1"n> HR$salary[HR$salary=="medium"]<-"2"n> HR$salary[HR$salary=="high"]<-"3"n

查看相關性:

> library(corrplot)n> HR2<-HR[-9]#先將字元型的部門變數減去#n> corrplot.mixed(cor(HR2))n> corrplot(cor(HR2),type="upper",method = "circle",tl.pos = "tl",tl.offset = 1,tl.srt = 0)n> corrplot(cor(HR2),add=T,type="lower",method = "number",col="red",diag=F, tl.pos ="n",cl.pos ="n")n

從圖中可以看到,與離職相關的因素依次是滿意度(-0.39)薪資(-0.16),工傷(-0.15),

工作年限(0.14),工作時間(0.07),升職(-0.06)完成項目(0.02),績效(0.01)。

以為這樣就可以結束了咩?嘿嘿。。。。

too young too naive:-P

  • 滿意度(satisfaction)與離職率的關係

ggplot(HR,aes(x=satisfaction,fill=left ))+geom_histogram(binwidth =0.02)+labs(title="滿意度與離職率的關係")n

從圖中可以看出,大部分離職人員滿意度都在0.1以下,滿意度在0.3-0.5之間的離職人數次之,滿意度在0.7-0.9的離職人員最少。

  • 薪資(salary)與離職率的關係:

ggplot(HR,aes(x=salary,y=..count..,fill=left ))+geom_bar(stat = "count",position = "stack")+labs(title="薪資與離職率的關係")+geom_text(stat="count",aes(label=..count..),position=position_stack(vjust=0.3))n

收入不到位在離職原因中也占很大比例,圖中明顯低收入員工離職率更高,差不多佔三分之一,而反觀高收入員工,離職人數少的可憐。

  • 工傷(accident)與離職率的關係:

ggplot(HR,aes(x=accident,y=..count..,fill=left ))+geom_bar(stat = "count",position = "stack")+labs(title="工傷與離職率的關係")+geom_text(stat="count",aes(label=..count..),position=position_stack(vjust=0.3))n

從圖中可以看到,工傷雖然是導致離職的一個因素,但並不是主因。

  • 工作年限(timespend)與離職率的關係:

> ggplot(HR,aes(x=timespend,y=..count..,fill=left ))+geom_bar(stat = "count",position = "stack")+labs(title="工傷與離職率的關係")+geom_text(stat="count",aes(label=..count..),position=position_stack(vjust=0.3))+scale_x_continuous(expand=c(0,0),breaks = c(1,2,3,4,5,6,7,8,9,10),labels = c(1,2,3,4,5,6,7,8,9,10))n

從圖中可以看到工作3-5年是離職的高發期,巧合的是很多公司招聘的時候也都要求3-5年的工作經驗。。。

有沒有想到什麼?

  • 月均工作時間(vghours)與離職率的關係:

ggplot(HR,aes(x=avghours,colour=left ))+geom_line(stat="bin",binwidth_=5)+labs(title="月均工作時間與離職率的關係")n

在相關性圖中我們看到離職率與月均工作時間是很弱的正相關(0.07)關係,在此線圖中可以看出藍色線在120~160和215~280達到高峰,即對離職影響最明顯。

  • 升職(promotion)對離職率的影響:

HR$promotion<-as.factor(HR$promotion)nggplot(HR,aes(x=promotion,y=..count..,fill=left ))+geom_bar(stat = "count",position = "stack")+labs(title="升職與離職率的關係")+geom_text(stat="count",aes(label=..count..),position=position_stack(vjust=0.8))n

X軸中0代表近五年沒有升職,1代表有升職。這是比較明顯的負相關關係,沒有升職記錄的員工流失比率將近四分之一,而有升職的離職率。。。。幾乎看不到哇!

看來通過升職對員工進行激勵也是很有效的保留人才的措施啊。

後面兩項完成項目數(project)和績效(evaluation)由於相關性太弱(分別只有0.02,0.01)不做分析。

  • 下面看下各部門的離職情況:

> ggplot(HR,aes(x=dept,fill=left))+geom_bar(position = "fill")+labs(title="部門與離職率的關係")n

> HR$dept<-as.factor(HR$dept)n> ggplot(HR,aes(x=dept,y=..count..,fill=left ))+geom_bar(stat = "count",position = "stack")+labs(title="部門與離職率的關係")+geom_text(stat="count",aes(label=..count..),position=position_stack(vjust=0.5))n

就比率而言,各部門離職率差不多,其中而流失率最低的是management和RandD。。。是不是可以理解為權利在員工決定留去的時候也扮演的一定的角色呢?

總結:

相關性圖中就以說明滿意度是影響最大的因素,那麼影響滿意度的又是什麼呢?不難看出是績效(0.11)和完成項目數(-0.14),這兩項最然對離職影響很小卻直接影響了滿意度,績效打評對滿意度有正向作用,而完成項目數姑且理解為工作量吧,對滿意度的影響是負面的,結合工作年限,工作時間,升職以及工作部門,我們可以發現在薪資不高工作量大的前提下,公司給予員工正向的激勵也不夠(比如績效打評,升職,給予員工一定權力)。要改善這種情況除了多發錢以外,多給員工一些正面回饋也有助於降低離職率。

推薦閱讀:

SparkSQL數據分析項目---性能調優
【文本分析】利用jiebaR進行中文分詞
打造自身長板- 學習數據分析,實現轉型之路(第一篇)
【客戶案例】脈車人CRM的選擇:兩周內打造決策分析能力
SparkSQL數據分析項目---數據可視化

TAG:数据分析 | 学习方法 | 大数据 |