《R數(shù)據(jù)科學(xué)》|| 1-3章ggplot2與dplyr探索

r4ds

迷茫的日子里也不能忘了要學(xué)習(xí)新知識(shí)技能以及總結(jié)歸納啊鲜戒。最近開(kāi)始學(xué)習(xí)《R數(shù)據(jù)科學(xué)》中文版,這確實(shí)是本好書(shū)抹凳,有些知識(shí)點(diǎn)的層次關(guān)系及解釋讓我明白了許多之前對(duì)R一知半解的地方遏餐。以接下來(lái)的一系列筆記來(lái)歸納建立自己的知識(shí)體系,并一起分享交流學(xué)習(xí)赢底。

第一章: 使用ggplot2進(jìn)行數(shù)據(jù)可視化

  1. ggplot()失都,在此函數(shù)種添加的映射會(huì)作為全局變量應(yīng)用到圖中的每個(gè)幾何對(duì)象種。

  2. 圖層geom_point點(diǎn)圖層

  3. 映射數(shù)據(jù)為圖形屬性 mapping=aes()幸冻,要想將圖形屬性映射為變量粹庞,需要在函數(shù)aes()中將圖形屬性的名稱(chēng)和變量的名稱(chēng)關(guān)聯(lián)起來(lái)。

  4. 標(biāo)度變化:將變量(數(shù)據(jù))分配唯一的圖形屬性水平嘁扼。

  5. 手動(dòng)設(shè)置圖形屬性信粮,此是在geom_point()層面黔攒。此時(shí)趁啸,這個(gè)顏色是不會(huì)傳達(dá)變量數(shù)據(jù)的信息。

  6. 分層facetfacet_grid()可以通過(guò)兩個(gè)變量對(duì)圖分層`facet_grid(drvcyl)或(.cyl)

  7. 分組aes(group)此種按照?qǐng)D形屬性的分組不用添加圖例督惰,也不用為幾何對(duì)象添加區(qū)分特征

  8. 統(tǒng)計(jì)變換:繪圖時(shí)用來(lái)計(jì)算新數(shù)據(jù)的算法稱(chēng)為stat(statistical transformation,統(tǒng)計(jì)變化)不傅。比如對(duì)于geom_bar()默認(rèn)是只對(duì)一個(gè)數(shù)據(jù)x映射,其統(tǒng)計(jì)變化后生成數(shù)據(jù)x種的每個(gè)值的count數(shù)赏胚。

    • 每個(gè)幾何對(duì)象函數(shù)都有一個(gè)默認(rèn)的統(tǒng)計(jì)變換访娶,每個(gè)統(tǒng)計(jì)變換函數(shù)都有一個(gè)默認(rèn)的幾何對(duì)象。
    • 如需要展示二維數(shù)據(jù)觉阅,geom_bar(mapping=aes(x=a,y=b),stat="identity ")
  9. 圖形屬性/位置調(diào)整

    • color,fill
    • 位置調(diào)整參數(shù)position有三個(gè)選項(xiàng):"identity","fill","dodge"
    • position="dodge"參數(shù)可分組顯示數(shù)據(jù)崖疤,將每組種的條形依次并列放置,可以輕松比較每個(gè)條形表示的具體數(shù)值典勇。
    • 數(shù)據(jù)的聚集模式無(wú)法很好確定劫哼,因?yàn)榇嬖跀?shù)據(jù)的過(guò)繪制問(wèn)題(很多彼此十分僅的點(diǎn)重疊了)position="jitter"對(duì)于geom_position()函數(shù)來(lái)說(shuō),jitter的位置方式為抖動(dòng)會(huì)排除過(guò)繪制問(wèn)題
  10. 坐標(biāo)系

    • coord_flip()函數(shù)可以交換x軸和y軸
    • labs():modify axis, legend, and plot labels.
mpg
str(mpg)
data<- mpg
?mpg ##查看mpg數(shù)據(jù)的說(shuō)明
ggplot(data = mpg)+geom_point(aes(x=displ,y=hwy))

ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=class),color="#EF5C4E",shape=19)
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy),color="#EF5C4E",shape=19)
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,stroke=displ),shape=19)
## 添加兩個(gè)圖層:geom_point,geom_smooth()
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=drv))+geom_smooth(mapping = aes(x=displ,y=hwy,linetype=drv,color=drv))
# 添加分組
ggplot(data = mpg)+geom_smooth(mapping = aes(x=displ,y=hwy,group=drv))
ggplot(data = mpg)+geom_smooth(mapping = aes(x=displ,y=hwy,color=drv),show.legend = F) ## 圖例 show.legend=F

## 在不同的圖層中添加指定不同的數(shù)據(jù)
## data=filter(mpg,class=="suv"), se=F割笙,表示去除f波動(dòng)的范圍权烧。
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=class))+geom_smooth(data = filter(.data = mpg,class=="suv"))

##exercices
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F)
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F,mapping = aes(group=drv))
ggplot(data = mpg,mapping = aes(x=displ,y=hwy,color=drv))+geom_point()+geom_smooth(se = F)
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))+geom_smooth(se = F)
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))+geom_smooth(mapping = aes(linetype=drv),se = F)
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))

### 統(tǒng)計(jì)變換
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F)
ggplot(data=diamonds)+stat_summary(mapping = aes(x=cut,y=depth))
ggplot(data=diamonds)+geom_boxplot(mapping = aes(x=cut,y=price))
ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut))
ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut,y=..prop..),group=2)

### 圖形調(diào)整,位置調(diào)整
ggplot(diamonds)+geom_bar(mapping = aes(x=cut,fill=cut),color="black")+scale_fill_brewer(palette = "Set3")
ggplot(diamonds)+geom_bar(mapping = aes(x=cut,fill=clarity))+scale_fill_brewer(palette = "Set2")
ggplot(diamonds)+geom_bar(mapping=aes(x=cut,color=clarity),position = "dodge")+scale_fill_brewer(palette = "Set2")
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy),position = "jitter")
##exercises
ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_point(position = "jitter")+geom_smooth(color="black")
ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_jitter()
ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_count()
ggplot(mpg)+geom_boxplot(mapping = aes(x=manufacturer,y=hwy),position = "identity")
?geom_boxplot

###1.9 坐標(biāo)系
ggplot(mpg,mapping = aes(x=class,y=hwy))+geom_boxplot()+coord_flip()
nz <- map_data("nz")
?map_data
ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut,fill=cut),show.legend = FALSE)+theme(aspect.ratio = 1)+labs()
bar+scale_color_brewer(palette = "Set2")
bar+coord_flip()
bar+coord_polar()

第二章:工作流:基礎(chǔ) Workflow:basics

  1. 賦值:小技巧,alt+減號(hào)會(huì)自動(dòng)輸入賦值符號(hào)<- 并在前后加空格
  2. 對(duì)象:用snake_case命名法小寫(xiě)字母伤溉,以_分割般码。
  3. Rstudio中快捷查看命令:Alt+Shift+K

第三章:使用dplyr進(jìn)行數(shù)據(jù)轉(zhuǎn)換

  1. 特殊的data.frametibble
  2. 變量variable類(lèi)型:
    • int:
    • dbl(num的一種乱顾?):雙精度浮點(diǎn)數(shù)變量板祝,或稱(chēng)實(shí)數(shù)。
    • chr:字符向量/字符串
    • dttm:日期+時(shí)間
    • lgl:邏輯型變量
    • fctr(factor):因子
    • date:日期型變量
  3. 基礎(chǔ)函數(shù):filter(),arrange(),select(),mutate(),summarize(),group_by()
  4. 使用filter()篩選:
    • filter(flights, arr_delay<=10).
    • 比較運(yùn)算符 ==, !=, <=
    • 邏輯運(yùn)算符 x & !y, x|y, xor(x,y)
    • 缺失值 NA, is.na()
## filter()
(jan1 <- filter(flights,month==1,day==1))
(dec25 <- filter(flights,month==12,day==25))
filter(flights,month>=11)
(nov_dec <- filter(flights,month %in% c(11,12)))
filter(flights,!(arr_delay<=120 | dep_delay<=120))
NA>=10
x <- NA
is.na(x)
df <- tibble(x=c(1,NA,2))
filter(df,x>1)
filter(df,is.na(x)|x>1)
### exercise
filter(flights,carrier %in% c("UA","AA","DL"))
filter(flights,month %in% c(7,8,9))
filter(flights,arr_delay>120 & dep_delay==0)
filter(flights,dep_delay >= 60 & (dep_delay-arr_delay>=30)) 
filter(flights,dep_time ==2400| dep_time<=600)
filter(flights,is.na(dep_time))


  1. 使用 arrange()按照列(variable)的值進(jìn)行排序
    • desc倒序
    • 缺失值排在最后走净,若想提前可desc(is.na())
# arrange()
arrange(flights,desc(dep_delay,arr_delay)) #降序排列
arrange(flights,desc(is.na(dep_delay),arr_delay)) ##將NA值排列到前面

  1. 使用select()選擇列:(數(shù)據(jù)集會(huì)有成千上萬(wàn)個(gè)變量券时,select選出變量的子集)
    • 選出year~day之間的列:select(flights, year:day)
    • 選出排除year~day列:select(flights,-(year:dat))
    • 匹配變量中的名稱(chēng):starts_with(""), ends_with(), matches("")
    • rename()對(duì)列重新命名
    • everything()輔助函數(shù)來(lái)將某幾列提前囊嘉。
## select()
select(flights,year:day)
select(flights,-(year:day)) ## 不包括year:day
select(flights,starts_with("s"))
select(flights,ends_with("e"))
select(flights,matches("time"))
select(flights,matches("(.)\\1"))

rename(flights,tail_num=tailnum) ##對(duì)變量進(jìn)行重命名
select(flights,-(month:day),everything()) ## 結(jié)合everything()輔助函數(shù) 對(duì)某幾列提前, 置后同理
select(flights, hour:time_hour,everything())
###exercise
select(flights,year,year,year)
select(flights,one_of(c("year","month","day","dep_delay")))
select(flights,contains("TIME"))

  1. 使用mutate()添加新的列/變量:
    • mutate() 新列添加到已有列的后面;
    • transmute 只保留新的變量革为。
    • 常用的運(yùn)算符號(hào):求整%/%扭粱,求余%%,偏移函數(shù)lead(), lag()震檩,累加和和滾動(dòng)聚合琢蛤,邏輯比較,排秩抛虏。
# mutate() 在tibble后 添加新變量/列
flights_sml <- select(flights,year:day,matches("_delay"),distance,air_time)
flights_sml
mutate(flights_sml,flying_delay=arr_delay-dep_delay,speed=distance/air_time * 60 )
flights_sml
transmute(flights,gain=arr_delay-dep_delay,hour=air_time/60,gain_per_hour=gain/hour)

mutate(flights,dep_time=((dep_time%/%100 * 60)+(dep_time%%100))) ## 會(huì)直接在flights中改動(dòng)dep_time
flights
transmute(flights,air_time,duration=(arr_time-dep_time),arr_delay)
1:3+1:10
1:10+1:3
1:10
?cos
  1. 使用summarize()進(jìn)行分組摘要:
    • group_by一起使用博其,將整個(gè)數(shù)據(jù)集的單位縮小為單個(gè)分組。
# 使用summarize()進(jìn)行分組摘要
by_year <- group_by(flights,year,month)
summarise(by_year,delay=mean(arr_delay-dep_delay,na.rm = T))
####查看
(delay_byDay <- group_by(flights,month) %>%summarise(delay_time=mean(dep_delay,na.rm = T))) %>% ggplot(mapping = aes(x=month,y=delay_time))+geom_point()+geom_smooth(se=F)

  1. 利用管道符%>%對(duì)數(shù)據(jù)綜合操作:
    • 綜合就是flights %>% group_by(~) %>% summarize(mean(~~,na.rm=T)) %>% filter(~) %>% ggplot(aes())+geom_~()
    • 缺失值:na.rm=T迂猴,缺失值計(jì)算會(huì)都變成缺失值慕淡,可利用filter(!is.na(dep_delay),!is.na(arr_delay))
    • 常用的摘要函數(shù):n()/sum()/mean()
    • 中位數(shù)median(),分散程度sd()/IQR()/mad()
    • 計(jì)數(shù) n(),計(jì)算唯一值的數(shù)量n_distinct()去重復(fù)后唯一值的計(jì)數(shù)沸毁,count()可快速的計(jì)算峰髓。
    • 邏輯值的計(jì)數(shù) 和 比例summarize(n_early=sum(dep_time<50)),sum找出大于x的True的數(shù)量,mean會(huì)計(jì)算比例息尺。
# 使用summarize()進(jìn)行分組摘要
by_year <- group_by(flights,year,month)
summarise(by_year,delay=mean(arr_delay-dep_delay,na.rm = T))
####查看
(delay_byDay <- group_by(flights,month) %>%summarise(delay_time=mean(dep_delay,na.rm = T))) %>% ggplot(mapping = aes(x=month,y=delay_time))+geom_point()+geom_smooth(se=F)

### 使用管道組合多種操作
(delay_by_dest <- group_by(flights,dest)%>%summarise(count=n(),delay_time=mean(dep_time,na.rm = T), dist=mean(distance,na.rm = T))) %>% filter(count>20,dest!="HNL") %>% ggplot(mapping = aes(x=dist,y=delay_time))+geom_point(aes(size=count))+geom_smooth(se=F,color="darkblue")

## 管道符 %>%
(delay <- summarise(by_dest,count=n(),dist=mean(distance,na.rm = T),delay=mean(arr_delay,na.rm = T))) ### count=n()統(tǒng)計(jì)分組携兵,就是dest城市的個(gè)數(shù)
delay <- filter(delay,count>20,dest!="HNL")## 篩掉飛行記錄少的,特殊機(jī)場(chǎng)
ggplot(data = delay,mapping = aes(x=dist,y=delay))+geom_point(aes(size=count),alpha=1/3)+geom_smooth(se=F,color="darkblue")
(delay_by_dest <- group_by(flights,dest)%>%summarise(count=n(),delay_time=mean(dep_time,na.rm = T), dist=mean(distance,na.rm = T))) %>% filter(count>20,dest!="HNL") %>% ggplot(mapping = aes(x=dist,y=delay_time))+geom_point(aes(size=count))+geom_smooth(se=F,color="darkblue")
##查看飛機(jī)型號(hào)與延誤時(shí)間的關(guān)系
flights %>% group_by(tailnum) %>%summarise(count=n(),delay_time=mean(arr_delay,na.rm = T)) %>%arrange(delay_time) %>%ggplot(mapping = aes(x=delay_time))+geom_freqpoly(binwidth = 10)
##查看航班數(shù)量 與 飛機(jī)延誤時(shí)間的關(guān)系:航班數(shù)量少時(shí)搂誉,平均延誤時(shí)間的變動(dòng)特別大
delay_time %>% filter(count>25) %>% ggplot(mapping = aes(x=count,y=delay_time))+geom_point(alpha=1/5)
##其他常用的統(tǒng)計(jì)函數(shù)
flights_not_cancelled %>% group_by(dest) %>% summarise(carrier=n())
flights_not_cancelled %>% group_by(dest) %>% summarise(carriers=n_distinct(carrier))
flights_not_cancelled %>% group_by(tailnum) %>% summarise(sum(distance))
 
###exercises
##### 查看哪個(gè)航空公司延誤時(shí)間最長(zhǎng)
flights_not_cancelled %>% group_by(carrier) %>% summarise(count=n(),arr_delay_time=mean(arr_delay)) %>% arrange(desc(arr_delay_time)) %>% ggplot(mapping = aes(x=carrier,y=arr_delay_time))+geom_point(aes(size=count))

  1. 取消分組:ungroup()函數(shù):
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徐紧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炭懊,更是在濱河造成了極大的恐慌并级,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侮腹,死亡現(xiàn)場(chǎng)離奇詭異嘲碧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凯旋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)呀潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人至非,你說(shuō)我怎么就攤上這事钠署。” “怎么了荒椭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵谐鼎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我趣惠,道長(zhǎng)狸棍,這世上最難降的妖魔是什么身害? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮草戈,結(jié)果婚禮上塌鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己唐片,他們只是感情好丙猬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著费韭,像睡著了一般茧球。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上星持,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天抢埋,我揣著相機(jī)與錄音,去河邊找鬼督暂。 笑死揪垄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的损痰。 我是一名探鬼主播福侈,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酒来,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卢未!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起堰汉,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辽社,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后翘鸭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滴铅,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年就乓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汉匙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡生蚁,死狀恐怖噩翠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邦投,我是刑警寧澤伤锚,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站志衣,受9級(jí)特大地震影響屯援,放射性物質(zhì)發(fā)生泄漏猛们。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一狞洋、第九天 我趴在偏房一處隱蔽的房頂上張望弯淘。 院中可真熱鬧,春花似錦吉懊、人聲如沸耳胎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怕午。三九已至,卻和暖如春淹魄,著一層夾襖步出監(jiān)牢的瞬間郁惜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工甲锡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兆蕉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓缤沦,卻偏偏與公主長(zhǎng)得像虎韵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缸废,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 寫(xiě)在前面 ggplot2 是一個(gè)功能強(qiáng)大且靈活的R包 包蓝,由Hadley Wickham 編寫(xiě),其用于生成優(yōu)雅的圖...
    Boer223閱讀 27,929評(píng)論 0 67
  • 劉小澤開(kāi)始寫(xiě)于18.9.4晚企量,這必定是一個(gè)持續(xù)性更新的過(guò)程昨天jimmy一發(fā)朋友圈测萎,單篇閱讀量很快超過(guò)了我們的關(guān)注...
    劉小澤閱讀 1,179評(píng)論 0 12
  • 今天發(fā)現(xiàn)了不一樣的美,簡(jiǎn)簡(jiǎn)單單 熟悉的咖啡吧届巩,別樣的情調(diào) 熟悉的廣場(chǎng)硅瞧,不一樣的燈光 熟悉的湖,不一樣的心情 生活本...
    Mr玉民閱讀 223評(píng)論 0 0
  • 其實(shí)本來(lái)就想下班后好好寫(xiě)東西給你,誰(shuí)知道發(fā)生了被盜刷這種事瘾英。唉枣接。 我想說(shuō),你才是我的動(dòng)力方咆。沒(méi)有你月腋,我是不可能過(guò)會(huì)計(jì)...
    蒼洱皚皚白首不易閱讀 312評(píng)論 0 1
  • 心中就像被人絞 心傷唯有自己曉 可憐自己是懦夫 只能借酒澆心傷
    Crazy辰塵閱讀 184評(píng)論 0 0