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 28 Python
Python制作Windows系统服务
Mar 25 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
python 检查是否为中文字符串的方法
Dec 28 Python
python交互界面的退出方法
Feb 16 Python
python简单验证码识别的实现方法
May 10 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
django自带的权限管理Permission用法说明
May 13 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
详解Pymongo常用查询方法总结
Jan 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 文件上传系统手记
2009/10/26 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
python面试题之列表声明实例分析
2019/07/08 Python
pandas 对group进行聚合的例子
2019/12/27 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
Python enumerate内置库用法解析
2020/02/24 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
局域网标准
2016/09/10 面试题
应用电子专业学生的自我评价
2013/10/16 职场文书
小学中秋节活动方案
2014/02/06 职场文书
找工作求职信
2014/07/07 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
党员发展大会主持词
2015/07/03 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书