R數據科學--第九章 dplyr處理關係數據

2021-03-02 生信星球
1.簡介

• 合併連接:向數據框中加入新變量,新變量的值是另一個數據框中的匹配觀測。
• 篩選連接:根據是否匹配另一個數據框中的觀測,篩選數據框中的觀測。
• 集合操作:將觀測作為集合元素來處理

2. nycflights13

除了flight外,還有另外四個相關數據框。分別描述航空公司、機場、飛機、天氣。
我喜歡以標準表格的形式觀察每個數據框。

library(tidyverse)
library(nycflights13)
View(airlines)
View(airports)
View(planes)
View(weather)

airlines
airports
planes
weather
關係

flights 與 planes 通過單變量 tailnum 相連;

flights 與 airlines 通過變量 carrier 相連;

flights 與 airports 通過 origin 和 dest、faa相連;

flights 與 weather 通過變量 origin(位置)以及 year、month、day 和 hour(時間)相連

3.鍵

用於連接每對數據表的變量稱為鍵。鍵是能唯一標識觀測的變量(或變量集合)。
主鍵:唯一標識其所在數據表中的觀測。例如,planes$tailnum 是一個主鍵,因為其可
以唯一標識planes 表中的每架飛機。
外鍵:唯一標識另一個數據表中的觀測。例如,flights$tailnum 是一個外鍵,因為其
出現在flights 表中,並可以將每次航班與唯一一架飛機匹配。
驗證主鍵能否真正唯一標識每個觀測。
(這句話的意思相當於檢測這個主鍵能否起到和行號一樣的作用,強調唯一)

planes %>%
count(tailnum) %>%
filter(n > 1)



planes %>%
  group_by(tailnum) %>%
  filter(n() > 1) %>%
  nrow() 

對主鍵進行分組計數,再篩選出現次數>1的行,結果是0則說明找到的主鍵正確。

練習
(1) 向flights 添加一個代理鍵。

flights %>%
  arrange(year, month, day, sched_dep_time, carrier, flight) %>%
  mutate(flight_id = row_number()) %>%
  glimpse() #瞅一瞅

核心操作就是mutate(flight_id = row_number()),答案先進行了一個排序,是賦予行號一定的意義。
(2) 找出以下各數據集中的鍵。
a. Lahman::Batting

install.packages("Lahman")
library(Lahman)
Lahman::Batting %>%
   group_by(playerID, yearID, stint) %>%
   filter(n() > 1) %>%
   nrow()

Lahman::Batting %>%
  count(playerID, yearID, stint) %>%
  filter(n > 1)

以此為例,如果直接使用產生報錯,是因為你沒有安裝對應的包。雙冒號前面是包名,後面是數據框名,這兩種方法任選其一,挨個篩選和組合你猜測的主鍵。
b. babynames::babynames
year, sex, name
c. nasaweather::atmos
lat, long, year, month
d. fueleconomy::vehicles
id
e. ggplot2::diamonds
(這個沒有)

4.合併連接

簡化flights-》flights2

flights2 <- flights %>%
select(year:day, hour, origin, dest, tailnum, carrier)
View(flights2)

將航空公司全名加入flights2-》flights3

flight3<-flights2 %>%
select(-origin, -dest) %>%
left_join(airlines, by = "carrier")
View(flights3)

flights2 %>%
select(-origin, -dest) %>%
mutate(name = airlines$name[match(carrier, airlines$carrier)])


注意:left_join和其他的dplyr操作一樣,不改變原來的數據框,如果不給它賦值,就只是在控制臺展示一下,雁過無痕。所以在這裡我給它賦值為flights3。(1)內連接innerjoin

取交集,未匹配到的行會被丟棄。

(2)外連接

*letf_join左連接:保留第一個數據框的所有觀測。(最常用)
right_join右連接:保留第二個數據框中的所有觀測
full_join全連接:保留兩個數據框中的所有觀測。


中文書籍這裡有問題,韋恩圖的顏色被弱化了。看這裡 (3)重複鍵

連接時會得到所有的組合,通常意味著出現錯誤。

(4)定義鍵列

連接時,會自動尋找兩個數據框中共有的列作為鍵來進行匹配(自然連接),也可自行指定鍵列

flights2 %>%
left_join(weather)
flights2 %>%
left_join(planes, by = "tailnum")

當對應的列名不同時必須明確指出,例如:airportsfaa與flightsorigin和flights$dest都可匹配,且列名不同,需要用by = c("a" = "b")定義

flights2 %>%
left_join(airports, c("dest" = "faa"))
flights2 %>%
left_join(airports, c("origin" = "faa"))

5.篩選連接

