python的等深分箱实例
背景
当前很多文章尝试过最优分箱,python上也有cut等方法进行等宽分箱。为了方便日后输出结果以及分箱要求。做一个简单的轮子以供大家日后使用。很多能用其他轮子的地方也没有多余出力,也不托大会比别人写的好。空间复杂度尽我所能。
方法展示
话不多说上代码。
以下为等深分箱以及encoding方法
#-*-coding:utf-8-*- """ CreatedonTueJan2917:26:382019 @author:DamomWCG """ classEqual_depth_box: defequal_box(list,bin_num): ''' param: list:youneedbinboxlist bin_num:youwantbinnum ''' bin_num=10 list.sort()#needsortcanreplacebyothers list_2=list.copy() all_num=len(list_2) bin_sep=all_num/bin_num bin_sep=int(bin_sep) bin_list=[] foriinrange(1,bin_num): bin_dict={} bin_dict=i*bin_sep bin_list.append(bin_dict) bin_real_list=[] foriinbin_list: #print(i) bin_real_dict={} bin_real_dict=list[i] bin_real_list.append(bin_real_dict) returnbin_real_list defreplace_box(list_1,replace_list): ''' param: list_1:youneedbinlist replace_list:fromequalbox,replacetheoriginallist ''' importpandasaspd list_max=max(list_1) list_min=min(list_1) replace_list.insert(0,list_min-1)#insertstart replace_list.append(list_max+1)#insertend list_2=pd.cut(list_1,bins=replace_list, labels=range(len(replace_list)-1)).tolist() returnlist_2 if__name__=='__main__': importrandom list_1=random.sample(range(1000),134) print(list_1.sort()) print('real_list:{}'.format(list_1[0:50])) replace_list=bin_class.equal_box(list_1,10) list_2=bin_class.replace_box(list_1,replace_list) print('encode_list:{}'.format(list_2[0:50]))
原始git地址
https://github.com/DamonWCG/Equal_depth_box/blob/master/Equal_depth_box
使用案例
本案例数据为,我进行过一步的最优分箱,来做一步等深分箱来进行横向对比。
原始数据形式
具体案例
#-*-coding:utf-8-*- """ CreatedonWedJan3016:17:192019 @author:DamonWCG """ fromEqual_depth_boximport* importpandasaspd df=pd.read_csv('test.csv',encoding='gbk') df.columns ####需要分箱的列 list_1=df['deal_city_encoding'].tolist()#本方法是针对于list,所以对于series需要进行变换 ####需要分箱的个数 replace_list=Equal_depth_box.equal_box(list_1,5) ####替代的名称 ##因为列表排序所以需要重新排序对齐,这里我有空再想想其他办法 df.sort_values(by="deal_city_encoding",inplace=True) list_2=Equal_depth_box.replace_box(list_1,replace_list) df['deal_city_bin_encoding']=list_2 df.to_csv('df.csv',encoding='gbk',index=False)
本方法现阶段encoding形式为数字型。
分箱最终结果形式
需要注意,我得列表形式重新decode时候需要按照当前排序数组重新编码,这个问题我年后会解决。
以上这篇python的等深分箱实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。