任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。本文和你一起来探索Python中的cut函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
cut函数使用需先调用pandas库,它主要用于将数组元素分成不同的箱。
其基本调用语法如下:
pd.cut(x, bins, right: bool = True, labels=None, retbins: bool = False, precision: int = 3, include_lowest: bool = False, duplicates: str = 'raise')
x:待切割的一维数组。
bins:定义切割数组的方式,如果为数值,表示把数组均分切分为几段。如果为列表,表示切割时各段的间隔点。
right:表示切割后区间的右边是否闭合,默认值为True。
labels:切割后的区间是否打标签。
在对客户管理数据进行建模分析时,需要对原始数据进行预处理,包括运用cut函数对某些列进行平滑处理。
首先,加载库并导入数据。
import os
import random
import numpy as np
import pandas as pd
#2.数据读取
os.chdir(r'F:\公众号\4.决策树和随机森林')
ori_date = pd.read_csv("customer.csv")
接着,看下原始数据中客户拥有银行卡片的分布情况,代码如下:
ori_date['num_cars_owned'].value_counts()
得到结果:
2 3103
3 2913
1 2266
4 1412
0 587
Name: num_cars_owned, dtype: int64
从结果知,客户拥有的银行卡数目从0到4。
现在我们想把客户进行分类,假设我们想把客户分成3类,并统计三类的分布,代码如下:
pd.cut(ori_date['num_cars_owned'], 3).value_counts()
此时x为ori_date[‘num_cars_owned’],bins=3。
得到结果:
(2.667, 4.0] 4325
(1.333, 2.667] 3103
(-0.004, 1.333] 2853
Name: num_cars_owned, dtype: int64
可以发现0到1分成了一组,2单独分成了1组,3到4分成了1组。这种分组的原理是尽可能等分每组的数目。
除了可以指定分组的数目,也可以设置分组的切割点。比如首先区分是否有银行卡,在有银行卡的客户中区分银行卡的数目是否超过2,代码如下:
pd.cut(ori_date['num_cars_owned'], [-1, 0, 2, 4]).value_counts()
得到结果:
(0, 2] 5369
(2, 4] 4325
(-1, 0] 587
Name: num_cars_owned, dtype: int64
可以发现0分到了一组,1和2分到了一组,3和4分到了一组。
测试一下right函数为False的结果,代码如下:
pd.cut(ori_date['num_cars_owned'], [-1, 0, 2, 4], right='False').value_counts()
得到结果:
(0, 2] 5369
(2, 4] 4325
(-1, 0] 587
Name: num_cars_owned, dtype: int64
从结果知,right为False的结果和right为True的结果一致,右区间依然闭合。
最后,给分组后的箱加标签,代码如下:
pd.cut(ori_date['num_cars_owned'], [-1, 0, 2, 4], labels=['group1', 'group2', 'group3']).value_counts()
得到结果:
group2 5369
group3 4325
group1 587
Name: num_cars_owned, dtype: int64
从结果知,labels参数赋值只是把原来的分组用标签替换了。
至此,Python中的cut函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
用Python绘制520永恒心动
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
【Python】情人节表白烟花(带声音和文字)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)