semi_join(x, y)半連接:保留x 表中與y 表中的觀測相匹配的所有觀測。
anti_join(x, y)反連接:丟棄x 表中與y 表中的觀測相匹配的所有觀測。
篩選最受歡迎的10個目的地(在dest列出現次數最多的10個)

(top_dest <- flights %>%
count(dest, sort = TRUE) %>%
head(10))

找出飛往這些目的地的所有航班

flights %>%
filter(dest %in% top_dest$dest)

用到了%in%取子集操作。

6.問題

(1)找出主鍵
(2)主鍵不能有缺失值
(3)檢查外鍵是否與另一張表的主鍵相匹配(anti_join)

7.集合

intersect(x, y)
返回既在x 表,又在y 表中的觀測。
union(x, y)
返回x 表或y 表中的唯一觀測。
setdiff(x, y)
返回在x 表,但不在y 表中的觀測。
集合跟連接的區別是:
用於求集合的列名全都相同,求集合不改變列數,改變行數。
用於做連接的列名只有部分一到幾列相同,做連接增加列數。

總結第9章dplyr處理關係.png

相關焦點

  • 深入對比數據科學工具箱: SparkR vs Sparklyr
    Sparklyr 由 RStudio 社區維護,通過深度集成 RStudio 的方式,提供更易於擴展和使用的方法,更強調統計特性與機器學習,實現本地與分布式代碼的一致性,通常會比 SparkR 延遲1-2個版本,從使用上看接近於dplyr。由於 SparkR 與 Sparklyr 都是 Spark API 的封裝,故二者在計算性能上沒有顯著差異。
  • R語言dplyr包學習筆記(吐血整理宇宙無敵詳細版) - CDA數據分析師
    出處:AI入門學習dplyr包主要用於數據清洗和整理,主要功能有:行選擇、列選擇、統計匯總、窗口函數、數據框交集等是非常高效、友好的數據處理包,學清楚了,基本上數據能隨意玩弄,對的,隨意玩弄,簡直大大提高數據處理及分析效率。我以為,該包是數據分析必學包之一。學習過程需要大量試驗,領悟其中設計的精妙之處。
  • 小白學數據小抄放送 Python,R,大數據,機器學習
    我們這一期小白學數據專欄篩選了28份小抄,根據覆蓋面、清晰度和內容實用性,分別涵蓋了機器學習、數據科學、概率、SQL和大數據的領域。裡面包括了你所需要的工具、流程、各種包和語言。 第一部分 數據科學專場:Python小抄表 小白:我們先來回顧一下之前聊過的Python。
  • 小白學數據28張小抄放送 Python,R,大數據,機器學習
    目錄: 1.數據科學專場: Python小抄表 2.數據科學專場:R的小抄表 3.機器學習小抄表 4.概率小抄表 5.SQL和MySQL小抄表 6.大數據小抄表 我們這一期小白學數據專欄篩選了28份小抄,根據覆蓋面、清晰度和內容實用性,分別涵蓋了機器學習、數據科學、概率、SQL和大數據的領域。裡面包括了你所需要的工具、流程、各種包和語言。 數據科學專場:Python小抄表 小白:我們先來回顧一下之前聊過的Python。幫我們這樣的小白介紹一下有什麼Python方面的小抄吧?
  • 在R中子集化數據框的5種方法
    在 R 中對數據框(data frame)進行子集化的最基本方法是使用方括號:example[x, y]example 是我們想要從中提取子集的數據框;』x』是我們想要提取的子集的行;』y』 是我們想要提取的子集的列。 讓我們從網上提取一些數據,看看它是如何在真實的數據集上實現的。
  • 數據科學(Data Science)自學指南 2020 版(一)
    什麼是數據科學? 呃,這是一個很難回答的問題。事實上,不同的公司對數據科學的定義各不相同,導致這個術語變得模稜兩可,難以捉摸。有人說數據科學是編程,有人說是數學,還有人說數據科學就是要理解數據。事實證明,這些說法都對。在我看來,我最認同的定義是—— 數據科學是利用從數學、計算機科學、領域知識汲取的技術和理論的交叉學科領域。[1]
  • 用SQL玩轉R數據框
    技多不壓身,跨界融合更是對十八般武藝的一種考驗,SQL是一種技能,一樣可以在R的舞臺上展示獨特的魅力,一起看看SQL處理數據的長袖有怎麼樣的舞藝。
  • 用於多關係數據的圖神經網絡R-GCNs
    本文描述如何擴展圖神經網絡(GNNs)的最簡單公式,以編碼知識圖譜(KGs)等多關係數據的結構。  這篇文章包括4個主要部分:  1.介紹了描述KGs特性的多關係數據的核心思想;  1. GNN體系結構中包含的標準組件摘要;  1. gnn最簡單公式的描述,稱為圖卷積網絡(GCNs);  1. 討論如何以關係圖卷積網絡(R-GCN)的形式擴展GCN層,對多關係數據進行編碼。知識圖作為多關係數據  基本圖結構包括用於連接節點的無向,無類型和唯一邊。
  • 高清圖解:神經網絡、機器學習、數據科學一網打盡|附PDF
    今天,新智元要為大家推薦一個超實用、顏值超高的神經網絡+機器學習+數據科學和Python的完全圖解,文末附有高清PDF版連結,支持下載、列印,推薦大家可以做成滑鼠墊、桌布,或者印成手冊等隨手攜帶,隨時翻看。
  • 關於數據科學中數學和統計學的完全指南
    數學和統計學對學習數據科學至關重要,因為這些學科構成了所有機器學習算法的基礎。成為一名數據科學家,除了對程式語言要有很好的了解,還必須要掌握機器學習算法、數據驅動方法。但數據科學並不只涉及這些領域。在本文中,您將了解數學和統計學對數據科學的重要意義以及如何將其用於建立機器學習模型。
  • 想從事數據科學?統計學60分怎麼夠!
    N年後,看到數據科學發展得風生水起,並且跟數學息息相關,我暗自發誓:錯過的青春和數學我都要補回來!於是勾搭了一位數學科學家,想找他開開光。他噗嗤一笑,用飽含同情的目光看著我,鄭重地將《基本數學和數學科學統計教程》交到我手上。看了兩頁後,小編卒……沒想到,除了數學之外,想要入門數據科學,統計學也是一座必須翻過去的大山。
  • ...最大的實體關係抽取數據集!清華大學自然語言處理團隊發布 FewRel
    FewRel 網站地址:https://thunlp.github.io/fewrel.html 論文地址:http://aclweb.org/anthology/D18-1514 關係抽取(relation extraction)是自然語言處理中的一項重要任務,其通過從純文本中抽取關係事實,來構建和擴充知識圖譜(knowledge
  • R與生物專題 | 第六講 R-數據正態分布檢驗
    在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。
  • 一文讀懂ggplot2數據可視化
    coordinate system: 數據可視化,主要是在二維平面上表示數據的關係,所用坐標系一般為平面直角坐標,有時會用到極坐標、地圖投影等。ggplot2軟體默認使用平面直角坐標。geoms: 包括geoms_開頭的各種對象,用來繪製各種基本組件,包括點、線、面、多邊形、柱狀圖、箱線圖等。
  • r 秩和檢驗 - CSDN
    將數據導入R.可以使用dplyr包。install.packages("dplyr")library(dplyr)group_by(my_data, group) %>% summarise( count = n(), median = median(weight, na.rm = TRUE), IQR = IQR(weight, na.rm
  • 數據分析?從一開始你就錯了!探索性數據分析套路解讀
    為了方便說明,會用到Kaggle上最近較火的Zillow房產數據分析比賽。讀取數據通常情況下,用於導入數據文件的方法有三類。分別是base R 中的read.csv(),readr library read_csv() 和data.table library 中的fread()。
  • Polarr 想用免費專業圖片處理工具,在數據的幫助下幫助專家和小白...
    根據 Pollar 團隊展示的數據:在美國,Instagram、Photor、Afterlight 等工具類應用的用戶有 4500 萬人,而 Lightroom、DXO Optics Pro 的用戶僅有 500 萬。在整個圖片處理應用市場中,每年又有 200 萬新人加入。
  • 數據科學不僅僅是數據:培養業務知識和關係
    來源:CPDA數據分析師網 / 作者:數據君 / 從硬科學到數據科學 通過臨時代理機構在所有地方開始工作,當我離開學術研究並搬到波士頓時,我去了一家臨時公司,並在一家直銷公司找到了流通分析師,我利用這段經驗轉到了一家金融服務公司
  • R語言常用數據處理代碼整理
    在收集好臨床數據,經過初步處理後,就可以導入到R軟體中去。R在進行統計分析前,常常需要對數據進行處理,使數據結構符合我們的統計需要,比如說變量因子化、創建新變量、變量類型轉化等等,因此數據處理是R進行統計分析前很重要的步驟。現基於各類R語言入門書整理R中常見的數據處理代碼。目 錄1. 預覽數據集2.
  • 整理了一些自己可能會用到的R包~20210125更新
    更新於2021年1月25號gtable生信菜鳥團 公眾號分享的文章 R包:gtable包用於處理ggplot2圖像ggrgl畫三維圖 在 微生物生信 看到的推文 ggrgl:用ggplot做3D圖表rayshader公眾號有人留言說這個包做ppt很好用,我查了一下,大體看了一眼幫助文檔