DAY2:离职率预测(上)

人工智慧共创平台-离职率预测(上)

  • 资料来源

因为工作偶尔也会有闲暇时间,尤其我们是业务单位提出需求,我们才有专案做,所以呢闲暇时间我也不想浪费掉,我就找到了一个类似kaggle的平台,人工智慧共创平台,他也有练习场,里面有几个题目可以让各位小试身手。

於是我选择了员工离职率预测(资料连结),这是我第一次拿到资料後,从头到尾自己做,成绩如何就不要太在意啦,之後有时间会再继续调整把名次往上爬的。
但对於这个平台我必须说一下,这个离职率预测竟然没有资料栏位介绍!!!而他的栏位又有点看不懂,例如:

甚麽工作资历又分12345、训练时数又有ABC...等等,我是真的不太懂,但还是继续给他做下去,如果有大神看得懂可以留言帮我解释一下,我是真的想了解每个栏位的意思!


  • 拿到资料先观察资料型态

import pandas as pd
train = pd.read_csv('./train.csv')
test = pd.read_csv('./test.csv')

print(train.head(5))

查看前五笔资料。


可以看出来这份资料应该都帮我们处理过,但为确保里面资料都label过,我们还是来看看每个变数的值。

for i in train.columns:
    print(i)
    print(list(train[i].unique()))
    print("================================================")

因为变数很多,就截一部分就好,确定除了NA值外,没有别的文字了。

还可以看看叙述统计~

print(train.describe())

可以从中看到总笔数和平均值等等的数据,train资料集的总笔数是14392笔

接下来呢,我会针对NA值去做处理,先看每个变数的NA值总数。

train_na_sum = train.isna().sum()
print(train_na_sum)
print("===============================")
test_na_sum = test.isna().sum()
print(test_na_sum)
print("===============================")

可以发现train和test的最高学历毕业学校类别两个变数的NA值特别多,而其他的train是73个,test是18个。

train

test


  • 资料前处理

因为最高学历毕业学校类别两个变数的NA值占总笔数比例太高,我会直接删除此两个变数,而其他的变数我这边偷懒,则填入中位数。

注意喔,这里只是简单示范,但NA值有时候有它的意义,要严谨的话就必须检查,或许可以把它当作一类,而且这边大部分都是类别变数,多数作法会不太建议类别变数补值,又或者是可以在不影响原样本比例的情况下随机填补

对於NA值处理可以参考[这边]。(https://notesforai.blogspot.com/2018/05/05.html?m=1)

train = train.drop(columns=['最高学历','毕业学校类别'])
for i in train.columns:
        train[i] = train[i].fillna(train[i].median())

再执行一次看各个变数的NA值。

train_na_sum = train.isna().sum()
print(train_na_sum)
print("===============================")
test_na_sum = test.isna().sum()
print(test_na_sum)
print("===============================")

结果发现NA值都为0罗~

接着我们看看几个年份。

print(train['yyyy'].unique())

train资料集总共有4个年份,我们要预测test资料集的员工是否2018年有离职。

那会不会有比如说2016年没离职但2017年却就没有资料的员工呢?
我们来观察看看~

for i in train['PerNo'].unique():
    df = train[train["PerNo"] == i ]
    df_last = df.iloc[-1]
    if df_last["yyyy"] != 2017 and df_last.PerStatus == 0.0:
        train = train[~train["PerNo"].isin([i])]
        n += 1
    else:
        m += 1
print("留下员编数:" , m , "删除员编数:" ,n)

结果真的有阿,我把这些员工的资料都给删除掉,共留下4295个员工资料,总资料笔数剩下13870笔。


  • 今日小结

今天先到这边吧!明天再来介绍简单的资料视觉化及建模!

很多人拿到资料就很兴奋直接把资料丢进去建模,得到结果,NONONO~拿到资料一定要先剖析资料,虽然我也没怎麽剖析XDD。切记拿到资料後一定要先观察资料型态,做资料清洗的动作,再丢入建模型。

资料分析就像做菜一样,收集资料如同买菜,资料清洗如同是洗菜、切菜、备料,一定要准备、清洗好材料,才能让厨师做出一道完美的料理。

若有不够完善的地方,欢迎各位邦友留言补充和指教喔~要鞭的话鞭小力一点XDDD

参考文章:

缺失值处理 https://notesforai.blogspot.com/2018/05/05.html?m=1


<<:  Day04:原来早就在这里有共享经济了

>>:  Day 2 我要开始学了

[Day-28] Node.js (google api auth)

[Day28] 说明:google提供的帐号API 一、设定google console的oauth...

Golang - html template + wkhtmltopdf生成PDF

以前很菜的时候收过这个需求 真心很讨厌PDF,因为要自己算座标和设定一堆东西 後来这个需求就被弃置了...

13 | WordPress 清单区块 List Block

如果你平常要处理大量文书工作,应该对我们这次介绍的「项目符号和编号」并不陌生,这又另称为清单区块 ...

Day3|【Git】终端机常用基本指令 - Mac 作业系统为主

学习 Git 时,常常都是在终端机(Terminal)操作,虽然现在有很多图形介面工具(GUI,Gr...

第40天- 学习 DNS Server

进度 : 鸟哥的 Linux 私房菜 -- DNS Server 鸟哥的话 再强调一次,DNS 系统...