Khóa học
Bài hướng dẫn này là bản viết lại của một buổi Facebook Live chúng tôi thực hiện cách đây một tuần. Chủ đề là "Giới thiệu về Tidyverse" và hướng dẫn này sẽ đưa bạn đi qua toàn bộ nội dung chúng tôi đã trình bày trong phiên code-along!
Bạn có thể xem phần đầu của phiên tại đây:
Và phần hai tại đây:
Lưu ý bạn có thể tìm toàn bộ mã cho phiên này trong kho lưu trữ này.
Tidyverse cốt lõi bao gồm các gói mà bạn có khả năng dùng trong phân tích dữ liệu hàng ngày, như ggplot2 để trực quan hóa dữ liệu và dplyr để xử lý dữ liệu. Bạn sẽ tập trung vào hai gói này trong hướng dẫn này.
Hãy nhớ rằng một package về bản chất là một bộ công cụ để thao tác với dữ liệu. Nếu bạn muốn biết thêm về package trong R, hãy xem hướng dẫn này.
Để tìm hiểu thêm về Tidyverse, hãy xem khóa học Introduction to Tidyverse của David Robinson trên DataCamp và tài nguyên Learn the Tidyverse.

Bắt đầu
Để khởi động, bạn nên cài đặt tidyverse nếu chưa làm:
# Install the tidyverse
# install.packages("tidyverse")
Bây giờ bạn đã cài đặt tidyverse, đến lúc nạp dữ liệu và xem qua một số quan sát.
Trong hướng dẫn này, bạn sẽ khám phá bộ dữ liệu Titanic, trong đó mỗi quan sát là một người và mỗi biến là một đặc trưng như Name, Age và Survived (hoặc không).
Nạp dữ liệu như sau:
# Import the Tidyverse
library(tidyverse)
# Import data
passengers <- read.csv("data/train.csv")
# Check out the first several observations of your dataframe
passengers
## PassengerId Survived Pclass
## 1 1 0 3
## 2 2 1 1
## 3 3 1 3
## 4 4 1 1
## 5 5 0 3
## 6 6 0 3
## Name Sex Age SibSp
## 1 Braund, Mr. Owen Harris male 22 1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1
## 3 Heikkinen, Miss. Laina female 26 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1
## 5 Allen, Mr. William Henry male 35 0
## 6 Moran, Mr. James male NA 0
## Parch Ticket Fare Cabin Embarked
## 1 0 A/5 21171 7.2500 S
## 2 0 PC 17599 71.2833 C85 C
## 3 0 STON/O2. 3101282 7.9250 S
## 4 0 113803 53.1000 C123 S
## 5 0 373450 8.0500 S
## 6 0 330877 8.4583 Q
Lưu ý rằng đường dẫn bạn cung cấp cho read.csv() có thể thay đổi tùy thiết lập của bạn. Nếu bạn muốn giữ nguyên đường dẫn tệp, bạn luôn có thể xem cấu trúc thư mục của dự án này trong kho GitHub của chúng tôi, tại đây.
Cũng lưu ý rằng nếu bạn muốn biết thêm về tất cả biến bạn thấy sau khi chạy passengers, bạn có thể xem mô tả bộ dữ liệu.
Để có cái nhìn tổng quan về dữ liệu, bạn có thể dùng hàm summary():
# Summarize titanic
summary(passengers)
## PassengerId Survived Pclass
## Min. : 1.0 Min. :0.0000 Min. :1.000
## 1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000
## Median :446.0 Median :0.0000 Median :3.000
## Mean :446.0 Mean :0.3838 Mean :2.309
## 3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :891.0 Max. :1.0000 Max. :3.000
##
## Name Sex Age
## Abbing, Mr. Anthony : 1 female:314 Min. : 0.42
## Abbott, Mr. Rossmore Edward : 1 male :577 1st Qu.:20.12
## Abbott, Mrs. Stanton (Rosa Hunt) : 1 Median :28.00
## Abelson, Mr. Samuel : 1 Mean :29.70
## Abelson, Mrs. Samuel (Hannah Wizosky): 1 3rd Qu.:38.00
## Adahl, Mr. Mauritz Nils Martin : 1 Max. :80.00
## (Other) :885 NA's :177
## SibSp Parch Ticket Fare
## Min. :0.000 Min. :0.0000 1601 : 7 Min. : 0.00
## 1st Qu.:0.000 1st Qu.:0.0000 347082 : 7 1st Qu.: 7.91
## Median :0.000 Median :0.0000 CA. 2343: 7 Median : 14.45
## Mean :0.523 Mean :0.3816 3101295 : 6 Mean : 32.20
## 3rd Qu.:1.000 3rd Qu.:0.0000 347088 : 6 3rd Qu.: 31.00
## Max. :8.000 Max. :6.0000 CA 2144 : 6 Max. :512.33
## (Other) :852
## Cabin Embarked
## :687 : 2
## B96 B98 : 4 C:168
## C23 C25 C27: 4 Q: 77
## G6 : 4 S:644
## C22 C26 : 3
## D : 3
## (Other) :186
Bây giờ hãy làm tương tự bằng cách dùng pipe %>%, một trong những công cụ hữu ích nhất trong tidyverse:
# Summarize titanic using a pipe
passengers %>%
summary()
## PassengerId Survived Pclass
## Min. : 1.0 Min. :0.0000 Min. :1.000
## 1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000
## Median :446.0 Median :0.0000 Median :3.000
## Mean :446.0 Mean :0.3838 Mean :2.309
## 3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :891.0 Max. :1.0000 Max. :3.000
##
## Name Sex Age
## Abbing, Mr. Anthony : 1 female:314 Min. : 0.42
## Abbott, Mr. Rossmore Edward : 1 male :577 1st Qu.:20.12
## Abbott, Mrs. Stanton (Rosa Hunt) : 1 Median :28.00
## Abelson, Mr. Samuel : 1 Mean :29.70
## Abelson, Mrs. Samuel (Hannah Wizosky): 1 3rd Qu.:38.00
## Adahl, Mr. Mauritz Nils Martin : 1 Max. :80.00
## (Other) :885 NA's :177
## SibSp Parch Ticket Fare
## Min. :0.000 Min. :0.0000 1601 : 7 Min. : 0.00
## 1st Qu.:0.000 1st Qu.:0.0000 347082 : 7 1st Qu.: 7.91
## Median :0.000 Median :0.0000 CA. 2343: 7 Median : 14.45
## Mean :0.523 Mean :0.3816 3101295 : 6 Mean : 32.20
## 3rd Qu.:1.000 3rd Qu.:0.0000 347088 : 6 3rd Qu.: 31.00
## Max. :8.000 Max. :6.0000 CA 2144 : 6 Max. :512.33
## (Other) :852
## Cabin Embarked
## :687 : 2
## B96 B98 : 4 C:168
## C23 C25 C27: 4 Q: 77
## G6 : 4 S:644
## C22 C26 : 3
## D : 3
## (Other) :186
Mẹo: nếu bạn muốn biết thêm về cách dùng toán tử pipe trong R, bạn có thể xem hướng dẫn này.
Hãy làm tương tự sau khi loại bỏ các quan sát có giá trị khuyết. Gợi ý: bạn có thể nối nhiều pipe!
# Summarize titanic after dropping na
passengers %>%
drop_na() %>%
summary()
## PassengerId Survived Pclass
## Min. : 1.0 Min. :0.0000 Min. :1.000
## 1st Qu.:222.2 1st Qu.:0.0000 1st Qu.:1.000
## Median :445.0 Median :0.0000 Median :2.000
## Mean :448.6 Mean :0.4062 Mean :2.237
## 3rd Qu.:677.8 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :891.0 Max. :1.0000 Max. :3.000
##
## Name Sex Age
## Abbing, Mr. Anthony : 1 female:261 Min. : 0.42
## Abbott, Mr. Rossmore Edward : 1 male :453 1st Qu.:20.12
## Abbott, Mrs. Stanton (Rosa Hunt) : 1 Median :28.00
## Abelson, Mr. Samuel : 1 Mean :29.70
## Abelson, Mrs. Samuel (Hannah Wizosky): 1 3rd Qu.:38.00
## Adahl, Mr. Mauritz Nils Martin : 1 Max. :80.00
## (Other) :708
## SibSp Parch Ticket Fare
## Min. :0.0000 Min. :0.0000 347082 : 7 Min. : 0.00
## 1st Qu.:0.0000 1st Qu.:0.0000 3101295 : 6 1st Qu.: 8.05
## Median :0.0000 Median :0.0000 347088 : 6 Median : 15.74
## Mean :0.5126 Mean :0.4314 CA 2144 : 6 Mean : 34.69
## 3rd Qu.:1.0000 3rd Qu.:1.0000 382652 : 5 3rd Qu.: 33.38
## Max. :5.0000 Max. :6.0000 S.O.C. 14879: 5 Max. :512.33
## (Other) :679
## Cabin Embarked
## :529 : 2
## B96 B98 : 4 C:130
## C23 C25 C27: 4 Q: 28
## G6 : 4 S:554
## C22 C26 : 3
## D : 3
## (Other) :167
Bạn có thể đã nhận thấy sự nhất quán về mặt phong cách trong đoạn mã bạn viết ở trên. Đó là vì bạn đang tuân theo một hướng dẫn phong cách. Trong khoa học dữ liệu và lập trình/ncoding nói chung, việc làm quen với một hướng dẫn phong cách càng sớm càng tốt là rất quan trọng. Như Hadley Wickham nói trong hướng dẫn phong cách của tidyverse,
Good coding style is like correct punctuation: you can manage without it, butitsuremakesthingseasiertoread.
Ở phần tiếp theo, bạn sẽ xử lý dữ liệu với dplyr để lọc, sắp xếp và tạo đặc trưng mới bằng cách biến đổi từ các đặc trưng cũ.
Xử lý dữ liệu của bạn
Bây giờ là lúc khám phá dữ liệu và thu được một số hiểu biết ban đầu về bộ dữ liệu. Bạn sẽ dùng các động từ của dplyr như filter(), arrange() và mutate(), vốn làm đúng như tên gọi của chúng.
Giả sử bạn muốn chọn một tập quan sát cụ thể, chẳng hạn những quan sát có "Sex" là 'female'. dplyr cho phép chúng ta làm điều này một cách trực quan và bằng một ngôn ngữ phản chiếu cách bạn nghĩ và nói về dữ liệu.
Động từ filter chọn ra những quan sát khớp với điều kiện. Xem nó hoạt động:
# Filter to get all "male" rows
passengers %>%
filter(Sex == "male")
## PassengerId Survived Pclass Name Sex Age
## 1 1 0 3 Braund, Mr. Owen Harris male 22
## 2 5 0 3 Allen, Mr. William Henry male 35
## 3 6 0 3 Moran, Mr. James male NA
## 4 7 0 1 McCarthy, Mr. Timothy J male 54
## 5 8 0 3 Palsson, Master. Gosta Leonard male 2
## 6 13 0 3 Saundercock, Mr. William Henry male 20
## SibSp Parch Ticket Fare Cabin Embarked
## 1 1 0 A/5 21171 7.2500 S
## 2 0 0 373450 8.0500 S
## 3 0 0 330877 8.4583 Q
## 4 0 0 17463 51.8625 E46 S
## 5 3 1 349909 21.0750 S
## 6 0 0 A/5. 2151 8.0500 S
Khi xem kết quả đoạn mã trên, bạn sẽ thấy có vẻ như nhiều đàn ông đã không sống sót sau vụ chìm tàu RMS Titanic. Điều này thú vị, và bạn sẽ khám phá kỹ hơn sau trong hướng dẫn này!
Lưu ý bạn có thể đọc mã dplyr như một câu: lấy dữ liệu của bạn rồi (%>%) lọc theo điều kiện giới tính là nam. Mã trong đoạn trên không làm thay đổi data frame gốc. filter(Sex = "male") là một lỗi phổ biến (Hugo cũng đã mắc lỗi này!); có một hướng dẫn lỗi tidyverse rất hay.
# Filter to get all "female" rows
passengers %>%
filter(Sex == "female")
## PassengerId Survived Pclass
## 1 2 1 1
## 2 3 1 3
## 3 4 1 1
## 4 9 1 3
## 5 10 1 2
## 6 11 1 3
## Name Sex Age SibSp
## 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1
## 2 Heikkinen, Miss. Laina female 26 0
## 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1
## 4 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27 0
## 5 Nasser, Mrs. Nicholas (Adele Achem) female 14 1
## 6 Sandstrom, Miss. Marguerite Rut female 4 1
## Parch Ticket Fare Cabin Embarked
## 1 0 PC 17599 71.2833 C85 C
## 2 0 STON/O2. 3101282 7.9250 S
## 3 0 113803 53.1000 C123 S
## 4 2 347742 11.1333 S
## 5 0 237736 30.0708 C
## 6 1 PP 9549 16.7000 G6 S
Có vẻ phụ nữ có khả năng sống sót cao hơn sau thảm họa Titanic, ít nhất là theo cảm nhận ban đầu.
Khi khám phá dữ liệu, bạn nên đặt và trả lời những câu hỏi bạn quan tâm trong khả năng tốt nhất! Lúc này, bạn có thể muốn arrange() các quan sát theo Fare tăng dần để xem có phát hiện xu hướng nào không. Bạn có thể dùng động từ arrange() để làm điều này:
# Arrange by increasing Fare
passengers %>%
arrange(Fare)
## PassengerId Survived Pclass Name Sex Age
## 1 180 0 3 Leonard, Mr. Lionel male 36
## 2 264 0 1 Harrison, Mr. William male 40
## 3 272 1 3 Tornquist, Mr. William Henry male 25
## 4 278 0 2 Parkes, Mr. Francis "Frank" male NA
## 5 303 0 3 Johnson, Mr. William Cahoone Jr male 19
## 6 414 0 2 Cunningham, Mr. Alfred Fleming male NA
## SibSp Parch Ticket Fare Cabin Embarked
## 1 0 0 LINE 0 S
## 2 0 0 112059 0 B94 S
## 3 0 0 LINE 0 S
## 4 0 0 239853 0 S
## 5 0 0 LINE 0 S
## 6 0 0 239853 0 S
Nhiều người trả ít tiền hơn đã không sống sót sau thảm họa. Đó là điều thú vị bạn vừa phát hiện chỉ bằng cách sắp xếp lại dữ liệu!
Bạn cũng có thể arrange theo Fare giảm dần:
# Arrange by decreasing Fare
passengers %>%
arrange(desc(Fare))
## PassengerId Survived Pclass Name Sex
## 1 259 1 1 Ward, Miss. Anna female
## 2 680 1 1 Cardeza, Mr. Thomas Drake Martinez male
## 3 738 1 1 Lesurer, Mr. Gustave J male
## 4 28 0 1 Fortune, Mr. Charles Alexander male
## 5 89 1 1 Fortune, Miss. Mabel Helen female
## 6 342 1 1 Fortune, Miss. Alice Elizabeth female
## Age SibSp Parch Ticket Fare Cabin Embarked
## 1 35 0 0 PC 17755 512.3292 C
## 2 36 0 1 PC 17755 512.3292 B51 B53 B55 C
## 3 35 0 0 PC 17755 512.3292 B101 C
## 4 19 3 2 19950 263.0000 C23 C25 C27 S
## 5 23 3 2 19950 263.0000 C23 C25 C27 S
## 6 24 3 2 19950 263.0000 C23 C25 C27 S
Quả thật có nhiều người sống sót ở nhóm trả cao nhất!
Đôi khi bạn có thể muốn tạo biến mới. Bạn biết biến Parch là số cha mẹ và con cái, trong khi SibSp là số anh chị em và vợ/chồng. Bạn có thể cộng chúng để có biến mới FamSize. Đây là kỹ thuật tạo đặc trưng và thường chiếm phần lớn trong máy học!
Bây giờ, để tạo biến mới, bạn mutate() các biến gốc thành biến mới.
# Create new column FamSize (size of family)
passengers %>%
mutate(FamSize = Parch + SibSp)
## PassengerId Survived Pclass
## 1 1 0 3
## 2 2 1 1
## 3 3 1 3
## 4 4 1 1
## 5 5 0 3
## 6 6 0 3
## Name Sex Age SibSp
## 1 Braund, Mr. Owen Harris male 22 1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1
## 3 Heikkinen, Miss. Laina female 26 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1
## 5 Allen, Mr. William Henry male 35 0
## 6 Moran, Mr. James male NA 0
## Parch Ticket Fare Cabin Embarked FamSize
## 1 0 A/5 21171 7.2500 S 1
## 2 0 PC 17599 71.2833 C85 C 1
## 3 0 STON/O2. 3101282 7.9250 S 0
## 4 0 113803 53.1000 C123 S 1
## 5 0 373450 8.0500 S 0
## 6 0 330877 8.4583 Q 0
Lưu ý rằng mutate() có thể dùng để tạo cột mới nhưng cũng có thể sửa đổi các cột hiện có, giống như cách một đột biến có thể xảy ra từ góc nhìn sinh học. Không hoàn toàn chính xác nhưng là một cách hay để ngữ cảnh hóa lựa chọn động từ.
Bây giờ bạn đã có biến bổ sung, bạn có thể đặt câu hỏi khác, như "Liệu gia đình lớn hơn có tỷ lệ sống sót thấp hơn không?".
Để kiểm định giả thuyết này, tạo biến mới FamSize là tổng của Parch và SibSp như trên, rồi sắp xếp giảm dần theo FamSize:
# Create new column FamSize (size of family)
# Arrange by decreasing FamSize
passengers %>%
mutate(FamSize = Parch + SibSp) %>%
arrange(desc(FamSize))
## PassengerId Survived Pclass Name Sex Age
## 1 160 0 3 Sage, Master. Thomas Henry male NA
## 2 181 0 3 Sage, Miss. Constance Gladys female NA
## 3 202 0 3 Sage, Mr. Frederick male NA
## 4 325 0 3 Sage, Mr. George John Jr male NA
## 5 793 0 3 Sage, Miss. Stella Anna female NA
## 6 847 0 3 Sage, Mr. Douglas Bullen male NA
## SibSp Parch Ticket Fare Cabin Embarked FamSize
## 1 8 2 CA. 2343 69.55 S 10
## 2 8 2 CA. 2343 69.55 S 10
## 3 8 2 CA. 2343 69.55 S 10
## 4 8 2 CA. 2343 69.55 S 10
## 5 8 2 CA. 2343 69.55 S 10
## 6 8 2 CA. 2343 69.55 S 10
Mọi người trong gia đình đứng đầu đều không sống sót! Điều này có thể nói lên điều gì đó: có lẽ nếu bạn là thành viên một gia đình lớn, bạn không thể rời khỏi Titanic kịp thời.
Tuy nhiên, vì các số 0 và 1 thường không nói lên nhiều điều, hãy biến đổi các giá trị của biến Survived thành chuỗi No và Yes (và tạo data frame mới!):
# Turn numerical values of Survived column to "No" & "Yes" (new data frame)
passengers1 <- passengers %>%
mutate(Survived = ifelse(Survived == 0, "No", "Yes"))
passengers1
## PassengerId Survived Pclass
## 1 1 No 3
## 2 2 Yes 1
## 3 3 Yes 3
## 4 4 Yes 1
## 5 5 No 3
## 6 6 No 3
## Name Sex Age SibSp
## 1 Braund, Mr. Owen Harris male 22 1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1
## 3 Heikkinen, Miss. Laina female 26 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1
## 5 Allen, Mr. William Henry male 35 0
## 6 Moran, Mr. James male NA 0
## Parch Ticket Fare Cabin Embarked
## 1 0 A/5 21171 7.2500 S
## 2 0 PC 17599 71.2833 C85 C
## 3 0 STON/O2. 3101282 7.9250 S
## 4 0 113803 53.1000 C123 S
## 5 0 373450 8.0500 S
## 6 0 330877 8.4583 Q
Vẽ biểu đồ dữ liệu của bạn
Để vẽ dữ liệu bằng ggplot2, bạn chỉ định ba thứ:
- Dữ liệu của bạn
- Các đối tượng thẩm mỹ (aesthetics, ví dụ, trục x là gì)
- Các lớp (layers, ví dụ, biểu đồ cột, biểu đồ phân tán)
Trước tiên bạn sẽ vẽ biểu đồ cột của Sex để xem có bao nhiêu nam và nữ được ghi nhận trên tàu Titanic:
# Plot barplot of passenger Sex
ggplot(passengers, aes(x = Sex)) +
geom_bar()

