python 等频率切分数据
小编最近入坑风控,在工作中需要对数据进行等频率切分,也就是将数据划分成几段,在每段中,数据的出现频率,出现次数是大致相同的,让数据集在每段上呈现出分布均匀的趋势。
小编先是想到df.describe
cutlist = data[col].describe()
出来的结果是:
描述结果分别就是 计数,均值,标准差,最小,四分位数,最大值
我要的是十分位,那就要借助describe的参数percentiles 了,percentiles 中可以存放切分点的列表
cutlist = data[col].describe(percentiles = [1.0*i/k for i in range(k+1)])
这时候就有十分位数了,再将十分位数取出来,但这个时候会遇到一个问题,在 cutlist["0%":"100%"] 之中,有一些重复的值,比如0%到30%的分位数都是0 ,这样子来做切分数据,是会出错,所以应该对数据进行去重
cutdata = pd.DataFrame(pd.cut(data[score],cutlist["0%":"100%"],include_lowest=True))
后来小编发现一个更加好用的函数 quantile ,顺便用drop_duplicates(keep="last") 去重并保留最后一个重复值
cutlist = data[col].quantile([1.0*i/k for i in range(k+1)],interpolation= "lower").drop_duplicates(keep="last")
quantile值得注意的是他的参数 interpolation ( 插值方法 当所需分位数位于两个数据点i和j之间时,这个可选参数指定要使用的插值方法: ) ,可填选的值为 :‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’
官方文档的解释是:
linear :i + (j - i) *分数,其中分数是索引中被 i 和 j 包围的小数部分。
lower: i.
higher: j.
nearest: i or j 取最近的
midpoint: (i + j) / 2. 取中位数
如果不指定插值方法,当出现无法判断的情况时,是不会进行插值的
linear的插值方法example:
比如0.166666 是介于 (0.000000,0.166667 ] 之间 ,索引中被 i 和 j 包围的小数部分就是 0.3和0.4之间的小数部分0.4 ,那么
0.000000+(0.166667 - 0.000000)* 0.4 = 0.0666668
介于(0.000000,0.166667 ] 即被分到(0.000000,0.166667 ] 这段之间了。
以上是小编的想法,仅供参考,有任何新想法欢迎和我讨论!
python 等频率切分数据的更多相关文章
- python爬取拉勾网数据并进行数据可视化
爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...
- [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统
[源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 目录 [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 0x00 摘要 0x01 分割小批次 ...
- JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决
JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...
- Python下载Yahoo!Finance数据
Python下载Yahoo!Finance数据的三种工具: (1)yahoo-finance package. (2)ystockquote. (3)pandas.
- Delphi中使用python脚本读取Excel数据
Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- python打印表格式数据,留出正确的空格和段落星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- python查询数据库返回数据
python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymy ...
- 用python在后端将数据写入到数据库并读取
用python在后端将数据写入到数据库: # coding:utf- import pandas as pd from sqlalchemy import create_engine # 初始化数据库 ...
- Python 进程之间共享数据
最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享 在mp库当中,跨进程对象共享有三种方式,第一种 ...
随机推荐
- CentOS 7 FTP环境部署
FTP协议有两种工作方式: 1)port方式:主动模式 port(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求 , 服务器接受连接 , 建立一条命令链路 当需要传送数据 ...
- shell脚本中各类括号的作用(小结)
技巧小结: 字符串比较用双中括号[[ ]]:算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) :shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留 ...
- 单点登录(SSO)详解
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便.但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次 ...
- IT题库1-HashMap、HashSet和HashTable(区别?数据格式?)
1. HashTable和HashMap的区别 HashMap和Hashtable都实现了Map接口.主要区别:线程安全性,同步(synchronization),以及速度. 1.HashMap是非s ...
- 使用gulp构建一个项目
gulp是前端开发过程中自动构建项目的工具,相同作用的还有grunt.构建工具依靠插件能够自动监测文件变化以及完成js/sass/less/html/image/css/coffee等文件的语法检查. ...
- 认识.net
.NET多指NET Framework,Visual Studio.NET及其开发的应用程序.NET Framework是一个开发和执行环境,允许不同的程序语言和库无缝结合基于Window的应用程序. ...
- redis使用总结(二)(jedis使用)
Jedis使用(Jedis中的API和redis的指令基本相同) 1.创建maven工程,在pom文件中导入jedis的坐标 <dependency> <groupId>red ...
- VB代码收集
1.随机获取5位验证码? 需求: 创建一个Label1:名称为随机验证码生成 创建一个Label2:名称为为空,属性BorderStyle=1 创建一个CommandButton:名称为获取随机码 代 ...
- [C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单
程序清单9.9(静态存储连续性.无链接性) #include<iostream> using namespace std; ; void strcount(const char *str) ...
- iOS日期问题
由于项目需要,需要获取去设备的当前时间,组成一个字符串,比如 2018年9月15日 15点30分30秒,需要转换成字符创:180915153030. 很简单的一个需求,于是就使用了日期格式话当前时间: ...