pandas数据离散化pandas.cut()和pandas.qcut()
pandas数据离散化
什么叫数据离散化?也可以理解为数据分组。举个简单的例子,我们有一组学生成绩的数据,我们可以将数据按照成绩的最大值和最小值划分为几个相同的区间。假设最高分100分,最低分50分,我们可以划分为两个相同宽度的范围。分别是[50,74]、[75,100]。 统计这两个区间都有多少数据。第二种是根据人数对成绩区间进行划分,所划分的区间人数基本持平。接下来具体通过代码来实现看看。
等宽划分成绩区间
import pandas as pd
import numpy as np
cutnum = pd.cut(tips['tip'],4)
print("tips['tip']的最大值和最小值分别为:",tips['tip'].max(),tips['tip'].min())
print(cutnum.value_counts())
- pd.cut(data,num) data是需要划分的数据,num是划分多少段。此方法是将使用数据的最大值和最小值进行区间划分。
- 从结果中,我们可以看到,数据中的最大值是10,最小值是1,整个区间被平分为了四段,每一段的区间一样。
等平分段,按照人数进行区间的划分
import pandas as pd
import numpy as np
qcutnum = pd.qcut(tips['tip'],4)
print(qcutnum.value_counts())
咱们首先看结果:
??? 不是说好了等平分吗,我只看到了中间两个数据是相同的,第一个和第四个都和其他不一样!哪里出现了问题呢。
我猜测是在端点,来,咱们试试端点值。
tipcount = tips['tip'][tips['tip']==2.0].count()
print(tipcount)
这一段代码是统计tips 数据中tip==2.0数据得个数,来看看结果:
结果是33,果真,是由于端点值相同值过多,造成得数据个数不平均,那咱们使用其他数据试试看。
接下来使用tips中得‘total_bill’数据
qcutnum1 = pd.qcut(tips['total_bill'],4)
print(qcutnum.value_counts())
看看结果:
哦yeah,没问题,证实了咱们之前得猜想。
qcut()这个方法第一个参数数据,第二个参数是划分段数。
其实这两个方法还有其他参数。基本得两个参数大家知道后,在后续实战中如果还有其他需求,可以深度得学习一下这两个方法的其他参数。
还没有评论,来说两句吧...