1. 程式人生 > >R語言-探索兩個變量

R語言-探索兩個變量

清晰 test nbsp 數據文件 展示 變量 lin aes mon

目的:

  通過探索文件pseudo_facebook.tsv數據來學會兩個變量的分析流程

知識點:

  1.ggplot語法

2.如何做散點圖

3.如何優化散點圖

4.條件均值

5.變量的相關性

6.子集散點圖

7.平滑化

簡介:

  如果在探索單一變量時,使用直方圖來表示該值和整體的關系,那麽在探索兩個變量的時候,使用散點圖會更適合來探索兩個變量之間的關系

案例分析:

1.根據年齡和好友數作出散點圖

#導入ggplot2繪圖包
library(ggplot2) setwd(
D:/Udacity/數據分析進階/R
)
#加載數據文件 pf
<- read.csv(pseudo_facebook.tsv,sep=\t)
#使用qplot語法作出散點圖 qplot(x
=age,y=friend_count,data=pf)
#使用ggplot語法作出散點圖,此處使用ggplot作圖語法上更清晰
ggplot(aes(x
=age,y=friend_count),data=pf)+ geom_point()

技術分享圖片

圖 2-1

2.過渡繪制,因為圖2-1有大部分的點都重疊,不太好區分哪個年齡和好友數的關系,所以使用alpha和geom_jitter來進行調整

#geom_jitter消除重合的點
#alpha=1/20表示20個值算1個點
#xlim(13,90)表示x軸的取值從13,90
ggplot(aes(x=age,y=friend_count),data=pf)+
  geom_jitter(alpha=1/20)+
  xlim(13,90)

技術分享圖片

圖 2-2

3.coord_trans函數的用法,可以給坐標軸上應用函數,使其的可視化效果更好

#給y軸的好友數開根號,使其可視化效果更好
ggplot(aes(x=age,y=friend_count),data=pf)+
  geom_point(alpha
=1/20)+ xlim(13,90)+ coord_trans(y="sqrt")

技術分享圖片

圖2-3

4.條件均值,根據字段進行分組然後分組進行統計出新的DataFrame

#1.導入dplyr包
#2.使用group_by對年齡字段進行分組
#3.使用summarise統計出平均值和中位數
#4.再使用arrange進行排序
library(dplyr)
pf.fc_by_age <- pf %>%
  group_by(age) %>%
  summarise(friend_count_mean=mean(friend_count),
            friend_count_media = median(friend_count),
            n=n()) %>%
  arrange(age)

5.將該數據和原始數據進行叠加,根據圖形,我們可以得出一個趨勢,從13歲-26歲好友數在增加,從26開始慢慢的好友數開始下降

#1.通過限制x,y的值,做出年齡和好友數的散點圖
#2.做出中位值的漸近線
#3.做出0.9的漸近線
#4.做出0.5的漸近線
#5.做出0.1的漸近線
ggplot(aes(x=age,y=friend_count),data=pf)+
  geom_point(alpha=1/10,
             position = position_jitter(h=0),
             color=orange)+
  coord_cartesian(xlim = c(13,90),ylim = c(0,1000))+
  geom_line(stat = summary,fun.y=mean)+
  geom_line(stat = summary,fun.y=quantile,fun.args=list(probs=.9),
            linetype=2,color=blue)+
  geom_line(stat=summary,fun.y=quantile,fun.args=list(probs=.5),
            color=green)+
  geom_line(stat = summary,fun.y=quantile,fun.args=list(probs=.1),
            color=blue,linetype=2)

技術分享圖片

圖2-4

6.計算相關性

#使用cor.test函數來進行計算,在實際中可以對數據集進行劃分
#pearson表示兩個變量之間的關聯強度的參數,越接近1關聯性越強
with(pf,cor.test(age,friend_count,method = pearson))
with(subset(pf,age<=70),cor.test(age,friend_count,method = ‘pearson‘)

7.強相關參數,通過做出www_likes_received和likes_received的散點圖來判斷兩個變量的關聯程度,從圖中看出兩個值的關聯性很大

#使用quantile來過限定一些極端值
#通過xlim和ylim實現過濾
#同時增加一條漸近線來查看整體的值
ggplot(aes(x=www_likes_received,y=likes_received),data=pf)+
  geom_point()+
  xlim(0,quantile(pf$www_likes_received,0.95))+
  ylim(0,quantile(pf$likes_received,0.95))+
  geom_smooth(method = lm,color=red)

技術分享圖片

圖2-5

8.通過計算月平均年齡,平均年齡和年齡分布來做出三個有關年齡和好友數關系的折線圖

從該圖中我們可以發現p1的細節最多,p2展現的是每個年齡段不同的好友數量,p3展示的是年齡和好友數的大體趨勢

#
library(gridExtra)
pf$age_with_month <- pf$age + (12-pf$dob_month)/12
pf.fc_by_age_months <- pf %>%
  group_by(age_with_months) %>%
  summarise(friend_count_mean = mean(friend_count),
            friend_count_median = median(friend_count),
            n=n()) %>%
  arrange(age_with_months)
p1 <- ggplot(aes(x=age_with_month,y=friend_count_mean),
       data=subset(pf.fc_by_age_months,age_with_month<71))+
  geom_line()+
  geom_smooth()
p2 <- ggplot(aes(x=age,y=friend_count_mean),
             data=subset(pf.fc_by_age,age<71))+
  geom_line()+
  geom_smooth()
p3 <- ggplot(aes(x=round(age/5)*5,y=friend_count),
             data=subset(pf,age<71))+
  geom_line(stat = summary,fun.y=mean)


grid.arrange(p1,p2,p3,ncol=1)

技術分享圖片

習題:

R語言-探索兩個變量