Python练手,样本

发布时间:2019-08-16 10:57:15编辑:auto阅读(1830)

    import pandas as pd
    
    def getEmpDataFrame(num):
        
        '''创建一份可复用的数据,有一定的随机性和真实性'''
        
        #员工编号
        emp = [''] * num
        lenNum = len(str(num))
        for i in range(num):
            emp[i] = str(i+1).zfill(lenNum)
            
        #性别:男多女少
        sex = [1] * int(round(num*0.7)) + [0] * (num - int(round(num*0.7)))
        
        #年龄:年龄是平均分布的,相对来说男同事比女同事要大些
        age = [0] * num
        for i in range(num):
            if sex[i] == 1 :
                age[i] = 28 + i % 33
            if sex[i] == 0 :
                age[i] = 22 + i % 33
                
        #职级:越高级越罕有  与其他因素无关
        lvl = [0] * num
        for i in range(num):
            if lvl[i] ==0 and (i+1) % 33 == 0 :
                lvl[i] = 5 
                continue
            if lvl[i] ==0 and (i+1) % 23 == 0 :
                lvl[i] = 4
                continue
            if lvl[i] ==0 and (i+1) % 13 == 0 :
                lvl[i] = 3
                continue
            if lvl[i] ==0 and (i+1) % 3 == 0 :
                lvl[i] = 2
                continue
            lvl[i] = 1
            
        #入职年长:跟职级和年龄有关  #通常4年升1级  #年龄-最低年龄=可能最大的入职年长
        yrs = [0] * num
        for i in range(num):
            
            if sex[i] == 1 :
                if lvl[i] * 4 >= age[i] - 28 :
                    yrs[i] = age[i] - 28 
                else:
                    yrs[i] = lvl[i] * 4  
            if sex[i] == 0 :
                if lvl[i] * 4 >= age[i] - 22 :
                    yrs[i] = age[i] - 22 
                else:
                    yrs[i] = lvl[i] * 4 
        
        #学历:年龄小的平均学历相对高些,职级高的学历相对高些
        edu = [0] * num
        for i in range(num):
            if lvl[i] == 5 or lvl[i] == 4 :
                if age[i] < 40 :
                    edu[i] = 4 #年轻高级是博士
                else:
                    edu[i] = 3 #年老高级是硕士
            else:
                if age[i] < 40 :
                    edu[i] = 2 #年轻低级是大学
                else:
                    edu[i] = 1 #年老低级是大专
        
        #工资:规则计算 加上一点随机变化  在加上一点入职时长的倍数鼓励
        sal = [0.] * num
        for i in range(num):
            sal[i] = round( ( 3000 \
                              + yrs[i] * 200 + edu[i] * 1000 + ( lvl[i] - 1 ) * 3000 + sex[i] * 1000 \
                              + i % 7 * 300 ) \
                           * ( 1 + yrs[i] / 100 ) \
                           ,3)
        #离职风险:高低  #年轻大学生容易离职  #低学历大年龄且入职时间短容易被淘汰
        ris = [0] * num
        for i in range(num):
            if yrs[i] < 2 and age[i] < 35 and edu[i] == 2:
                ris[i] = 1
            if edu[i] == 1 and age[i] > 50 and yrs[i] < 5:
                ris[i] = 1
            
        df = pd.DataFrame({"sex":sex,
                           "age":age,
                           "lvl":lvl,
                           "yrs":yrs,
                           "edu":edu,
                           "sal":sal,
                           "ris":ris},
                          index = emp)
        return df
     
    # print(getEmpDataFrame(60))


关键字

上一篇: python中的logging

下一篇: Python 条件语句