频数多边形用来比较分布,优势就是比较两个或者多个分布
问题:男性和女性那个平均好友更多
1、friend_count分布直方图
qplot(x=friend_count,data = subset(pf,!is.na(gender)),binwidth=10)+
scale_x_continuous(lim=c(0,1000),breaks = seq(0,1000,50))
2、按性别分开
> qplot(x=friend_count,data = subset(pf,!is.na(gender)),binwidth=10)+
+ scale_x_continuous(lim=c(0,1000),breaks = seq(0,1000,50))+
+ facet_wrap(~gender)
3、制作频数多边形
默认情况下,当qplot传递一个变量是,默认制作直方图,我们可以通过geom函数来改变制作的图形类型。
当创建不同的图形是,不在需要性别的逐面包裹,
在同一个图形上比较性别数据,需要将gender赋值给color
qplot(x=friend_count,data = subset(pf,!is.na(gender)),binwidth=10,geom='freqpoly',color=gender)+
scale_x_continuous(lim=c(0,1000),breaks = seq(0,1000,50))
4、以上图形仍然不能回答我们的问题,这里讲y轴进行更改,将数值改为比例
qplot(x=friend_count,y=..count../sum(..count..),
data = subset(pf,!is.na(gender)),
binwidth=10,geom='freqpoly',color=gender)+
scale_x_continuous(lim=c(0,1000),breaks = seq(0,1000,50))
等效的ggplot语法:
ggplot(aes(x = friend_count, y = ..count../sum(..count..)), data = subset(pf, !is.na(gender))) +
geom_freqpoly(aes(color = gender), binwidth=10) +
scale_x_continuous(limits = c(0, 1000), breaks = seq(0, 1000, 50)) +
xlab('好友数量') +
ylab('Percentage of users with that friend count')
请注意,sum(..count..) 将跨颜色进行总计,因此,显示的百分比是总用户数的百分比。要在每个组内绘制百分比,你可以尝试
y = ..density…
5、对于尾部的长尾数据我们可以使用log来进行比较
> qplot(x=friend_count,data = subset(pf,!is.na(gender)),
+ binwidth=10,geom='freqpoly',color=gender)+
+ scale_x_continuous(lim=c(0,1000),breaks = seq(0,1000,50))+
+ scale_x_log10()
等效的ggplot代码:
ggplot(aes(x = www_likes), data = subset(pf, !is.na(gender))) +
geom_freqpoly(aes(color = gender)) +
scale_x_log10()
6、对比男性和女性在网页上点赞数的不同
qplot(x=www_likes,data = subset(pf,!is.na(gender)),
geom='freqpoly',color=gender)+
scale_x_continuous()+
scale_x_log10()
这里为了不出现上面的箭头形状,去掉了binwidth参数。
第一个问题是:在整个数据集中,对于男性有多少个 www_likes?
第二个问题是:哪个性别的 www_likes 总数更多?
> table(pf$gender)
female male
40254 58574
> by(pf$www_likes,pf$gender,summary)
pf$gender: female
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 0.00 87.14 25.00 14865.00
-------------------------------------------------------------------------------------------
pf$gender: male
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 0.00 24.42 2.00 12903.00
> by(pf$www_likes,pf$gender,sum)
pf$gender: female
[1] 3507665
-------------------------------------------------------------------------------------------
pf$gender: male
[1] 1430175