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使用tablib生成excel文件的简单实现方法
Mar 16 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python使用Matplotlib绘制分段函数
Sep 25 Python
python交换两个变量的值方法
Jan 12 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
python 深度学习中的4种激活函数
Sep 18 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
django学习之ajax post传参的2种格式实例
May 14 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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
使用dump函数,给php加断点测试
2013/06/25 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
Pytorch之Variable的用法
2019/12/31 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
电大本科自我鉴定
2014/02/05 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
二手房购房意向书范本
2014/04/01 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
实习生辞职信范文
2015/03/02 职场文书
工程移交协议书
2016/03/24 职场文书
导游词之峨眉山
2019/12/16 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python