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 10 Python
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
Python变量作用范围实例分析
Jul 07 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
django 多数据库配置教程
May 30 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
python TCP包注入方式
May 05 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
Python基于xlrd模块处理合并单元格
Jul 28 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 批量删除数据的方法分析
2009/10/30 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
浅谈JavaScript函数节流
2014/12/09 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
JavaScript多线程详解
2015/08/12 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
使用Python横向合并excel文件的实例
2018/12/11 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python实现接口并发测试脚本
2019/06/25 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python异步Web框架sanic的实现
2020/04/27 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
中职生自荐信
2013/10/13 职场文书
十佳护士获奖感言
2014/02/18 职场文书
清明节演讲稿
2014/05/27 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书