我们碰到的很多数据变量中都存在很长的尾巴,有一些数据会出现高于中位数很多倍的数据,这种数据我们称之为数据过离散。通常需要对这些数据进行变换,才能看到标准偏差或者量级,实际上我们在缩短尾巴。
1、先看看我们最初的图形
qplot(x=friend_count,data=pf)
我们可以通过取对数来变换此变量,使用自然对数。以2为底的对数或者以10 为底的对数。
我们可以使用平方根,这样可以让我们更清楚的看清模式,不被长尾分散注意力。
2、对变量进行常规汇总
summary(pf$friend_count)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 31.0 82.0 196.4 206.0 4923.0
3、对变量进行常规对数
summary(log10(pf$friend_count))
Min. 1st Qu. Median Mean 3rd Qu. Max.
-Inf 1.491 1.914 -Inf 2.314 3.692
这里数据看起来有些异常,最小值和平均值是负无穷。这是因为有些用户的好友数为0,当0取对数是为负无穷。
4、为避免以上情况,我们对数据+1
summary(log10(pf$friend_count+1))
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 1.505 1.919 1.868 2.316 3.692
5、使用另一个函数,对变量进行平方根处理
summary(sqrt(pf$friend_count))
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 5.568 9.055 11.088 14.353 70.164
6、在一个图像上创建三个直方图
在一个图中创建所有三个直方图之前,你需要运行以下代码:
install.packages('gridExtra')
library(gridExtra)
1、使用包裹器
> p1=qplot(x=friend_count,data=pf)
> p2=qplot(x=log10(pf$friend_count+1),data = pf)
> p3=qplot(x=sqrt(pf$friend_count),data = pf)
> grid.arrange(p1,p2,p3,ncol=1)
同样的ggplot代码:使用标度层
> d1 <- ggplot(aes(x=friend_count),data=pf)+geom_histogram()
> d2 <- p1+scale_x_log10()
> d3 <- p1+scale_x_sqrt()
> grid.arrange(d1,d2,d3,nclo=1)
7、看一下使用包裹器和使用标度层的图形的区别
logscal <- qplot(x=log10(pf$friend_count+1),data = pf)
countscale <- ggplot(aes(x=friend_count),data=pf)+
geom_histogram()+
scale_x_log10()
grid.arrange(logscal,countscale,nclo=2,top="main title")