python的等深分箱实例


Posted in Python onNovember 22, 2019

背景

当前很多文章尝试过最优分箱,python上也有cut等方法进行等宽分箱。为了方便日后输出结果以及分箱要求。做一个简单的轮子以供大家日后使用。很多能用其他轮子的地方也没有多余出力,也不托大会比别人写的好。空间复杂度尽我所能。

方法展示

话不多说上代码。

以下为等深分箱以及encoding方法

# -*- coding: utf-8 -*-
"""
Created on Tue Jan 29 17:26:38 2019
@author: DamomWCG
"""
 
 
 
class Equal_depth_box:
  
 def equal_box(list, bin_num):
  '''
  param:
  list:you need bin box list
  bin_num: you want bin num
  '''
  bin_num = 10
  list.sort() #need sort can replace by others
  list_2 = list.copy()
  all_num = len(list_2)
  bin_sep = all_num/bin_num
  bin_sep = int(bin_sep)
  bin_list = []
  for i in range(1,bin_num):
   bin_dict = {}
   bin_dict = i*bin_sep
   bin_list.append(bin_dict)
  bin_real_list = []
  for i in bin_list:
   #print(i)
   bin_real_dict = {}
   bin_real_dict = list[i]
   bin_real_list.append(bin_real_dict)
  
  return bin_real_list
  
 def replace_box(list_1,replace_list):
  '''
  param:
  list_1:you need bin list
  replace_list: from equal box, replace the original list
  '''
  import pandas as pd
  list_max = max(list_1)
  list_min = min(list_1)
  replace_list.insert(0,list_min -1) #insert start
  replace_list.append(list_max + 1) #insert end
 
  list_2 = pd.cut(list_1, bins = replace_list,
      labels = range(len(replace_list) - 1)).tolist()
  return list_2
  
  
  
 
 
if __name__ == '__main__':
 
  import random
  
  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

使用案例

本案例数据为,我进行过一步的最优分箱,来做一步等深分箱来进行横向对比。

原始数据形式

python的等深分箱实例

具体案例

# -*- coding: utf-8 -*-
"""
Created on Wed Jan 30 16:17:19 2019
@author: DamonWCG
"""
 
from Equal_depth_box import *
 
import pandas as pd
 
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形式为数字型。

分箱最终结果形式

python的等深分箱实例

需要注意,我得列表形式重新decode时候需要按照当前排序数组重新编码,这个问题我年后会解决。

以上这篇python的等深分箱实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python算法之求n个节点不同二叉树个数
Oct 27 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
TensorFlow损失函数专题详解
Apr 26 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
python pygame实现2048游戏
Nov 20 Python
Python3中exp()函数用法分析
Feb 19 Python
python制作简单五子棋游戏
Jun 18 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
Python常用编译器原理及特点解析
Mar 23 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
基于python实现学生信息管理系统
Nov 22 #Python
基于python cut和qcut的用法及区别详解
Nov 22 #Python
python创建学生成绩管理系统
Nov 22 #Python
Python计算不规则图形面积算法实现解析
Nov 22 #Python
python实现连续变量最优分箱详解--CART算法
Nov 22 #Python
pycharm运行scrapy过程图解
Nov 22 #Python
python迭代器常见用法实例分析
Nov 22 #Python
You might like
获得Google PR值的PHP代码
2007/01/28 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
解决Python传递中文参数的问题
2015/08/04 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
培训心得体会
2013/12/29 职场文书
总裁助理岗位职责
2014/02/17 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书