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 k-近邻算法实例分享
Jun 11 Python
在Python中使用SQLite的简单教程
Apr 29 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
tensorflow实现softma识别MNIST
Mar 12 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python3实现点餐系统
Jan 24 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
Python json格式化打印实现过程解析
Jul 21 Python
Python进行统计建模
Aug 10 Python
Python绘画好看的星空图
Mar 17 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
JavaScript模板入门介绍
2012/09/26 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
python爬取淘宝商品销量信息
2018/11/16 Python
Django实现文件上传下载功能
2019/10/06 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
社会发展项目建议书
2014/08/25 职场文书
2014年变电站工作总结
2014/12/19 职场文书
文明班级申报材料
2014/12/24 职场文书
企业安全生产检查制度
2015/08/06 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书