全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4254 1
2017-05-07
本人在学习某个培训机构R实例课件中,在前期处理数据质量处理的时候,大量的用Hmisc包下面的cut2()函数,他解释:“#将峰度较大的数据进行分段处理。#峰值(peakness)是指概率密度分布曲线在平均值处的陡缓程度;偏度(skewness)是指概率密度分布曲线相对于平均值的偏移程度”。
  我个人的理解就是既定的数据值之间差异太大,存在两极化的现象。他就想把直方图中柱子比较高的数据给削掉一些。
我截取了处理前的部分数据:
  > head(t$capital_gain,500)

    [1]     0     0     0  7688     0     0     0  3103     0     0
[11]  6418     0     0     0  3103     0     0     0     0     0
[21]     0     0     0     0     0  7298     0     0     0     0
[31]  7688     0     0     0     0     0     0     0     0     0
[41]     0     0     0     0     0     0     0  3908     0     0
[51]     0     0     0 14084     0     0     0  3103  5178     0
[61]     0     0     0     0     0     0 15024     0     0     0
[71] 15024     0     0     0     0     0     0     0     0     0
[81]     0     0     0 99999     0     0     0     0     0  7688
[91]     0     0  5178     0     0     0     0     0     0     0
[101]     0     0     0     0     0     0     0  2597     0     0
[111]     0     0     0     0     0     0     0     0     0     0
[121]     0     0     0     0     0     0     0     0     0     0
[131]     0     0     0     0     0     0     0     0     0     0
[141]     0     0  7688     0     0     0     0     0 15024  2907
[151]     0     0     0     0     0     0     0     0     0     0
[161]     0     0     0     0     0     0     0     0     0     0
[171]     0     0     0     0     0     0     0     0     0     0
[181]  4650 15024     0     0     0     0     0     0     0     0
[191]     0     0     0     0     0     0     0     0     0     0
[201]     0     0     0     0     0     0     0     0     0     0
[211]     0     0  6497     0     0     0     0     0     0     0
[221]     0     0     0     0  7688     0 15024     0  1055     0
[231]     0     0     0     0     0     0  5013     0     0     0
[241]     0     0     0     0     0     0     0     0     0     0
[251]     0     0     0     0     0     0  4650     0     0     0
[261]     0     0     0     0     0  3103     0     0     0     0
[271]     0     0     0     0     0     0     0     0 15024     0
[281]     0     0     0     0     0     0     0     0     0     0
[291]     0     0     0     0     0     0     0     0 27828     0
[301]     0     0     0     0     0     0     0     0     0  3103
[311]     0     0     0  4934  4064     0     0     0     0     0
[321]     0     0     0     0     0     0     0     0     0 15024
[331]     0     0     0  3674     0     0     0     0     0     0
[341]     0  2174     0     0 10605     0 99999  5178     0     0
[351]     0     0     0     0     0     0     0 99999     0     0
[361]     0     0     0     0     0     0     0     0     0     0
[371]     0     0     0     0     0     0     0     0     0     0
[381]     0     0     0     0     0     0     0     0     0     0
[391]     0     0     0     0  3418     0     0     0     0     0
[401]     0     0     0     0     0     0     0     0     0     0
[411]     0     0  1055     0     0     0     0     0 99999     0
[421]     0     0     0     0   114     0     0     0     0     0
[431]     0     0     0     0     0     0     0     0     0     0
[441]  2580     0     0     0     0     0  3411     0     0  2174
[451]     0     0     0     0     0     0     0     0     0     0
[461]     0     0     0     0     0     0     0     0     0     0
[471]     0     0     0     0  2907     0  4508     0     0     0
[481]     0     0     0 27828     0     0     0     0     0     0
[491]     0     0     0     0     0     0     0     0     0     0

下面是这一列的直方图:
hist.png

我按照他的方法,进行了cut2()处理:
>s<-as.numeric(cut2(t$capital_gain,g=10))
>head(s,500)
  [1] 1 1 1 2 1 1 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1
[31] 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1
[61] 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2
[91] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
[121] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2
[151] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[181] 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[211] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1
[241] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1
[271] 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
[301] 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
[331] 1 1 1 2 1 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1
[361] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[391] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1
[421] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2
[451] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1
[481] 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
下面是处理后的直方图:
hist2.png
想问一下:
1.这么处理的作用是什么,有必要么,什么情况下这么处理,如果不处理,会影响数据的聚类结果么?
2.我查了一下关于Cut2函数的作用就是数据分箱,等宽分箱,as.numeic以后就显示为1和2,这个值是怎么计算出来的,是组内的平均值么?
3.从峰度和偏度的角度看,前后两个直方图的区别在哪?用什么函数能看到某一列数据峰度和偏度的值?
4.这个实例中,g=10,如果分段的话,应该分几段合适啊,这块有什么标准么?
附件列表
处理后hist2.png

原图尺寸 3.41 KB

处理后hist2.png

处理前hist.png

原图尺寸 4.23 KB

处理前hist.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-7-11 14:26:16
    还是自己回复吧!
    这段时间经过学习,参考帮助文档,对Cut2()函数有了进一步的理解。
    简单来说Cut2()函数和Cut()函数基本是一样的,只是Cut2()要比Cut()更简便。Cut2()中主要2个参数,g和m,g就是你想分几段,m就是确定你想每段中有多少个变量。Cut2()的结果是factor,使用table()函数能看到每个段中变量的数量。as.numeric(Cut2()),结果就是变量所在的段。也就是把原先的大大小小的数值,经过分段后,转换成数值所在的段,起到了数据平滑处理的作用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群