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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
wxPython中文教程入门实例
Jun 09 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python try except 捕获所有异常的实例
Oct 18 Python
python线程信号量semaphore使用解析
Nov 30 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
PyTorch中permute的使用方法
Apr 26 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php下实现农历日历的代码
2007/03/07 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
理解AngularJs指令
2015/12/10 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python输入多行字符串的方法总结
2019/07/02 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
如何利用python发送邮件
2020/09/26 Python
大学计划书范文800字
2014/08/14 职场文书
ktv好的活动方案
2014/08/15 职场文书
检讨书大全
2015/01/27 职场文书
手机销售员岗位职责
2015/04/11 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
教师节获奖感言
2015/07/31 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
JS的深浅复制详细
2021/10/16 Javascript
mysql的Buffer Pool存储及原理
2022/04/02 MySQL