Từ biểu đồ trên, bạn có thể thấy có khoảng 600 nam và 300 nữ trên tàu RMS Titanic.
Lưu ý rằng hàm aes() thực chất là cách ánh xạ các thuộc tính thẩm mỹ của biểu đồ tới các biến trong dữ liệu. Xem Modern Dive của Chester Ismay & Albert Y. Kim để biết thêm.
Bây giờ là lúc cho vài biểu đồ phân tán. Liệu Age của mỗi hành khách có tương quan với Fare họ trả không?
# Scatter plot of Age vs Fare
ggplot(passengers, aes(x = Age, y = Fare)) +
geom_point()
## Warning: Removed 177 rows containing missing values (geom_point).

Bạn rút ra khá nhiều điều chỉ từ biểu đồ này! Bạn thấy nhiều người trả nhiều tiền hơn cũng lớn tuổi hơn đáng kể. Có thể có sự tăng giá vé theo tuổi... Ngoài ra, bạn lập tức thấy hai điểm ngoại lai ở phía trên biểu đồ, có thể bạn muốn tìm hiểu thêm!
Bạn có thể đọc mã ggplot2 như một câu, giống như mã dplyr ở trên: "Bạn lấy dữ liệu là titanic và ánh xạ Age lên trục x và Fare lên trục y, thêm các điểm như một lớp của biểu đồ."
Hãy lấy biểu đồ trước và tô màu mỗi điểm theo Sex, để xem có mối tương quan nào giữa Sex, Age và Fare không:
# Scatter plot of Age vs Fare colored by Sex
ggplot(passengers %>% drop_na(), aes(x = Age, y = Fare, color = Sex)) +
geom_point()

Bạn thấy nhiều người ở phía dưới, trả ít tiền hơn, là nam giới. Bạn cũng thấy một cụm phụ nữ ở phía trên biểu đồ, lớn tuổi hơn một chút và cũng trả nhiều tiền hơn để lên tàu Titanic.
Việc trực quan hóa ba biến (hai biến số, Age và Fare, và một biến phân loại, Sex) trên một biểu đồ là khá thú vị, nhưng nếu bạn muốn thêm biến Survived để xem có xu hướng rõ ràng nào không thì sao? Bạn có thể làm điều này bằng faceting, một cách để tạo nhiều biểu đồ đồng thời:
# Scatter plot of Age vs Fare colored by Sex faceted by Survived
ggplot(passengers1, aes(x = Age, y = Fare, color = Sex)) +
geom_point() +
facet_grid(~Survived)
## Warning: Removed 177 rows containing missing values (geom_point).

Ngay lập tức, bạn thấy nhiều phụ nữ mà bạn đã để ý ở biểu đồ trước đó đã sống sót, và rằng đa số những người không sống sót trả dưới 50 đơn vị. Mẹo: thử tự tìm xem đơn vị tiền tệ là gì!
Bây giờ hãy vẽ lại biểu đồ cột về Sex của hành khách và lần này tô màu cột theo Survived:
# Plot barplot of passenger Sex & fill according to Survival
ggplot(passengers1, aes(x = Sex, fill = Survived)) +
geom_bar()

