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继承和抽象类的实现方法
Jan 14 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
Python实现全角半角字符互转的方法
Nov 28 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
python模拟斗地主发牌
Apr 22 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
Python3爬虫中关于中文分词的详解
Jul 29 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
php实现的替换敏感字符串类实例
2014/09/22 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
微信支付的开发流程详解
2016/09/13 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
Python分治法定义与应用实例详解
2017/07/28 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
《花的勇气》教后反思
2014/02/12 职场文书
冬季安全检查方案
2014/05/23 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
英文版辞职信
2015/02/28 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript