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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。