Bạn thấy phần lớn đàn ông không sống sót, trong khi hơn hai phần ba phụ nữ đã sống sót!
Tóm tắt và nhóm dữ liệu của bạn
Dùng động từ summarise() để tìm giá vé trung bình đã trả:
# Check out mean Fare
passengers %>%
summarise(meanFare = mean(Fare))
## meanFare
## 1 32.20421
Dùng summarise() để tìm giá vé trung vị đã trả:
# Check out mean Fare
passengers %>%
summarise(medianFare = median(Fare))
## medianFare
## 1 14.4542
Bạn cũng có thể dùng filter() và summarise() để tìm giá vé trung bình trong nhóm nam:
# Check out mean Fare for men
passengers %>%
filter(Sex == "male") %>%
summarise(meanFare = mean(Fare))
## meanFare
## 1 25.52389
Dùng filter() và summarise() để tìm giá vé trung bình trong nhóm nữ:
# Check out mean Fare for women
passengers %>%
filter(Sex == "female") %>%
summarise(meanFare = mean(Fare))
## meanFare
## 1 44.47982
Dùng filter() và summarise() để tìm giá vé trung bình trong nhóm nữ và có bao nhiêu phụ nữ sống sót:
# Check out mean Fare & number of survivors for women
passengers %>%
filter(Sex == "female") %>%
summarise(meanFare = mean(Fare), numSurv = sum(Survived))
## meanFare numSurv
## 1 44.47982 233
Dùng group_by() và summarise() để tìm giá vé trung bình và số người sống sót theo giới tính:
# Check out mean Fare & number of survivors grouped by Sex
passengers %>%
group_by(Sex) %>%
summarise(meanFare = mean(Fare), numSurv = sum(Survived))
## # A tibble: 2 x 3
## Sex meanFare numSurv
## <fct> <dbl> <int>
## 1 female 44.5 233
## 2 male 25.5 109
Dùng group_by() và summarise() để tìm giá vé trung bình và tỷ lệ người sống sót theo giới tính:
# Check out mean Fare & proportion of survivors grouped by Sex
passengers %>%
group_by(Sex) %>%
summarise(meanFare = mean(Fare), numSurv = sum(Survived)/n())
## # A tibble: 2 x 3
## Sex meanFare numSurv
## <fct> <dbl> <dbl>
## 1 female 44.5 0.742
## 2 male 25.5 0.189
Kết luận
Trong hướng dẫn này, bạn đã đi từ con số không đến nắm bắt căn bản phân tích dữ liệu bằng tidyverse và các công cụ tidy. Bạn đã học cách filter() dữ liệu, arrange() và mutate() nó, vẽ và summarise() nó bằng dplyr và ggplot2, tất cả bằng cách viết mã phản chiếu cách bạn nghĩ và nói về dữ liệu. Xin chúc mừng. Tôi khuyến khích bạn học thêm bằng cách tham gia khóa học Introduction to Tidyverse của David Robinson và bằng cách dùng các công cụ này trên các bộ dữ liệu khác mà bạn quan tâm. Hãy chia sẻ các phân tích này với chúng tôi trên twitter @DataCamp và @hugobowne. Cảm ơn bạn đã đọc.