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如何生成随机密码
Apr 20 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
python之pexpect实现自动交互的例子
Jul 25 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Python中logging日志库实例详解
Feb 19 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
Python中的全局变量如何理解
Jun 04 Python
python实现商品进销存管理系统
May 30 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
php利用header函数下载各种文件
2016/08/24 PHP
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
python 上下文管理器使用方法小结
2017/10/10 Python
python3.4实现邮件发送功能
2018/05/28 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
Python同步遍历多个列表的示例
2019/02/19 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python实现简单图书管理系统
2019/11/22 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
C有"按引用传递"吗
2016/09/06 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
终止劳动合同通知书
2015/04/16 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
python 常用的异步框架汇总整理
2021/06/18 Python