小编最近入坑风控,在工作中需要对数据进行等频率切分,也就是将数据划分成几段,在每段中,数据的出现频率,出现次数是大致相同的,让数据集在每段上呈现出分布均匀的趋势。

小编先是想到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 等频率切分数据的更多相关文章

  1. python爬取拉勾网数据并进行数据可视化

    爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...

  2. [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统

    [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 目录 [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 0x00 摘要 0x01 分割小批次 ...

  3. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  4. Python下载Yahoo!Finance数据

    Python下载Yahoo!Finance数据的三种工具: (1)yahoo-finance package. (2)ystockquote. (3)pandas.

  5. Delphi中使用python脚本读取Excel数据

    Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  6. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  7. python查询数据库返回数据

    python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymy ...

  8. 用python在后端将数据写入到数据库并读取

    用python在后端将数据写入到数据库: # coding:utf- import pandas as pd from sqlalchemy import create_engine # 初始化数据库 ...

  9. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

随机推荐

  1. iOS组件化之路(一)

    写在最前 从开始学写代码,胡乱的看书,不懂如何写第一个程序,到开始写出第一个程序,这段道路有些漫长.慢慢开始自己独立的去分析给出的需求,到如何实现,最初的想法只是仅仅实现,到后来懂得如何利用自己技术和 ...

  2. AIM Tech Round 5 (rated, Div. 1 + Div. 2) (A, B, E)

    B.Unnatural Conditions 题目链接 : http://codeforces.com/contest/1028/problem/B #include<iostream> ...

  3. JavaScript自定义事件和触发(createEvent, dispatchEvent)

    $(dom).addEvent("ft", function() { alert("走起"); }); // 创建 var evt = document.cre ...

  4. Oracle免安装绿色版-PLSQL连接报12154

    在环境变量添加 TNS_ADMIN  值是你的免安装客户端中sqlnet.ora   tnsnames.ora 所在的目录 参考地址:https://blog.csdn.net/feng_na/art ...

  5. Liunx中三种网络模式配置及Xshell连接

    Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi   /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...

  6. EDK II代码实例之Variable

    EFI_STATUS Status = EFI_SUCCESS; EFI_GUID OemOSTypeGuid = {0xd06a0bc7, 0x9feb, 0x4cbb, 0xbd, 0x78, 0 ...

  7. springboot+mybatis环境的坑和sql语句简化技巧

    1.springfox-swagger实体类无限递归 https://hacpai.com/article/1525674135818 里面有不完美的解决方案 不用动源码的解决方案也有,在swagge ...

  8. linux目录结构特点

    #####linux目录结构特点一切从根开始linx中每个设备可以挂载在任何目录上面磁盘/设备/分区没有挂载 无法使用 举例-linux下面使用光盘###1.把光盘放入到光驱中 ###2.linux中 ...

  9. 常用sql语句总结(一)(查询)

    常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...

  10. MySQL:Download Connector/Python

    MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...