Bài tập tuần này em thực hiện việc cào dữ liệu trên web https://stathead.com/ , web này cung cấp cho ta các thông tin về Vé toàn quyền truy cập của bạn vào cơ sở dữ liệu các môn thể thao. Cụ thể thì em đã cào dữ liệu về bảng xếp hạng hàng tuần của các đội NCAA(Quốc gia Hiệp hội trường đại học thể thao) hàng đầu ở một trong ba môn thể thao đại học Division I : bóng đá , bóng rổ nam và bóng rổ nữ
library(rvest)
## Warning: package 'rvest' was built under R version 4.2.3
url <- 'https://www.sports-reference.com/cbb/schools/bethune-cookman/2020-schedule.html'
schedule <- url %>% read_html %>% html_node('table#schedule') %>% html_table()
schedule
## # A tibble: 30 × 16
## G Date Time Type `` Opponent Conf SRS `` Tm Opp OT
## <int> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <int> <int> <chr>
## 1 1 Wed, N… 7:00p REG "" Johnson… "" NA W 110 68 ""
## 2 2 Sat, N… 8:00p REG "@" Texas T… "Big… 16.8 L 44 79 ""
## 3 3 Mon, N… 8:30p REG "@" Omaha "Sum… -5.09 L 61 90 ""
## 4 4 Fri, N… 7:00p REG "" Trinity… "" NA W 100 42 ""
## 5 5 Fri, N… 1:00p REG "@" Incarna… "Sou… -18.6 W 83 58 ""
## 6 6 Sat, N… 1:00p REG "N" Eastern… "OVC" -5.08 W 66 63 ""
## 7 7 Sun, N… 1:00p REG "N" St. Fra… "" NA W 74 70 ""
## 8 8 Sun, D… 6:00p REG "@" Georgia… "ACC" 10.5 L 65 68 ""
## 9 9 Tue, D… 7:00p REG "@" Stetson "A-S… -9.63 L 67 72 ""
## 10 10 Sat, D… 6:00p REG "@" Jackson… "A-S… -6.5 L 60 82 ""
## # ℹ 20 more rows
## # ℹ 4 more variables: W <int>, L <int>, Streak <chr>, Arena <chr>
Game:
Date: thời gian
Timezone: múi giờ
Type:
REG = Regular Season
CTOURN = Conference Tournament
NCAA = NCAA Tournamnet
NIT = National Invitation Tournament
CBI = College
CIT = CollegeInsider.com Tournament
Opponent: đối thủ
Conference: hội nghị
Symple Rating System: hệ thống đánh giá
Tm(Points): điểm số
Opponent Points: điểm đối thủ
Wins: bàn thắng
Losses: bàn thua
Streak: chuỗi (thời kì thua hoặc thắng liên tục)
Arena: đấu trường
table(schedule$`Date`)
##
## Fri, Nov 15, 2019 Fri, Nov 22, 2019 Mon, Feb 10, 2020 Mon, Feb 17, 2020
## 1 1 1 1
## Mon, Feb 24, 2020 Mon, Jan 13, 2020 Mon, Jan 27, 2020 Mon, Jan 6, 2020
## 1 1 1 1
## Mon, Mar 2, 2020 Mon, Nov 11, 2019 Sat, Dec 14, 2019 Sat, Dec 21, 2019
## 1 1 1 1
## Sat, Dec 7, 2019 Sat, Feb 1, 2020 Sat, Feb 15, 2020 Sat, Feb 22, 2020
## 1 1 1 1
## Sat, Feb 8, 2020 Sat, Jan 11, 2020 Sat, Jan 18, 2020 Sat, Jan 25, 2020
## 1 1 1 1
## Sat, Jan 4, 2020 Sat, Nov 23, 2019 Sat, Nov 9, 2019 Sun, Dec 1, 2019
## 1 1 1 1
## Sun, Dec 29, 2019 Sun, Nov 24, 2019 Tue, Dec 3, 2019 Thu, Mar 5, 2020
## 1 1 1 1
## Wed, Dec 18, 2019 Wed, Nov 6, 2019
## 1 1
airquality[airquality$Month == 5, ]
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
## 7 23 299 8.6 65 5 7
## 8 19 99 13.8 59 5 8
## 9 8 19 20.1 61 5 9
## 10 NA 194 8.6 69 5 10
## 11 7 NA 6.9 74 5 11
## 12 16 256 9.7 69 5 12
## 13 11 290 9.2 66 5 13
## 14 14 274 10.9 68 5 14
## 15 18 65 13.2 58 5 15
## 16 14 334 11.5 64 5 16
## 17 34 307 12.0 66 5 17
## 18 6 78 18.4 57 5 18
## 19 30 322 11.5 68 5 19
## 20 11 44 9.7 62 5 20
## 21 1 8 9.7 59 5 21
## 22 11 320 16.6 73 5 22
## 23 4 25 9.7 61 5 23
## 24 32 92 12.0 61 5 24
## 25 NA 66 16.6 57 5 25
## 26 NA 266 14.9 58 5 26
## 27 NA NA 8.0 57 5 27
## 28 23 13 12.0 67 5 28
## 29 45 252 14.9 81 5 29
## 30 115 223 5.7 79 5 30
## 31 37 279 7.4 76 5 31
subset(airquality, Month == 5)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
## 7 23 299 8.6 65 5 7
## 8 19 99 13.8 59 5 8
## 9 8 19 20.1 61 5 9
## 10 NA 194 8.6 69 5 10
## 11 7 NA 6.9 74 5 11
## 12 16 256 9.7 69 5 12
## 13 11 290 9.2 66 5 13
## 14 14 274 10.9 68 5 14
## 15 18 65 13.2 58 5 15
## 16 14 334 11.5 64 5 16
## 17 34 307 12.0 66 5 17
## 18 6 78 18.4 57 5 18
## 19 30 322 11.5 68 5 19
## 20 11 44 9.7 62 5 20
## 21 1 8 9.7 59 5 21
## 22 11 320 16.6 73 5 22
## 23 4 25 9.7 61 5 23
## 24 32 92 12.0 61 5 24
## 25 NA 66 16.6 57 5 25
## 26 NA 266 14.9 58 5 26
## 27 NA NA 8.0 57 5 27
## 28 23 13 12.0 67 5 28
## 29 45 252 14.9 81 5 29
## 30 115 223 5.7 79 5 30
## 31 37 279 7.4 76 5 31
with(airquality, airquality[Month == 5, ])
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
## 7 23 299 8.6 65 5 7
## 8 19 99 13.8 59 5 8
## 9 8 19 20.1 61 5 9
## 10 NA 194 8.6 69 5 10
## 11 7 NA 6.9 74 5 11
## 12 16 256 9.7 69 5 12
## 13 11 290 9.2 66 5 13
## 14 14 274 10.9 68 5 14
## 15 18 65 13.2 58 5 15
## 16 14 334 11.5 64 5 16
## 17 34 307 12.0 66 5 17
## 18 6 78 18.4 57 5 18
## 19 30 322 11.5 68 5 19
## 20 11 44 9.7 62 5 20
## 21 1 8 9.7 59 5 21
## 22 11 320 16.6 73 5 22
## 23 4 25 9.7 61 5 23
## 24 32 92 12.0 61 5 24
## 25 NA 66 16.6 57 5 25
## 26 NA 266 14.9 58 5 26
## 27 NA NA 8.0 57 5 27
## 28 23 13 12.0 67 5 28
## 29 45 252 14.9 81 5 29
## 30 115 223 5.7 79 5 30
## 31 37 279 7.4 76 5 31
data_1 <- with(airquality, airquality[Month == 5, ])
my.first.function <- function(v) {
return(c(mean(v),sd(v)))
}
my.first.function(schedule$G)
## [1] 15.500000 8.803408
Chỉ số này cho biết về phần trăm của lực lượng lao động có trình độ học vấn cao. Chỉ số này là một phần quan trọng của việc nắm bắt sự phân bố của trình độ học vấn trong lực lượng lao động của một quốc gia
library(WDI)
## Warning: package 'WDI' was built under R version 4.2.3
pmp <- WDI(indicator= "SL.TLF.ADVN.ZS")
pmp <- WDI(indicator = "SL.TLF.ADVN.ZS")
pmp <- na.omit(pmp)
pmp3 <- WDI(indicator ="SL.TLF.ADVN.ZS")
head(pmp3)
## country iso2c iso3c year SL.TLF.ADVN.ZS
## 1 Africa Eastern and Southern ZH AFE 2022 NA
## 2 Africa Eastern and Southern ZH AFE 2021 NA
## 3 Africa Eastern and Southern ZH AFE 2020 NA
## 4 Africa Eastern and Southern ZH AFE 2019 NA
## 5 Africa Eastern and Southern ZH AFE 2018 NA
## 6 Africa Eastern and Southern ZH AFE 2017 NA
Chỉ số này là chỉ số biểu hiện nội dung Carbon dioxide emissions. Chỉ số này đo lường khí thải CO2 gây ra bởi sự đốt cháy nhiên liệu hóa thạch và sản xuất xi măng. chỉ số này cho ta được theo dõi và so sánh khí thải CO2 giữa các quốc gia và theo thời gian, giúp đánh giá mức độ ảnh hưởng của các hoạt động công nghiệp và sử dụng năng lượng đến biến đổi khí hậu và môi trường.
pmp2 <- WDI(indicator ="EN.ATM.CO2E.KT")
head(pmp2)
## country iso2c iso3c year EN.ATM.CO2E.KT
## 1 Africa Eastern and Southern ZH AFE 2022 NA
## 2 Africa Eastern and Southern ZH AFE 2021 NA
## 3 Africa Eastern and Southern ZH AFE 2020 544952.5
## 4 Africa Eastern and Southern ZH AFE 2019 610723.5
## 5 Africa Eastern and Southern ZH AFE 2018 598721.0
## 6 Africa Eastern and Southern ZH AFE 2017 590905.5
Đây là chỉ số về tổng dân số của các quốc gia trên thế giới. Chỉ số này đo lường số lượng dân cư trên một địa lý cụ thể, không phân biệt về tình trạng pháp lý hoặc quốc tịch của các cư dân.
pmp3 <- WDI(indicator ="SP.POP.TOTL", latest = 20 )
head(pmp3)
## country iso2c iso3c year SP.POP.TOTL
## 1 Africa Eastern and Southern ZH AFE 2022 720839314
## 2 Africa Eastern and Southern ZH AFE 2021 702977106
## 3 Africa Eastern and Southern ZH AFE 2020 685112979
## 4 Africa Eastern and Southern ZH AFE 2019 667242986
## 5 Africa Eastern and Southern ZH AFE 2018 649757148
## 6 Africa Eastern and Southern ZH AFE 2017 632746570
chỉ số dùng để đo lường tỷ lệ của thanh niên (từ 15-24 tuổi) đã hoàn thành học vấn trên trình độ tiểu học nhưng không có việc làm hoặc không đang theo học (% của dân số thanh niên có trình độ học vấn cao). Chỉ số này giúp đánh giá tình hình thất nghiệp và không theo học trong nhóm dân số có trình độ học vấn cao. Nếu tỷ lệ này cao, nó có thể là dấu hiệu của vấn đề trong việc tạo ra cơ hội việc làm cho những người trẻ tuổi có trình độ học vấn cao hoặc khả năng chưa đủ để thu hút họ vào hệ thống giáo dục tiếp theo. Chỉ số này cũng là một cảnh báo về nguy cơ lãng phí nguồn lực nhân lực có giá trị, bởi vì những người trẻ tuổi có học vấn cao thường mang lại nhiều giá trị cho nền kinh tế và xã hội.
pmp4 <- WDI(indicator ="JI.UEM.NEET.HE.ZS")
head(pmp4)
## country iso2c iso3c year JI.UEM.NEET.HE.ZS
## 1 Afghanistan AFG 2021 NA
## 2 Afghanistan AFG 2020 NA
## 3 Afghanistan AFG 2019 NA
## 4 Afghanistan AFG 2018 NA
## 5 Afghanistan AFG 2017 NA
## 6 Afghanistan AFG 2016 NA
Chỉ số này là một chỉ số thống kê về tuổi thọ khi sinh, tức là số năm trung bình mà một em bé mới sinh được dự kiến sống nếu mô hình tử vong tại thời điểm sinh của nó không thay đổi trong suốt cuộc đời. Chỉ số này có ý nghĩa quan trọng trong việc đo lường tình trạng sức khỏe của một quốc gia. Nó cho thấy mức độ tử vong tổng thể trong dân số và tóm lược mô hình tử vong tồn tại ở tất cả các nhóm tuổi trong một năm cụ thể. Nó được tính dựa trên bảng tuổi thọ theo giai đoạn, cung cấp một cái nhìn tổng quan về mô hình tử vong của dân số tại một thời điểm nhất định.
pmp5 <- WDI(indicator ="SP.DYN.LE00.IN")
head(pmp5)
## country iso2c iso3c year SP.DYN.LE00.IN
## 1 Africa Eastern and Southern ZH AFE 2022 NA
## 2 Africa Eastern and Southern ZH AFE 2021 62.45459
## 3 Africa Eastern and Southern ZH AFE 2020 63.31386
## 4 Africa Eastern and Southern ZH AFE 2019 63.75568
## 5 Africa Eastern and Southern ZH AFE 2018 63.36586
## 6 Africa Eastern and Southern ZH AFE 2017 62.92239
Chỉ số này là chỉ số đại diện cho tỷ lệ chi tiêu cho giáo dục tiểu học so với tổng chi tiêu chung của chính phủ cho giáo dục. Chi tiêu chung của chính phủ thường bao gồm chính phủ địa phương, khu vực và trung ương. Dữ liệu cho chỉ số này thường được thu thập từ các cơ quan giáo dục quốc gia, cơ quan thống kê và tổ chức quốc tế như UNESCO và Ngân hàng Thế giới.
pmp6 <- WDI(indicator ="SE.XPD.PRIM.ZS")
pmp6 <- na.omit(pmp6)
head(pmp6)
## country iso2c iso3c year SE.XPD.PRIM.ZS
## 72 Africa Western and Central ZI AFW 2014 43.14119
## 73 Africa Western and Central ZI AFW 2013 43.20938
## 74 Africa Western and Central ZI AFW 2012 46.70011
## 75 Africa Western and Central ZI AFW 2011 45.07309
## 76 Africa Western and Central ZI AFW 2010 47.13305
## 77 Africa Western and Central ZI AFW 2009 48.44996
Chỉ số này thể hiện tỷ lệ phần trăm tăng trưởng thực của sản xuất nông nghiệp (%). Chỉ số này được điều chỉnh theo giá trị thực, tức là đã được điều chỉnh để loại bỏ yếu tố tác động của lạm phát. Do đó, chỉ số này cung cấp một đánh giá chính xác hơn về tăng trưởng thực sự trong sản xuất nông nghiệp so với việc sử dụng giá trị không điều chỉnh
pmp7 <- WDI(indicator = "NV.AGR.TOTL.KD.ZG")
pmp7 <- na.omit(pmp7)
head(pmp7)
## country iso2c iso3c year NV.AGR.TOTL.KD.ZG
## 1 Africa Eastern and Southern ZH AFE 2022 2.557612
## 2 Africa Eastern and Southern ZH AFE 2021 4.023727
## 3 Africa Eastern and Southern ZH AFE 2020 3.146676
## 4 Africa Eastern and Southern ZH AFE 2019 1.444204
## 5 Africa Eastern and Southern ZH AFE 2018 1.816118
## 6 Africa Eastern and Southern ZH AFE 2017 3.700976
Đây là một chỉ số liên quan trong lĩnh vực quản trị doanh nghiệp, liên quan đến việc sử dụng công nghệ thông tin và dữ liệu để tối ưu hóa quản lý nhân sự, tài chính và phát triển nhân viên trong một tổ chức.
pmp8 <- WDI(indicator = "BI.WAG.PREM.PB.FM.ED")
pmp8 <- na.omit(pmp8)
head(pmp8)
## country iso2c iso3c year BI.WAG.PREM.PB.FM.ED
## 37 Albania AL ALB 2005 8.765462e-05
## 40 Albania AL ALB 2002 6.978792e-02
## 130 Argentina AR ARG 2017 4.321961e-04
## 133 Argentina AR ARG 2014 5.650439e-02
## 134 Argentina AR ARG 2013 1.978011e-05
## 135 Argentina AR ARG 2012 3.715077e-03
Đây là chỉ số về Xuất khẩu hàng hoá và cho biết mức giá trị hàng hoá mà một quốc gia xuất khẩu trong một năm. Chỉ số này cho biết mức độ phát triển và hiệu suất của một quốc gia, do đó mức độ càng cao thì quốc gia đó càng phát triển và hiệu suất xuất khẩu của nó càng tốt.
pmp9 <- WDI(indicator = "TX.VAL.MRCH.RS.ZS")
pmp9 <- na.omit(pmp9)
head(pmp9)
## country iso2c iso3c year TX.VAL.MRCH.RS.ZS
## 3 Africa Eastern and Southern ZH AFE 2020 5.270043
## 4 Africa Eastern and Southern ZH AFE 2019 3.443316
## 5 Africa Eastern and Southern ZH AFE 2018 4.701532
## 6 Africa Eastern and Southern ZH AFE 2017 4.674258
## 7 Africa Eastern and Southern ZH AFE 2016 5.107069
## 8 Africa Eastern and Southern ZH AFE 2015 5.932892
Đây là chỉ số về bảo trợ xã hội, chỉ số này có thể hiểu là tổng thể các biện pháp, các chính sách, các hình thức khác nhau mà Nhà Nước và cộng đồng giúp đỡ đối với các đối tượng bị lâm vào cảnh rủi ro, bất hạnh, nghèo đói, khuyết tật,… vì nhiều nguyên nhân khác nhau dẫn đến không đủ khả năng tự lo liệu cho cuộc sống của bản thân và gia đình, nhằm giúp họ tránh được mối đe dọa của cuộc sống thường nhật hoặc giúp họ vượt qua những khó khăn, ổn định cuộc sống và hòa nhập cộng đồng.
pmp10 <- WDI(indicator= "CC.SP.EXP.ZS")
head(pmp10)
## country iso2c iso3c year CC.SP.EXP.ZS
## 1 Cook Islands COK 2028 NA
## 2 Cook Islands COK 2027 NA
## 3 Cook Islands COK 2026 NA
## 4 Cook Islands COK 2025 NA
## 5 Cook Islands COK 2024 NA
## 6 Cook Islands COK 2023 NA
Đây là bộ dữ liệu về cung cấp thông tin toàn diện về sở thích và hành vi của khách hàng liên quan đến đặt chỗ cho kỳ nghỉ của hãng hàng không. Với các thuộc tính chi tiết bao gồm các khía cạnh khác nhau của quy trình đặt vé, bộ dữ liệu này rất lý tưởng để phân tích và hiểu các lựa chọn cũng như mô hình của khách hàng trong ngành hàng không.
Bộ dữ liệu này được lấy từ tác giả Manish kumar ( Chủ sở hữu )
Sơ lược về bộ dữ liệu thì đây là data Passanger_booking bao gồm có 50002 quan sát và 14 biến, cụ thể từng biến sẽ được diễn giải tiếp tục phần kế tiếp:
num_passenger: số thứ tự hành khách
sales_channel: khách hàng tiếp cận đến trang web của chúng tôi
trip_type: Loại vé trong chuyến đi
purchase_lead: khoảng thời gian giữa ngày đặt phòng và ngày đi du lịch
length_of_stay: thời gian ở lại của trong suốt kì nghỉ
flight_hour: chỉ định giờ của chuyến bay
flight_day: cho biết ngày mà chuyến bay sẽ khởi hành
route: chỉ định đường bay
booking_origin: mô tả nguồn đặt phòng từ bởi các quốc gia
wants_extra_baggage: cho biết liệu khách hàng có bày tỏ mong muốn mang thêm hành lý miễn trả phí hay không.
wants_preferred_seat: cho biết liệu khách hàng có mong muốn được chỗ ngồi tốt hơn.
wants_in_flight_meals: cho biết liệu khách hàng có mong muốn được bữa ăn ngon trên chuyến bay hay không.
filght_duration: thời gian của chuyến bay
booking_complete: đặt phòng đã được xác nhận, sau khi khách đã check out
Passanger_booking <- read.csv("C:/Users/84703/AppData/Local/Temp/Temp1_archive (1).zip/Passanger_booking_data.csv")
str(Passanger_booking)
## 'data.frame': 50002 obs. of 14 variables:
## $ num_passengers : int 1 2 1 2 1 2 1 3 2 1 ...
## $ sales_channel : chr "Internet" "Internet" "Internet" "Internet" ...
## $ trip_type : chr "RoundTrip" "RoundTrip" "RoundTrip" "RoundTrip" ...
## $ purchase_lead : int 21 262 112 243 96 68 3 201 238 80 ...
## $ length_of_stay : int 12 19 20 22 31 22 48 33 19 22 ...
## $ flight_hour : int 6 7 3 17 4 15 20 6 14 4 ...
## $ flight_day : chr "Tue" "Sat" "Sat" "Wed" ...
## $ route : chr "AKLHGH" "AKLDEL" "AKLDEL" "AKLDEL" ...
## $ booking_origin : chr "Australia" "New Zealand" "New Zealand" "India" ...
## $ wants_extra_baggage : int 0 1 0 1 0 1 1 1 1 0 ...
## $ wants_preferred_seat : int 0 0 0 1 0 0 0 0 0 0 ...
## $ wants_in_flight_meals: int 0 0 0 0 1 1 1 1 1 1 ...
## $ flight_duration : num 7.21 5.52 5.52 5.52 5.52 5.52 5.52 5.52 5.52 5.52 ...
## $ booking_complete : int 1 0 0 0 0 0 0 0 0 0 ...
behaviour = read.csv("C:/Users/84703/AppData/Local/Temp/Temp1_archive (1).zip/Passanger_booking_data.csv")
Đầu tiên em sẽ thực hiện trên toàn bộ dữ liệu Passanger_booking. Sau đó em gán dữ liệu gốc qua dữ liệu mới có tên là “pass”
pass <- Passanger_booking
Để xem qua cấu trúc dữ liệu, em sẽ dùng lệnh sau
str(pass)
## 'data.frame': 50002 obs. of 14 variables:
## $ num_passengers : int 1 2 1 2 1 2 1 3 2 1 ...
## $ sales_channel : chr "Internet" "Internet" "Internet" "Internet" ...
## $ trip_type : chr "RoundTrip" "RoundTrip" "RoundTrip" "RoundTrip" ...
## $ purchase_lead : int 21 262 112 243 96 68 3 201 238 80 ...
## $ length_of_stay : int 12 19 20 22 31 22 48 33 19 22 ...
## $ flight_hour : int 6 7 3 17 4 15 20 6 14 4 ...
## $ flight_day : chr "Tue" "Sat" "Sat" "Wed" ...
## $ route : chr "AKLHGH" "AKLDEL" "AKLDEL" "AKLDEL" ...
## $ booking_origin : chr "Australia" "New Zealand" "New Zealand" "India" ...
## $ wants_extra_baggage : int 0 1 0 1 0 1 1 1 1 0 ...
## $ wants_preferred_seat : int 0 0 0 1 0 0 0 0 0 0 ...
## $ wants_in_flight_meals: int 0 0 0 0 1 1 1 1 1 1 ...
## $ flight_duration : num 7.21 5.52 5.52 5.52 5.52 5.52 5.52 5.52 5.52 5.52 ...
## $ booking_complete : int 1 0 0 0 0 0 0 0 0 0 ...
Tiếp đến em sẽ cho hiển thị 6 dữ liệu đầu tiên của tập dữ liệu
head(pass)
## num_passengers sales_channel trip_type purchase_lead length_of_stay
## 1 1 Internet RoundTrip 21 12
## 2 2 Internet RoundTrip 262 19
## 3 1 Internet RoundTrip 112 20
## 4 2 Internet RoundTrip 243 22
## 5 1 Internet RoundTrip 96 31
## 6 2 Internet RoundTrip 68 22
## flight_hour flight_day route booking_origin wants_extra_baggage
## 1 6 Tue AKLHGH Australia 0
## 2 7 Sat AKLDEL New Zealand 1
## 3 3 Sat AKLDEL New Zealand 0
## 4 17 Wed AKLDEL India 1
## 5 4 Sat AKLDEL New Zealand 0
## 6 15 Wed AKLDEL India 1
## wants_preferred_seat wants_in_flight_meals flight_duration booking_complete
## 1 0 0 7.21 1
## 2 0 0 5.52 0
## 3 0 0 5.52 0
## 4 1 0 5.52 0
## 5 0 1 5.52 0
## 6 0 1 5.52 0
Và kế đến là cho hiển thị tiếp 6 dữ liệu gần nhất của tập dữ liệu
tail(pass)
## num_passengers sales_channel trip_type purchase_lead length_of_stay
## 49997 2 Internet RoundTrip 25 6
## 49998 2 Internet RoundTrip 27 6
## 49999 1 Internet RoundTrip 111 6
## 50000 1 Internet RoundTrip 24 6
## 50001 1 Internet RoundTrip 15 6
## 50002 1 Internet RoundTrip 19 6
## flight_hour flight_day route booking_origin wants_extra_baggage
## 49997 9 Sun PERPNH Australia 0
## 49998 9 Sat PERPNH Australia 1
## 49999 4 Sun PERPNH Australia 0
## 50000 22 Sat PERPNH Australia 0
## 50001 11 Mon PERPNH Australia 1
## 50002 10 Thu PERPNH Australia 0
## wants_preferred_seat wants_in_flight_meals flight_duration
## 49997 0 0 5.62
## 49998 0 1 5.62
## 49999 0 0 5.62
## 50000 0 1 5.62
## 50001 0 1 5.62
## 50002 1 0 5.62
## booking_complete
## 49997 0
## 49998 0
## 49999 0
## 50000 0
## 50001 0
## 50002 0
#Show ra cho thầy thấy dữ liệu bảng
library(DT)
datatable(pass)
mean(pass$flight_duration)
## [1] 7.277524
#Tính trung bình theo loại vé máy bay
aggregate(pass$flight_duration, list(pass$trip_type), FUN = "mean")
## Group.1 x
## 1 CircleTrip 7.745641
## 2 OneWay 7.966770
## 3 RoundTrip 7.271029
Nhìn qua kết quả vừa thu được thì chuyến đi vòng tròn(có nghĩa là đi từ một điểm và quay trở lại đó bằng một tuyến đường hàng không liên tục , quanh co ; với điều kiện là ở những nơi không có tuyến hàng không trực tiếp theo lịch trình hợp lý giữa hai điểm , việc nghỉ vòng tròn có thể được di chuyển bằng bất kỳ phương tiện giao thông nào khác mà không ảnh hưởng đến chuyến đi vòng tròn.) trung bình là khoảng tầm 7.745641 giờ. Và chuyến đi một chiều có khoảng giờ trung bình là 7.966770, còn lại là chuyến bay khứ hồi với giờ trung bình là 7.271029.
median(pass$flight_duration)
## [1] 7.57
sd(pass$flight_duration)
## [1] 1.496854
var(pass$flight_duration)
## [1] 2.240571
sum(pass$flight_duration)
## [1] 363890.8
summary(pass$flight_duration)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.670 5.620 7.570 7.278 8.830 9.500
Hàm group_by() từ dplyr nhóm các hàng theo các giá trị duy nhất trong cột chỉ định. Nếu nhiều cột được chỉ định, các hàng được nhóm theo sự tổ hợp các giá trị thành giá trị duy nhất từ các cột. Mỗi giá trị duy nhất (hoặc tổ hợp các giá trị) tạo thành một nhóm. Những thay đổi sau đó đối với bộ dữ liệu hoặc các phép tính có thể thực hiện tùy theo đặc điểm của mỗi nhóm.
Để thao tác trên các biến, em thực hiện đổi tên lại mục đích là làm cho các biến gọn gàng và dễ thực hiện hơn: num_passenger = ‘np’, sales_channel = ‘sc’, trip_type = ‘tt’, purchase_lead =‘pl’, length_of_stay= ‘lt’, flight_hour = ‘fh’, flight_day = ‘fa’, route = ‘ro’, booking_origin = ‘bo’, wants_extra_baggage = ‘eb’, wants_preferred_seat = ‘ps’, wants_in_flight_meals = ‘fm’, filght_duration = ‘fd’, booking_complete = ‘bc’. Và thêm một cột biến mới vào dữ liệu bằng cách, phân tổ biến tuổi của chủ hộ gia đình 3 tổ (độ tuổi [19-30] gọi là trẻ tuổi, độ tuổi (30-50] gọi là trung niên, độ tuổi (50-60] gọi là cao tuổi). Ngoài ra, em còn biến đổi thêm các cột mới như là TP1, NL1, QA1, R1, PT1, K1 chính là các mức tiền chi tiêu cho thực phẩm, nhiên liệu, quần áo, rượu, phương tiện và các chi tiêu khác bằng cách lấy tỉ lệ % ban đầu mà bộ data cung cấp nhân cho tổng chi tiêu.
names(pass) <- c("np","sc","tt","pl", "lt","fh","fa","ro","bo","eb","ps", "fm","fd","bc")
pass$fdtitle <- cut(pass$fd, breaks=c(4.67,5.07,7,9.5), labels=c("ít","vừa","nhiều"))
aggregate(pass\(trip_type,list(pass\)lenghth_of_stay),FUN = ‘mean’)
Trong mục này, em sẽ lọc dữ liệu với điều kiện sau:
Lọc dữ liệu có tổng giờ bay lớn hơn 6.62
Lọc dữ liệu có có số thứ tự hành khách có chứa số 3 trong số thứ tự
loca <- pass %>% filter(., fd > 6.62) locb <- pass %>% filter(., np == “2”)
dim(loca)
dim(locb)
Trong số 50002 quan sát, sau khi ta thêm điều kiện tổng giờ bay lớn hơn 6.62. Và số thự tự hành khách có chứa số 3 ở số thứ tự chỉ còn 12804 số
## Bảng tần số và các dạng biểu đồ
### Bảng tần số cho biến lượng thời gian của chuyến bay
```r
table(pass$fdtitle)
##
## ít vừa nhiều
## 2666 18893 25700
prop.table(table(pass$fdtitle))
##
## ít vừa nhiều
## 0.05641254 0.39977570 0.54381176
{r pass %>% count(fdtitle) %>% mutate(pc = scales::percent(n/sum(n)))
pass %>% ggplot(aes(fdtitle)) + geom_bar(fill = “orange”) + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = .01)), stat = “count”, color = “white”, vjust = -0.5) + theme_classic() + labs(x = Thời lượng, y = “Thời gian của chuyến bay”)
# BÀI TẬP VỀ NHÀ TUẦN 3
## Lời mở đầu
Bộ data mà tuần này tôi đưa đến cho người xem báo cáo đó là bộ **dataset "Journals"** nằm trong **package AER**. Nó cung cấp cho ta thông tin về việc đăng ký tạp chí kinh tế ỏ thư viện Hoa Kỳ vào khoảng năm 2000.
Đây là bộ dữ liệu chứa 180 quan sát với 10 biến bao gồm:
-- **title**: tiêu đề
-- **publisher**: tên nhà xuất bản
-- **society**: yếu tố xã hội. Có lẽ nào tạp chí được xuất bản bởi một tác giả học thuật làm việc ở xã hội
-- **price**: giá mà khi ta đăng ký sách tại thư viện
-- **pages**: số trang giấy
-- **charpp**: ký tự ở trên trang
-- **ciations**: tổng số trích dẫn
-- **foundingyear**: năm tạp chí được thành lập
-- **subs**: số lượng đăng ký ở thư viện
-- **field**: yếu tố về mô tả thực địa(địa bàn trên thực tế)
## Thục hành dữ liệu
### Đầu tiên tôi sẽ gọi bộ dữ liệu **Journals** trong package AER bằng các lệnh như bên dưới
#### Gán data "Journals" vào biến có tên **jo**, rồi sau đó đặt tên lần lượt cho 10 biến trong bộ dữ liệu theo thứ tự là "t", "pu", "so", "pr", "pa", "ch", "ci", "fo", "su", "fi" bằng lệnh **names**
```r
jou <- Journals
names(jou) <- c("t", "pu", "so", "pr", "pa", "ch", "ci", "fo", "su", "fi")
Tiếp đến ta dùng lệnh summary để nhìn tổng quát dữ liệu
summary(jou)
## t pu so pr
## Length:180 Elsevier :42 no :164 Min. : 20.0
## Class :character Blackwell :26 yes: 16 1st Qu.: 134.5
## Mode :character Kluwer :16 Median : 282.0
## Springer :10 Mean : 417.7
## Academic Press : 9 3rd Qu.: 540.8
## Univ of Chicago Press: 7 Max. :2120.0
## (Other) :70
## pa ch ci fo
## Min. : 167.0 Min. :1782 Min. : 21.00 Min. :1844
## 1st Qu.: 548.8 1st Qu.:2715 1st Qu.: 97.75 1st Qu.:1963
## Median : 693.0 Median :3010 Median : 262.50 Median :1973
## Mean : 827.7 Mean :3233 Mean : 647.06 Mean :1967
## 3rd Qu.: 974.2 3rd Qu.:3477 3rd Qu.: 656.00 3rd Qu.:1982
## Max. :2632.0 Max. :6859 Max. :8999.00 Max. :1996
##
## su fi
## Min. : 2.0 General :40
## 1st Qu.: 52.0 Specialized :14
## Median : 122.5 Public Finance :12
## Mean : 196.9 Development :11
## 3rd Qu.: 268.2 Finance :11
## Max. :1098.0 Urban and Regional: 8
## (Other) :84
Muốn xem 6 dòng đầu và 6 dòng cuối của dữ liệu bao gồm các thông tin về tiêu đề,tên nxb, yếu tố xã hội, giá, số trang giấy, kí tự, tổng số trích dẫn, năm của tạp chí, số lượng đăng ký và yếu tố mô tả thuộc địa ta sử dụng lệnh head và tail
head(jou)
## t
## APEL Asian-Pacific Economic Literature
## SAJoEH South African Journal of Economic History
## CE Computational Economics
## MEPiTE MOCT-MOST Economic Policy in Transitional Economics
## JoSE Journal of Socio-Economics
## LabEc Labour Economics
## pu so pr pa ch ci fo su fi
## APEL Blackwell no 123 440 3822 21 1986 14 General
## SAJoEH So Afr ec history assn no 20 309 1782 22 1986 59 Economic History
## CE Kluwer no 443 567 2924 22 1987 17 Specialized
## MEPiTE Kluwer no 276 520 3234 22 1991 2 Area Studies
## JoSE Elsevier no 295 791 3024 24 1972 96 Interdisciplinary
## LabEc Elsevier no 344 609 2967 24 1994 15 Labor
tail(jou)
## t pu
## JASA Journal of the American Statistical Association Am. Statistical Assn
## JoFi Journal of Finance Am. Finance Assn
## QJoE Quarterly Journal of Economics MIT press
## JoPolEc Journal of Political Economy Univ of Chicago Press
## Ecnmt Econometrica Blackwell
## AER American Economic Review Am Ec Assn
## so pr pa ch ci fo su fi
## JASA yes 310 1260 5664 2800 1971 487 Econometrics
## JoFi yes 226 2272 3036 3791 1945 799 Finance
## QJoE no 148 1467 2184 4138 1886 660 General
## JoPolEc no 159 1669 2640 6697 1892 737 General
## Ecnmt yes 178 1482 2992 7943 1932 346 General
## AER yes 47 1867 3900 8999 1911 1098 General
Qua đó để muốn phân tích được dữ liệu, ta sẽ xem qua cấu trúc của dữ liệu
str(jou)
## 'data.frame': 180 obs. of 10 variables:
## $ t : chr "Asian-Pacific Economic Literature" "South African Journal of Economic History" "Computational Economics" "MOCT-MOST Economic Policy in Transitional Economics" ...
## $ pu: Factor w/ 52 levels "ANU Press","Academic Press",..: 11 45 28 28 18 18 13 18 28 11 ...
## $ so: Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ pr: int 123 20 443 276 295 344 90 242 226 262 ...
## $ pa: int 440 309 567 520 791 609 602 665 243 386 ...
## $ ch: int 3822 1782 2924 3234 3024 2967 3185 2688 3010 2501 ...
## $ ci: int 21 22 22 22 24 24 24 27 28 30 ...
## $ fo: int 1986 1986 1987 1991 1972 1994 1995 1968 1987 1949 ...
## $ su: int 14 59 17 2 96 15 14 202 46 46 ...
## $ fi: Factor w/ 24 levels "General","Economic History",..: 1 2 3 4 5 6 7 3 4 1 ...
Để nhóm dữ liệu từ biến jo theo tên nhà xuất bản, tôi dùng lệnh group_by, tiếp theo tôi sẽ dùng hàm summarise để thực hiện tổ hợp các phép tính sau khi nhóm cụ thể là phép tính tổng cho biến price(pr). Bảng kết quả sẽ gán vào total để thực hiện các thao tác tiếp theo.
total<- jou %>% group_by(pu) %>%
summarise(sum=sum(pr))
total
## # A tibble: 52 × 2
## pu sum
## <fct> <int>
## 1 ANU Press 54
## 2 Academic Press 4625
## 3 Agric. Econ. Society 96
## 4 Am Ec Assn 141
## 5 Am Stat Assn 90
## 6 Am. Ag. Econ Assn 81
## 7 Am. Finance Assn 226
## 8 Am. Risk & Ins. Assn 90
## 9 Am. Statistical Assn 310
## 10 Assn Ev. Economics 45
## # ℹ 42 more rows
jou <- Journals
Qua kết quả ở bảng trên, tôi sẽ phân tích cụ thể dữ liêu đã thu được, ở nhà xuất bản Academic Press có giá đăng ký cao nhất tại thư viện là 4625 đô la, Còn nhà xuất bản Assn Ev. Economics có giá đăng ký tại thư viện thấp nhất là 45 đô la
Sau đó tôi vẽ biểu đồ cho bảng kết quả trên, tôi sử dụng lệnh ggplot. Trong đó,trục x là các nhà xuất bản, trục y là tổng giá.
library(ggplot2)
ggplot(total,aes(x=pu,y=sum,fill = pu) )+ geom_col() + labs(x = "nhaxuatban", y = "giatri", fill = "nhaxuatban") + theme_minimal()
Tương tự, tính tổng số trích dẫn của tất cả các nhà xuất bản được nhóm theo năm sau đó gán vào biến y
Tạo bảng
Lập bảng tổng số trích dẫn của các nhà xuất bản theo năm và phân làm 3 nhóm sau đó gán vào các tên
t <- table(cut(jou$su, breaks = c(2,24,222,1098 ),labels = c("it","vua","nhieu")),jou$fo)
t
##
## 1844 1852 1865 1886 1890 1892 1898 1911 1918 1919 1922 1925 1928 1930
## it 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## vua 1 1 1 0 0 0 1 0 0 0 1 1 0 1
## nhieu 0 0 0 1 1 1 0 1 1 1 0 1 1 0
##
## 1932 1933 1939 1941 1943 1945 1947 1948 1949 1952 1953 1954 1958 1960
## it 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## vua 0 0 1 0 1 1 0 2 1 0 1 0 1 0
## nhieu 2 2 0 2 0 1 2 2 1 1 1 1 0 2
##
## 1961 1962 1963 1964 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975
## it 0 0 0 1 0 0 0 0 0 0 0 0 1 0
## vua 1 1 3 2 1 4 1 3 2 4 4 4 3 3
## nhieu 2 1 1 3 2 2 1 2 4 1 1 1 3 0
##
## 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
## it 1 0 0 0 0 0 1 1 0 0 2 1 0 1
## vua 1 3 4 4 4 6 6 2 3 4 3 4 3 1
## nhieu 0 0 1 0 0 1 1 1 0 0 0 1 0 0
##
## 1990 1991 1992 1994 1995 1996
## it 0 1 1 2 1 1
## vua 3 2 4 1 0 1
## nhieu 0 0 0 0 0 0
Đồ thị trên cho biết được là ứng với từng mức giá đăng ký tại thư viện thì sẽ có bao nhiêu nhà xuất bản được đăng ký tại thư viện. Khi đọc kết quả đồ thị, ta thấy rằng có nhiều người tham gia khảo sát nhất trả lời rằng họ chi ra mức chi phí khoảng đơn vị cho việc đăng ký này.
geom_bar sẽ hiểu các trục tọa độ dưới đây:
x: Trục x y: Trục y alpha: chỉ số alpha colour: màu sắc fill: màu sắc cột group: Phân nhóm để tô màu theo nhóm. linetype: kiểu đường viền size: Kích thước cột
mp <- jou |> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank')
mp <- jou |> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank', values_drop_na = T)
mp <- jou|> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank', values_drop_na = T) |>mutate(subs = parse_number(subs))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `subs = parse_number(subs)`.
## Caused by warning:
## ! 180 parsing failures.
## row col expected actual
## 1 -- a number subs
## 2 -- a number subs
## 3 -- a number subs
## 4 -- a number subs
## 5 -- a number subs
## ... ... ........ ......
## See problems(...) for more details.
View(mp)
view(billboard)
data(billboard)
bill <- billboard
jou <- jou
mp$aa <- seq(1,1,length = length(mp$society))
mp <- mutate(mp,bb = mp$rank + mp$aa)
mp <- mutate(mp,bb = rank + aa)
str(mp)
## tibble [180 × 13] (S3: tbl_df/tbl/data.frame)
## $ title : chr [1:180] "Asian-Pacific Economic Literature" "South African Journal of Economic History" "Computational Economics" "MOCT-MOST Economic Policy in Transitional Economics" ...
## $ publisher : Factor w/ 52 levels "ANU Press","Academic Press",..: 11 45 28 28 18 18 13 18 28 11 ...
## $ society : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ price : int [1:180] 123 20 443 276 295 344 90 242 226 262 ...
## $ pages : int [1:180] 440 309 567 520 791 609 602 665 243 386 ...
## $ charpp : int [1:180] 3822 1782 2924 3234 3024 2967 3185 2688 3010 2501 ...
## $ citations : int [1:180] 21 22 22 22 24 24 24 27 28 30 ...
## $ foundingyear: int [1:180] 1986 1986 1987 1991 1972 1994 1995 1968 1987 1949 ...
## $ field : Factor w/ 24 levels "General","Economic History",..: 1 2 3 4 5 6 7 3 4 1 ...
## $ subs : num [1:180] NA NA NA NA NA NA NA NA NA NA ...
## ..- attr(*, "problems")= tibble [180 × 4] (S3: tbl_df/tbl/data.frame)
## .. ..$ row : int [1:180] 1 2 3 4 5 6 7 8 9 10 ...
## .. ..$ col : int [1:180] NA NA NA NA NA NA NA NA NA NA ...
## .. ..$ expected: chr [1:180] "a number" "a number" "a number" "a number" ...
## .. ..$ actual : chr [1:180] "subs" "subs" "subs" "subs" ...
## $ rank : int [1:180] 14 59 17 2 96 15 14 202 46 46 ...
## $ aa : num [1:180] 1 1 1 1 1 1 1 1 1 1 ...
## $ bb : num [1:180] 15 60 18 3 97 16 15 203 47 47 ...
jour <- jou %>% select(pages,charpp,ptice) %% pivot_wider(names_from = charpp,values_from = price, values_fn = list) jour
Chuyển đổi từ dữ liệu dài sang dữ liệu rộng dựa trên biến foundingyear và giá trị page, citations, subs trong bộ dữ liệu Journals. Với câu lệnh đầu tiên, tạo ra bảng dữ liệu “jodex” với các cột là các năm(cột “foundingyear”) và số trang của tạp chí (“cột page”). Câu lệnh thứ hai, tạo một bảng dữ liệu rộng “joupom” với các cột mới là các năm và các giá trị là ký tự trên các tạp chí được đăng ký của từng nhà xuất bản. Câu lệnh thứ ba tạo ra bảng dữ liệu về subs của từng nhà xuất bản tương ứng. Các bảng có cấu trúc dạng rộng, với mỗi nhà xuất bản (cột “publisher”) và tiêu đề của tạp chí (cột “title”) chỉ xuất hiện một lần và được kết hợp các giá trị giá đăng ký tại thư viện, lượng đăng ký, số trang của tạp chí theo năm của các nhà xuất bản và leenhk arrange sắp xếp theo từng
mp <- mp %%pivot_wider(names_from = society , values_from = number ) mp
Sau khi câu lệnh được thực hiện chứng ta có thể thấy trên bảng được tạo thêm một cột mang tên resp thực hiên việc chuyển đổi các dữ liệu của biến case thành số từ ‘no’ tương đương với 0, từ ‘perhaps’ tương dương với 1 và từ ‘yes’ cững là 1.
data(“VerbAgg”) view(VerbAgg) table(VerbAgg\(item) levels(VerbAgg\)item) summary(VerbAgg) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == “no” ~ 0,resp == “perhaps” ~ 1, resp == “yes” ~ 1)) library(tidyverse) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == “no” ~ 0,resp == “perhaps” ~ 1, resp == “yes” ~ 1)) table(VerbAgg\(resp) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == "no" ~ 0,resp == "perhaps" ~ 1, resp == "yes" ~ 1)) table(VerbAgg\)respn) respn_wide <- VerbAgg %>% select(id, item, respn) %>%pivot_wider(names_from = item, values_from = respn) tmp <- VerbAgg %>% select(id, item, respn) respn_wide <- VerbAgg %>% select(id, item, respn) %>%pivot_wider(names_from = item, values_from = respn)
library("HDclassif")
## Warning: package 'HDclassif' was built under R version 4.2.3
## Loading required package: MASS
## Warning: package 'MASS' was built under R version 4.2.3
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
data("wine")
dat <- wine
dat <- na.omit(dat)
ca <- dat[dat$class == 3,]
table(dat$class)
##
## 1 2 3
## 59 71 48
table(dat$class)/178*100
##
## 1 2 3
## 33.14607 39.88764 26.96629
Sau khi thao tác bộ dữ liệu này để có bảng tần suất thì ta chia cho tổng số quan sát và kết quả nhận thấy:
Tên loại rượu nho thứ hai chiếm nhiều nhất là 71 loại chiếm khoảng 39,88%
Tên loại rượu thứ ba chiếm tỉ lệ thấp nhất đạt khoảng 29,97% với 48 loại.
Tỉ lệ phần trăm của các khoảng trong biến V3
prop.table(table(wine$V3))
##
## 1.36 1.7 1.71 1.75 1.82 1.88
## 0.005617978 0.011235955 0.005617978 0.005617978 0.005617978 0.005617978
## 1.9 1.92 1.94 1.95 1.98 1.99
## 0.005617978 0.016853933 0.005617978 0.005617978 0.016853933 0.005617978
## 2 2.02 2.04 2.1 2.12 2.13
## 0.011235955 0.005617978 0.005617978 0.022471910 0.016853933 0.005617978
## 2.14 2.15 2.16 2.17 2.19 2.2
## 0.011235955 0.005617978 0.005617978 0.016853933 0.011235955 0.028089888
## 2.21 2.22 2.23 2.24 2.25 2.26
## 0.016853933 0.005617978 0.011235955 0.011235955 0.011235955 0.016853933
## 2.27 2.28 2.29 2.3 2.31 2.32
## 0.016853933 0.039325843 0.011235955 0.039325843 0.011235955 0.033707865
## 2.35 2.36 2.37 2.38 2.39 2.4
## 0.016853933 0.033707865 0.005617978 0.028089888 0.011235955 0.022471910
## 2.41 2.42 2.43 2.44 2.45 2.46
## 0.011235955 0.016853933 0.005617978 0.005617978 0.016853933 0.016853933
## 2.48 2.5 2.51 2.52 2.53 2.54
## 0.028089888 0.022471910 0.011235955 0.005617978 0.005617978 0.011235955
## 2.55 2.56 2.58 2.59 2.6 2.61
## 0.005617978 0.011235955 0.011235955 0.005617978 0.016853933 0.016853933
## 2.62 2.64 2.65 2.67 2.68 2.69
## 0.022471910 0.016853933 0.011235955 0.011235955 0.011235955 0.005617978
## 2.7 2.72 2.73 2.74 2.75 2.78
## 0.033707865 0.011235955 0.005617978 0.011235955 0.005617978 0.005617978
## 2.8 2.84 2.86 2.87 2.92 3.22
## 0.005617978 0.005617978 0.005617978 0.005617978 0.005617978 0.005617978
## 3.23
## 0.005617978
mean(wine$V5)
## [1] 99.74157
median(wine$V5)
## [1] 98
sd(wine$V5)
## [1] 14.28248
quantile(wine$V5, 0.95)
## 95%
## 124.3
Sau đó tôi tạo biểu histogram của biên V5 để xem sự phân bổ dữ liệu của chúng
hist(wine$V5)
Rồi đến bước thực hiện phép tính tổng hợp dữ liệu của biến V5 theo bến class. Ý nghĩa cho biết:
Nồng độ cồn nếu phân loại theo tên rượu nho thứ nhất thì trung bình là 106.339% + Nồng độ cồn theo tên rượu nho thứ hai thì trung bình là 94.5493%
Nồng độ cồn theo tên rượu nho thứ ba thì trung bình là 99.3125%
aggregate(V5 ~ class, wine, FUN=mean)
## class V5
## 1 1 106.3390
## 2 2 94.5493
## 3 3 99.3125
library(tidyverse)
c <- dat$V1
c1 <- c[13.05:14.83]
c2 <- c[11.46:12.88]
case1 <- data.frame(nongdo = c1, ruouthunhat="A")
case2 <- data.frame(nongdo= c2, ruouthuhai="B")
Sau đây tôi sẽ trình bày về bộ dataset mà tôi chọn làm để phân tích nó. Tên dataset: wine, data này nằm trong package HDclassif. Bộ dữ liệu là được lấy từ kết quả phân tích hóa học của các loại rượu vang được trồng ở cùng một vùng ở Ý nhưng có nguồn gốc từ ba giống cây trồng khác nhau. Đầu tiên tôi muốn dùng dữ liệu wine tôi phải gọi package HDclassif lên
library("HDclassif")
data("wine")
str("HDclassif")
## chr "HDclassif"
Đây là dữ liệu về 3 loại rượu (Barbera, Barolo và Grignolino) ở vùng Piedmont, Ý, gồm:
Rượu Barolo được làm từ nho Nebbiolo, hai loại rượu còn lại được làm từ loại nho có cùng tên với chúng.
head(wine)
## class V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
## 1 1 14.23 1.71 2.43 15.6 127 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065
## 2 1 13.20 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050
## 3 1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.68 1.03 3.17 1185
## 4 1 14.37 1.95 2.50 16.8 113 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480
## 5 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.32 1.04 2.93 735
## 6 1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.75 1.05 2.85 1450
names(wine)
## [1] "class" "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8"
## [10] "V9" "V10" "V11" "V12" "V13"
data(wine)
Trong 14 biến:
Biến \(vintages\) là biến nhãn cho biết tên loại rượu của từng quan trắc tương ứng.
Ngoại trừ các biến \(col..int\), \(col..hue\), \(OD.ratio\), các biến còn lại đều là các biến mô tả nồng độ (concentration). \(col..int\) = color intensity, \(col..hue\) = color hue và \(OD.ration\) = tỷ số giữa sự hấp thụ (absorbance) tại các bước sóng \(280\) và \(315\) nm.
Thống kê số lượng 3 loại rượu trong mẫu:
table(wine$vintage)
## < table of extent 0 >
Trước tiên, ta tạo một data.frame mới gồm 13 cột đầu tiên của data.frame wine (gồm các biến định lượng) để thực hiện thống kê mô tả (biến thứ 14 là vintages là biến định tính):
dat_wine <- wine[ , 1:13]
Tính trung bình mẫu của các biến:
apply(dat_wine, 2, mean)
## class V1 V2 V3 V4 V5 V6
## 1.9382022 13.0006180 2.3363483 2.3665169 19.4949438 99.7415730 2.2951124
## V7 V8 V9 V10 V11 V12
## 2.0292697 0.3618539 1.5908989 5.0580899 0.9574494 2.6116854
Tính phương sai mẫu của các biến:
apply(dat_wine, 2, var)
## class V1 V2 V3 V4 V5
## 0.60067924 0.65906233 1.24801540 0.07526464 11.15268616 203.98933536
## V6 V7 V8 V9 V10 V11
## 0.39168954 0.99771867 0.01548863 0.32759467 5.37444938 0.05224496
## V12
## 0.50408641
apply(dat_wine, 2, range)
## class V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
## [1,] 1 11.03 0.74 1.36 10.6 70 0.98 0.34 0.13 0.41 1.28 0.48 1.27
## [2,] 3 14.83 5.80 3.23 30.0 162 3.88 5.08 0.66 3.58 13.00 1.71 4.00
Tính ma trận hiệp phương sai (covariance matrix) và ma trận hệ số tương quan (correlation matrix):
cov_wine <- cov(dat_wine)
# Ma trận hiệp phương sai tính từ dữ liệu chưa chuẩn hóa
cov_wine
## class V1 V2 V3 V4 V5
## class 0.60067924 -0.20651527 0.37903860 -0.0105554498 1.3403637 -2.3154955
## V1 -0.20651527 0.65906233 0.08561131 0.0471151590 -0.8410929 3.1398781
## V2 0.37903860 0.08561131 1.24801540 0.0502770393 1.0763317 -0.8707795
## V3 -0.01055545 0.04711516 0.05027704 0.0752646353 0.4062083 1.1229366
## V4 1.34036374 -0.84109290 1.07633171 0.4062082778 11.1526862 -3.9747604
## V5 -2.31549546 3.13987812 -0.87077953 1.1229365835 -3.9747604 203.9893354
## V6 -0.34883483 0.14688722 -0.23433772 0.0221455913 -0.6711491 1.9164699
## V7 -0.65609059 0.19203322 -0.45863037 0.0315347299 -1.1720828 2.7930870
## V8 0.04717736 -0.01575426 0.04073336 0.0063584714 0.1504219 -0.4555634
## V9 -0.22141306 0.06351752 -0.14114698 0.0015155780 -0.3771762 1.9328325
## V10 0.47733891 1.02828254 0.64483818 0.1646543266 0.1450242 6.6205206
## V11 -0.10936755 -0.01331344 -0.14332564 -0.0046821545 -0.2091181 0.1808513
## V12 -0.43373707 0.04169782 -0.29244748 0.0007618358 -0.6562344 0.6693081
## V6 V7 V8 V9 V10
## class -0.34883483 -0.65609059 0.047177363 -0.221413064 0.47733891
## V1 0.14688722 0.19203322 -0.015754260 0.063517520 1.02828254
## V2 -0.23433772 -0.45863037 0.040733362 -0.141146982 0.64483818
## V3 0.02214559 0.03153473 0.006358471 0.001515578 0.16465433
## V4 -0.67114915 -1.17208281 0.150421856 -0.377176220 0.14502419
## V5 1.91646988 2.79308703 -0.455563385 1.932832476 6.62052061
## V6 0.39168954 0.54047042 -0.035045125 0.219373345 -0.07999752
## V7 0.54047042 0.99771867 -0.066867000 0.373147553 -0.39916863
## V8 -0.03504512 -0.06686700 0.015488634 -0.026059868 0.04012051
## V9 0.21937334 0.37314755 -0.026059868 0.327594668 -0.03350392
## V10 -0.07999752 -0.39916863 0.040120510 -0.033503918 5.37444938
## V11 0.06203888 0.12408197 -0.007471177 0.038664565 -0.27650580
## V12 0.31102128 0.55826225 -0.044469244 0.210932940 -0.70581258
## V11 V12
## class -0.109367549 -0.4337370660
## V1 -0.013313443 0.0416978226
## V2 -0.143325638 -0.2924474830
## V3 -0.004682155 0.0007618358
## V4 -0.209118054 -0.6562343681
## V5 0.180851266 0.6693080683
## V6 0.062038876 0.3110212785
## V7 0.124081969 0.5582622548
## V8 -0.007471177 -0.0444692440
## V9 0.038664565 0.2109329398
## V10 -0.276505801 -0.7058125762
## V11 0.052244961 0.0917662439
## V12 0.091766244 0.5040864089
corr_wine <- cor(dat_wine)
corr_wine
## class V1 V2 V3 V4 V5
## class 1.00000000 -0.32822194 0.43777620 -0.049643221 0.51785911 -0.20917939
## V1 -0.32822194 1.00000000 0.09439694 0.211544596 -0.31023514 0.27079823
## V2 0.43777620 0.09439694 1.00000000 0.164045470 0.28850040 -0.05457510
## V3 -0.04964322 0.21154460 0.16404547 1.000000000 0.44336719 0.28658669
## V4 0.51785911 -0.31023514 0.28850040 0.443367187 1.00000000 -0.08333309
## V5 -0.20917939 0.27079823 -0.05457510 0.286586691 -0.08333309 1.00000000
## V6 -0.71916334 0.28910112 -0.33516700 0.128979538 -0.32111332 0.21440123
## V7 -0.84749754 0.23681493 -0.41100659 0.115077279 -0.35136986 0.19578377
## V8 0.48910916 -0.15592947 0.29297713 0.186230446 0.36192172 -0.25629405
## V9 -0.49912982 0.13669791 -0.22074619 0.009651935 -0.19732684 0.23644061
## V10 0.26566757 0.54636420 0.24898534 0.258887259 0.01873198 0.19995001
## V11 -0.61736921 -0.07174720 -0.56129569 -0.074666889 -0.27395522 0.05539820
## V12 -0.78822959 0.07234319 -0.36871043 0.003911231 -0.27676855 0.06600394
## V6 V7 V8 V9 V10 V11
## class -0.71916334 -0.8474975 0.4891092 -0.499129824 0.26566757 -0.61736921
## V1 0.28910112 0.2368149 -0.1559295 0.136697912 0.54636420 -0.07174720
## V2 -0.33516700 -0.4110066 0.2929771 -0.220746187 0.24898534 -0.56129569
## V3 0.12897954 0.1150773 0.1862304 0.009651935 0.25888726 -0.07466689
## V4 -0.32111332 -0.3513699 0.3619217 -0.197326836 0.01873198 -0.27395522
## V5 0.21440123 0.1957838 -0.2562940 0.236440610 0.19995001 0.05539820
## V6 1.00000000 0.8645635 -0.4499353 0.612413084 -0.05513642 0.43368134
## V7 0.86456350 1.0000000 -0.5378996 0.652691769 -0.17237940 0.54347857
## V8 -0.44993530 -0.5378996 1.0000000 -0.365845099 0.13905701 -0.26263963
## V9 0.61241308 0.6526918 -0.3658451 1.000000000 -0.02524993 0.29554425
## V10 -0.05513642 -0.1723794 0.1390570 -0.025249931 1.00000000 -0.52181319
## V11 0.43368134 0.5434786 -0.2626396 0.295544253 -0.52181319 1.00000000
## V12 0.69994936 0.7871939 -0.5032696 0.519067096 -0.42881494 0.56546829
## V12
## class -0.788229589
## V1 0.072343187
## V2 -0.368710428
## V3 0.003911231
## V4 -0.276768549
## V5 0.066003936
## V6 0.699949365
## V7 0.787193902
## V8 -0.503269596
## V9 0.519067096
## V10 -0.428814942
## V11 0.565468293
## V12 1.000000000
Phần tiếp theo, tôi dùng lệnh str để xem cấu trúc của bộ dữ liệu
Kết quả cung cấp cho ta thông tin về số lượng quan sát, số biến và tên của các biến, loại dữ liệu của từng biến
str(wine)
## 'data.frame': 178 obs. of 14 variables:
## $ class: int 1 1 1 1 1 1 1 1 1 1 ...
## $ V1 : num 14.2 13.2 13.2 14.4 13.2 ...
## $ V2 : num 1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...
## $ V3 : num 2.43 2.14 2.67 2.5 2.87 2.45 2.45 2.61 2.17 2.27 ...
## $ V4 : num 15.6 11.2 18.6 16.8 21 15.2 14.6 17.6 14 16 ...
## $ V5 : int 127 100 101 113 118 112 96 121 97 98 ...
## $ V6 : num 2.8 2.65 2.8 3.85 2.8 3.27 2.5 2.6 2.8 2.98 ...
## $ V7 : num 3.06 2.76 3.24 3.49 2.69 3.39 2.52 2.51 2.98 3.15 ...
## $ V8 : num 0.28 0.26 0.3 0.24 0.39 0.34 0.3 0.31 0.29 0.22 ...
## $ V9 : num 2.29 1.28 2.81 2.18 1.82 1.97 1.98 1.25 1.98 1.85 ...
## $ V10 : num 5.64 4.38 5.68 7.8 4.32 6.75 5.25 5.05 5.2 7.22 ...
## $ V11 : num 1.04 1.05 1.03 0.86 1.04 1.05 1.02 1.06 1.08 1.01 ...
## $ V12 : num 3.92 3.4 3.17 3.45 2.93 2.85 3.58 3.58 2.85 3.55 ...
## $ V13 : int 1065 1050 1185 1480 735 1450 1290 1295 1045 1045 ...
Kế đến tôi dùng lệnh summary để tạo ra phần tóm tắt các thông tin thống kê mô tả của các biến. Kết quả dưới đây cho ta biết về trung bình, min, max, trung vị, các tứ phân vị của các biến. Ta có thể hiểu được việc này nó mô tả như nào dựa vào kết quả dưới đây. Chẳng hạn một ví dụ cụ thể về biến bất kì, ta lấy biến V10 để ví dụ rằng nhìn vào biến V10(tỷ số sự hấp thụ) thấy được rằng độ hấp thụ lớn nhất là 13%, bé nhất là 1,28%, trung bình sự hấp thụ của các loại rượu này dao động khoảng 5,058%, tứ phân vị thứ nhất biểu diễn con số 3,22%, trung vị thì lại cho thấy tỉ số hấp thụ là 4,69 và tứ phân vị thứ ba lại cho kết quả hấp thụ với tỷ số là 6,2
summary(wine)
## class V1 V2 V3
## Min. :1.000 Min. :11.03 Min. :0.740 Min. :1.360
## 1st Qu.:1.000 1st Qu.:12.36 1st Qu.:1.603 1st Qu.:2.210
## Median :2.000 Median :13.05 Median :1.865 Median :2.360
## Mean :1.938 Mean :13.00 Mean :2.336 Mean :2.367
## 3rd Qu.:3.000 3rd Qu.:13.68 3rd Qu.:3.083 3rd Qu.:2.558
## Max. :3.000 Max. :14.83 Max. :5.800 Max. :3.230
## V4 V5 V6 V7
## Min. :10.60 Min. : 70.00 Min. :0.980 Min. :0.340
## 1st Qu.:17.20 1st Qu.: 88.00 1st Qu.:1.742 1st Qu.:1.205
## Median :19.50 Median : 98.00 Median :2.355 Median :2.135
## Mean :19.49 Mean : 99.74 Mean :2.295 Mean :2.029
## 3rd Qu.:21.50 3rd Qu.:107.00 3rd Qu.:2.800 3rd Qu.:2.875
## Max. :30.00 Max. :162.00 Max. :3.880 Max. :5.080
## V8 V9 V10 V11
## Min. :0.1300 Min. :0.410 Min. : 1.280 Min. :0.4800
## 1st Qu.:0.2700 1st Qu.:1.250 1st Qu.: 3.220 1st Qu.:0.7825
## Median :0.3400 Median :1.555 Median : 4.690 Median :0.9650
## Mean :0.3619 Mean :1.591 Mean : 5.058 Mean :0.9574
## 3rd Qu.:0.4375 3rd Qu.:1.950 3rd Qu.: 6.200 3rd Qu.:1.1200
## Max. :0.6600 Max. :3.580 Max. :13.000 Max. :1.7100
## V12 V13
## Min. :1.270 Min. : 278.0
## 1st Qu.:1.938 1st Qu.: 500.5
## Median :2.780 Median : 673.5
## Mean :2.612 Mean : 746.9
## 3rd Qu.:3.170 3rd Qu.: 985.0
## Max. :4.000 Max. :1680.0
Kế đó ta sẽ sử dụng lệnh head để xem các quan sát đầu của dat và lệnh tail để xem một vài quan sát cuối
head(wine)
## class V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
## 1 1 14.23 1.71 2.43 15.6 127 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065
## 2 1 13.20 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050
## 3 1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.68 1.03 3.17 1185
## 4 1 14.37 1.95 2.50 16.8 113 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480
## 5 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.32 1.04 2.93 735
## 6 1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.75 1.05 2.85 1450
tail(wine)
## class V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
## 173 3 14.16 2.51 2.48 20.0 91 1.68 0.70 0.44 1.24 9.7 0.62 1.71 660
## 174 3 13.71 5.65 2.45 20.5 95 1.68 0.61 0.52 1.06 7.7 0.64 1.74 740
## 175 3 13.40 3.91 2.48 23.0 102 1.80 0.75 0.43 1.41 7.3 0.70 1.56 750
## 176 3 13.27 4.28 2.26 20.0 120 1.59 0.69 0.43 1.35 10.2 0.59 1.56 835
## 177 3 13.17 2.59 2.37 20.0 120 1.65 0.68 0.53 1.46 9.3 0.60 1.62 840
## 178 3 14.13 4.10 2.74 24.5 96 2.05 0.76 0.56 1.35 9.2 0.61 1.60 560
p <- wine
pt <- cut(p$V1,4)
table(pt)
## pt
## (11,12] (12,12.9] (12.9,13.9] (13.9,14.8]
## 19 65 68 26
Từ kết quả trên ta thấy được, biến V1(nồng độ) cho 3 loại rượu đã được phân tổ làm 4 tổ có khoảng cách đều nhau, cụ thể hơn là:
Nồng độ từ 11 đến 12 có 19 giá trị
Nồng độ từ 12 đến 12.9 có 65 giá trị
Nồng độ từ 12.9 đến 13.9 có 68 giá trị
Nồng độ từ 13.9 đến 14.8 có 26 giá trị
p1 <- p$V1
p2 <- p1[p1>12.5]
table(p2)
## p2
## 12.51 12.52 12.53 12.58 12.6 12.64 12.67 12.69 12.7 12.72 12.77 12.79 12.81
## 2 1 1 1 2 1 1 1 2 2 2 1 1
## 12.82 12.84 12.85 12.86 12.87 12.88 12.93 12.96 12.99 13.03 13.05 13.07 13.08
## 1 1 2 1 1 1 2 1 1 1 6 1 1
## 13.11 13.16 13.17 13.2 13.23 13.24 13.27 13.28 13.29 13.3 13.32 13.34 13.36
## 2 2 2 1 1 2 1 1 1 1 1 1 1
## 13.39 13.4 13.41 13.45 13.48 13.49 13.5 13.51 13.52 13.56 13.58 13.62 13.63
## 1 2 1 1 2 2 2 1 1 2 2 1 1
## 13.64 13.67 13.68 13.69 13.71 13.72 13.73 13.74 13.75 13.76 13.77 13.78 13.82
## 1 1 1 1 2 1 2 1 1 1 1 1 1
## 13.83 13.84 13.86 13.87 13.88 13.9 13.94 14.02 14.06 14.1 14.12 14.13 14.16
## 2 1 2 1 2 1 1 1 2 2 1 1 1
## 14.19 14.2 14.21 14.22 14.23 14.3 14.34 14.37 14.38 14.39 14.75 14.83
## 1 1 1 2 1 1 1 1 2 1 1 1