1 Tóm tắt: Gồm 2 nhiệm vụ

  • 3.1 là phân tích số liệu về dân số được cho trước(theo nhu cầu của thầy) bằng các thao tác đã học, trong file:population-and-demography.csv
  • 3.2 là phân tích dữ liệu theo chủ đề tự chọn và tự chọn file (phải có ít nhất 200 quan sát và 4 biến). Vậy nên em chọn chủ đề giáo dục với file:SYB66_309_202310_Education.csv.

2 Nhiệm vụ 3.1:


2.1 Giải thích, mô tả về dataset

trong đó có các biến:

  • Country name: tên các quốc gia được thống kê về dân số.

Bao gồm các nhóm quốc gia:

  • High-income countries: cụm các quốc gia có thu nhập cao.
  • Less developed regions, excluding least developed countries: Các khu vực kém phát triển hơn, không bao gồm các nước kém phát triển nhất.
  • Less developed regions, excluding China: Các khu vực kém phát triển hơn, ngoại trừ Trung Quốc.
  • Lower-middle-income countries: Các nước có thu nhập trung bình thấp.
  • Low-income countries: Các quốc gia có thu nhập thấp.
  • More developed regions: Các khu vực phát triển hơn.
  • Small island developing states (SIDS): Small island developing states (SIDS).
  • Upper-middle-income countries: Các nước có thu nhập trung bình cao.
  • world: dân số của toàn cầu.
  • Africa (UN): tổ chức liên hợp quốc.
  • Asia (UN): ủy ban kinh tế - xã hội châu Á và Thái Bình Dương.
  • Europe (UN): liên minh châu Âu.

=> Xem sơ bộ cho thấy các nước càng phát triển, thu nhập cao thì dân số họ sẽ ít hơn so với các quốc gia đang và kém phát triển.

  • Year: biến cho biết số liệu được thống kê theo các năm của các quốc gia từ năm (từ năm 1950 đến 2021)
  • Population: Tổng dấn số của quốc gia trong từng năm thống kê.
  • Tiếp đến các biến được thống kê theo từng độ tuổi:
  1. Population of children under the age of 1: Dân số trẻ em dưới 1 tuổi.
  2. Population of children under the age of 5: Dân số trẻ em dưới 5 tuổi.
  3. Population of children under the age of 15: Dân số trẻ em dưới 15 tuổi.
  4. Population under the age of 25: Dân số dưới 25 tuổi.
  5. Population aged 15 to 64 years: Dân số từ 15 đến 64 tuổi.
  6. Population older than 15 years: Dân số trên 15 tuổi.
  7. Population older than 18 years: Dân số trên 18 tuổi.
  8. Population at age 1: Dân số lúc 1 tuổi.
  9. Population aged 1 to 4 years: Dân số từ 1 đến 4 tuổi.
  10. Population aged 5 to 9 years: Dân số từ 5 đến 9 tuổi.
  11. Population aged 10 to 14 years: Dân số từ 10 đến 14 tuổi.
  12. Population aged 15 to 19 years: Dân số từ 15 đến 19 tuổi.
  13. Population aged 20 to 29 years: Dân số từ 20 đến 29 tuổi.
  14. Population aged 30 to 39 years: Dân số từ 30 đến 39 tuổi.
  15. Population aged 40 to 49 years: Dân số từ 40 đến 49 tuổi.
  16. Population aged 50 to 59 years: Dân số từ 50 đến 59 tuổi.
  17. Population aged 60 to 69 years: Dân số từ 60 đến 69 tuổi.
  18. Population aged 70 to 79 years: Dân số từ 70 đến 79 tuổi.
  19. Population aged 80 to 89 years: Dân số từ 80 đến 89 tuổi.
  20. Population aged 90 to 99 years: Dân số từ 90 đến 99 tuổi.
  21. Population older than 100 years: Dân số trên 100 tuổi.

=> Nhìn chung file có 24 biến và 18288 biến và không có dữ liệu trống.

Mở file:C:/Users/ICT/Downloads/population-and-demography.csv lên.

  • Dùng hàm library () liệt kê tất cả các thư viện sẵn trong R để đọc dữ liệu vào R từ file excel ta dùng file xlsx. Gán vào dữ liệu “nv3.1” để bật file.
library(xlsx)#lưu vào thư viện
nv3.1 <- read.csv(file.choose(),header = T)#read.csv:đọc tệp CSV bằng bằng các hàm thư viện pandas, file.choose(): chọn file đữ liệu cần tải lên, header = T: cho hiện các tiêu đề là chữ.
is.data.frame(nv3.1)# kiểm tra xem dữ liệu có phải là data của frame hay không nếu phải thì sẽ xuất ra là true còn không thì sẽ false.
## [1] TRUE
  • Sau khi thưc hiện thì dữ liệu được tải lên ô bên phải phía trên với tên đã gán.
  • Thể hiện rõ số quan sát và biến: 18288 quan sát và 24 biến.
length(nv3.1)#câu lệnh giúp biết được độ dài của biến trong file yêu cầu là "nv3.1" và trả kết quả là 24.
## [1] 24
names(nv3.1)#cho ra tên cột của file tải lên "nv3.1"
##  [1] "Country.name"                              
##  [2] "Year"                                      
##  [3] "Population"                                
##  [4] "Population.of.children.under.the.age.of.1" 
##  [5] "Population.of.children.under.the.age.of.5" 
##  [6] "Population.of.children.under.the.age.of.15"
##  [7] "Population.under.the.age.of.25"            
##  [8] "Population.aged.15.to.64.years"            
##  [9] "Population.older.than.15.years"            
## [10] "Population.older.than.18.years"            
## [11] "Population.at.age.1"                       
## [12] "Population.aged.1.to.4.years"              
## [13] "Population.aged.5.to.9.years"              
## [14] "Population.aged.10.to.14.years"            
## [15] "Population.aged.15.to.19.years"            
## [16] "Population.aged.20.to.29.years"            
## [17] "Population.aged.30.to.39.years"            
## [18] "Population.aged.40.to.49.years"            
## [19] "Population.aged.50.to.59.years"            
## [20] "Population.aged.60.to.69.years"            
## [21] "Population.aged.70.to.79.years"            
## [22] "Population.aged.80.to.89.years"            
## [23] "Population.aged.90.to.99.years"            
## [24] "Population.older.than.100.years"
  • Hiện tên cột/ biến từ trái sang phải theo thứ tự của bản mở đầu là country.name và kết thúc là Population.older.than.100.years.
dim(nv3.1)#Cầu lệnh nêu ra vói yêu cầu hãy xuất ra vecto chứa số hàng, cột của file xuất ra theo đúng quan sát và biến là 18288 và 24
## [1] 18288    24
sum(is.na(nv3.1))#câu lệnh ta tính được tổng số ô trống trong dữ liệu "nv3.1"
## [1] 0

Hiểu rõ hơn về dữ liệu đã tải ta thống kê lại datasheet với các muc:

n_missing: số ô dữ liệu bị miss(trống)

complete_rate: tỷ lệ ô có dữ liệu

mean: trung bình

sd: độ lệch chuẩn

p0: giá trị nhỏ nhất

p25: Phân vị thứ nhất

p50: Phân vị thứ hai cũng chính là trung vị

p75: phân vị thứ ba

p100: giá trị lớn nhất

hist: biểu đồ Histogram

library(skimr)
skim(nv3.1)
Data summary
Name nv3.1
Number of rows 18288
Number of columns 24
_______________________
Column type frequency:
character 1
numeric 23
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country.name 0 1 4 59 0 254 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 1985.50 20.78 1950 1967.75 1985.5 2003.25 2021 ▇▇▇▇▇
Population 0 1 126470436.62 588851230.77 1363 291591.50 3833997.5 16785463.50 7909295000 ▇▁▁▁▁
Population.of.children.under.the.age.of.1 0 1 3133496.86 14167006.03 25 6663.75 88352.0 463000.50 139783730 ▇▁▁▁▁
Population.of.children.under.the.age.of.5 0 1 14825709.57 67384368.62 136 31995.25 423784.5 2160046.50 690360700 ▇▁▁▁▁
Population.of.children.under.the.age.of.15 0 1 41095227.11 188416973.54 416 89541.50 1186121.5 5905944.75 2015023400 ▇▁▁▁▁
Population.under.the.age.of.25 0 1 63762600.31 294251869.66 623 139541.50 1843099.5 9025129.75 3239281000 ▇▁▁▁▁
Population.aged.15.to.64.years 0 1 77429505.08 367651914.71 748 170263.50 2246772.0 9641250.00 5132999000 ▇▁▁▁▁
Population.older.than.15.years 0 1 85372101.76 404866940.61 849 186716.00 2482104.0 10354345.50 5893678600 ▇▁▁▁▁
Population.older.than.18.years 0 1 78196242.04 372017010.49 752 166417.50 2238130.5 9239904.00 5516283000 ▇▁▁▁▁
Population.at.age.1 0 1 3011212.81 13661998.41 26 6473.75 85824.0 440787.50 138478740 ▇▁▁▁▁
Population.aged.1.to.4.years 0 1 11692212.72 53238243.89 101 25269.25 334454.0 1697850.75 550970400 ▇▁▁▁▁
Population.aged.5.to.9.years 0 1 13598575.21 62534310.11 138 29406.25 392220.5 1947260.75 683611800 ▇▁▁▁▁
Population.aged.10.to.14.years 0 1 12670942.28 58775457.46 73 27879.50 363895.5 1796754.00 659934300 ▇▁▁▁▁
Population.aged.15.to.19.years 0 1 11782258.92 55126036.18 110 26296.50 336969.5 1626210.75 623576060 ▇▁▁▁▁
Population.aged.20.to.29.years 0 1 20872880.04 98860990.50 158 45050.75 609723.5 2758738.50 1210493200 ▇▁▁▁▁
Population.aged.30.to.39.years 0 1 17158704.11 82404600.95 137 36608.25 486290.5 2113149.00 1165207300 ▇▁▁▁▁
Population.aged.40.to.49.years 0 1 13622138.99 66008221.21 119 27440.25 364712.5 1556334.00 976407200 ▇▁▁▁▁
Population.aged.50.to.59.years 0 1 10177069.11 49288480.77 95 19649.75 264781.5 1203386.00 851356900 ▇▁▁▁▁
Population.aged.60.to.69.years 0 1 6801756.84 32712918.99 64 12603.00 168417.5 845242.75 598067140 ▇▁▁▁▁
Population.aged.70.to.79.years 0 1 3618710.03 17491538.61 31 6221.00 81824.0 436710.00 330491170 ▇▁▁▁▁
Population.aged.80.to.89.years 0 1 1195799.30 6238308.33 6 1818.75 20269.5 133380.50 131835590 ▇▁▁▁▁
Population.aged.90.to.99.years 0 1 142784.38 853350.39 0 154.75 1468.5 12499.00 22223974 ▇▁▁▁▁
Population.older.than.100.years 0 1 3107.72 20951.57 0 0.00 13.0 163.00 593166 ▇▁▁▁▁

2.2 Lựa chọn 5 quốc gia, 5 độ tuổi và tổng dân số để phân tích

*chọn quan sát:

  • Chọn 5 quốc gia là Nigeria, India, China, Brazil,Pakistan: vì đại diện 5 quốc gia có nhiều dân số nhất, coi là đặc trưng về các quốc gia đông dân số nhất thế giới (ở biến Country) (Cột Country vẫn sẽ xuất hiện ở dữ liệu sau khi lọc)

*Chọn cột/ biến:

  • Giữ lại biến Year để dể nhận dạng.

  • Population: Tổng dấn số của quốc gia trong từng năm đượ giữ lai để so sánh tổng quát và phân tích sự chênh lệch khác nhau.

  • chọn biến theo 5 độ tuổi:

1.Population of children under the age of 15: độ tuổi trẻ em, giai đoạn nhật thức, là mầm mống của tương lai. Phân tích để biết được tình trạng để bảo vệ kịp thời.

2.Population aged 15 to 19 years: Dân số từ 15 đến 19 tuổi: độ tuổi thanh thiếu niên, giai đoạn bắt đầu chuyển tiếp từ tuổi trẻ sang tuổi trưởng thành. Lực lượng chuẩn bị hoặc bắt đầu cho độ tuổi lao động.

3.Population aged 15 to 64 years: Dân số từ 15 đến 64 tuổi: đây là nằm ở độ tuổi của lao động (của WHO) theo tổ chức y tế thế giới, lực lượng lao động chính của quốc gia.

4.Population aged 30 to 39 years: Dân số từ 30 đến 39 tuổi: độ trưởng thành, bắt đầu ổn định công việc, cuộc sống, Đây là giai đoạn cấu tạo hình thành số lượng cho dân số.

=> Dân số già hay trẻ là phụ thuộc vào 4 độ tuổi trên.

  1. Population aged 70 to 79 years: Dân số từ 70 đến 79 tuổi: độ tuổi cho sự về hưu bắt đầu bước vào thời hậu kì cuộc sống. Phân tích để biết điều chỉnh tránh để các độ tuổi 70-79 trở lên quá trình làm cho dân số bị già hóa. Vì vậy ta thực hiện các bước để lọc các quan sát và biến để dể dàng phân tích.
library(dplyr)#lưu vào thư viện và mở gói lệnh dplyr ra để thực hiện câu lệnh phía sau
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
a <- nv3.1 %>% filter(Country.name=='China'|Country.name=='Brazil'|Country.name=='Nigeria'|Country.name=='India'|Country.name=='Pakistan') %>%
select(Country.name,Year,Population,Population.older.than.15.years,Population.aged.15.to.19.years,Population.aged.15.to.64.years,Population.aged.30.to.39.years,Population.aged.70.to.79.years) #Gán vào a với các điều kiện lọc(trong hàm filter) ở biến Country.name ra 5 quốc gia là china hoặc Brazil hoặc India hoặc Nigeria hoặc Pakistan kết hợp hàm select để chọn ra các biến/ cột theo 5 độ tuổi để phân tích rõ hơn kèm theo lấy ra tổng cả dân số, năm của các đất nước trên.
a
  • Kết quả ra 1 nhóm dữ liệu gồm 360 quan sát kéo dài theo chữ cái từ Brazil->China->India-> Nigeria->Pakistan và 8 biến với thứ tự các biến theo các column mình đã chọn ở trên xếp từ trái sang phải và vẫn giữ nguyên dữ liệu cũ cho các cột với mỗi quốc gia sẽ có 72 quan sát kèo dài từ năm 1950-2021.

2.3 Mã hóa dữ liệu, lập bảng tần số

  • Đầu tiên dể dàng cho việc phân tích ta sẽ đổi tên lại cho 7 biến bằng câu lệnh names() <- c(tên biến muốn đổi: biến 1, biến 2, biến 3). Sử dùng các kí tự đầu và số để đổi tên biến và phân biên các biến.

Cách thực hiện như sau:

names(a) <- c('Country', 'year','Pop','Pop_15','Pop_15-19','Pop_15-64','Pop_30-39','Pop_70-79')# Gọi tên mới từ dữ liệu đã tải lên với tên đã gán là a Với 8 biến và đổi tên biến từ trái sang phải theo thứ tự hàng loạt các biến trong bộ dữ liệu cũ.
a
  • Kết quả không làm thay đổi dữ lệu cột bên dưới hay số quan sát chỉ thay đổi tên của biến theo nhu cầu đã đặt ở trên.

  • Câu lệnh recode(): Là quá trình mã hóa mà ta sẽ mã hóa lại biến hay vùng dữ liệu theo phân loại thành những nhóm dữ liệu khác nhau.

Lập bảng tầng số cho 1 biến

  • Câu lệnh table():: thông kê dãy dữ lệu của biến theo số lượng.

Cách thưc hiện như sau:

a$Country.code <- recode(a$Country,China = 'Nhom 1', India  = 'Nhom 2', Pakistan = 'Nhom 3', Brazil =
'Nhom 4', Nigeria = 'Nhom 5') #Lấy dữ liệu a tạo thêm 1 biến mới tên là Country.code với yêu cầu mã hoá lại vùng dữ liệu biến Country theo nhóm dân số cao nhất từ trên xuống như china-nhom 1, paskistan- nhom 2,.
table(a$Country.code)# Muốn biết trong cột Country.code có số lượng của các nhóm là bao nhiêu.
## 
## Nhom 1 Nhom 2 Nhom 3 Nhom 4 Nhom 5 
##     72     72     72     72     72
  • Kết quả dữ liệu a tăng thêm 1 biến là 9 cột và quan sát vẫn dữ nguyên là 360 quan sát. Trong đó các vùng dữ liệu trong 7 biến không thay đổi chỉ thêm một biến mới với ý đồ ở trên và hiện lên trên trang dữ liệu tên quốc gia đầu tiên là Brazil xếp vào nhóm 4 vì có ít dân số hớn 3 quốc gia còn lại chỉ lớn hơn Nigeria hay China thì có dân số đông nhất nên thuộc nhóm 1, và các nước còn lại tương tự.

  • Xuất hiện tổng kết quả đếm được của nhóm 1 đến nhóm 5 lần lượt từ trên xuống.

  • Câu lệnh ifelse: dùng để mã hóa các dữ liệu thuộc 1 biến về định lương và về định tính, câu lệnh có điều kiện được sử dụng để quyết định xem một câu lệnh hoặc khối câu lệnh nhất định có được thực thi hay không, tức là nếu một điều kiện nhất định là đúng thì khối câu lệnh đó sẽ được thực thi, ngược lại thì không.

Cách làm như sau:

a$'Pop_15-19.code' <- ifelse(a$Pop_15-19 >= 50000000,'Qua_dong', 'Dong')# Lấy dữ liệu a tạo thêm biến mới tên là Pop_15-19.code, lấy điều kiện để mã hóa vùng dữ liệu của biến Pop_15-19 nếu lớn hơn hoặc bằng 50000000 (chọn mã hóa biến Pop_15-19 vì đây là tuổi độ tuổi thanh thiếu niên, hạt nhân của quốc gia, cần phân tích và xem xét nhiều hơn các độ tuổi còn lại) nếu dữ liệu quan sát thỏa mãn điều kiện thì sẽ trả về dữ liệu là 'Qua_dong', ngược lại là 'Dong' (vì hầu hết các dân số các quốc gia đều nằm top dân số đông).
a
  • Kết quả dữ thêm có thêm một biến là từ 9 lên 10 và số quan sát vẫn không thay đổi là 360, các vùng dữ liệu trước vẫn giữ nguyên. Với quán sát đầu tiên biến Pop_15-19 của Brazil là 5744748(1950) bé hơn 50000000 nên sẽ trả về dữ liệu là “Dong”. Tiếp đến dân số của China là 52148756(1950) lớn hơn 50000000 nên sẽ trả về dữ liệu là “Qua_dong” và các quan sát khác cũng tương tự.

  • Câu lệnh Cause_When():Phân thành các nhóm (hay rời rạc hóa) biến liên tục, được sử dụng khi chúng ta có nhiều điều kiện ràng buộc, câu lệnh này được coi là thay thế trong trường hợp phải dùng quá nhiều ifelse().

  • VD: tạo thêm biến Pop_70-79.Coded để mã hóa vùng dữ liệu Pop_70-79(chọn biến này để mã hóa để thấy được dân số già của các quốc gia đông dân số như thế nào) thành các yêu cầu và cách làm như sau:

a$'Pop_70-79.Code' <- case_when(a$Pop_70-79 < 10000000 ~ 'It', a$Pop_70-79 >= 10000000 & a$Pop_70-79 <= 30000000 ~ 'Binh_thuong', a$Pop_70-79 >30000000 ~ 'Dong')#Vẫn lấy dữ liệu a để thêm biến thực hiện quá trình mã với từng điều kiện là vùng dữ liệu của biến Pop_70-79 bé hơn 10000000 thì trả về dữ liệu là 'It', nằm trong khoảng lớn hơn 10000000 hoặc nhỏ hơn 30000000 thì trả về dữ liệu 'Binh_thuong', còn lại lớn hơn 30000000 thì 'Dong'.
a
  • Kết quả thu đươc là có 360 quan sát không thay đổi và 11 biến(tăng thêm 1 biến so vói vùng dữ liệu cũ), các vùng dữ liệu trước vẫn giữ nguyên. Với quan sát của Brazil(1950) là 550169 bé hơn 10000000 sẽ trả về là ‘It’, tiếp đến quan sát của China(1950) là 11921734 năm trong khoảng lớn hơn 10000000 hoặc nhỏ hơn 30000000 nên mang dữ liệu ’ Binh_thuong’ và quan sát của China(2021) là 80093240 lớn hơn 30000000 chứa dữ liệu ‘Dong’ các quan sát còn lại sẽ thống kê tương tự.

  • Câu lệnh Cut(): dùng để mã hóa, cắt/chia vùng dữ liệu ra tạo ra một biến mới phù hợp các yếu cầu hệ thống sẽ tự động chia theo các khoảng nhất định.VD: lấy dữ liệu a và tạo thêm biến mới là Pop.code và làm các nhiệm vụ phân tách nhóm, với ý muốn ta chia làm 5 nhóm với tên mỗi nhóm lần lượt từ loại 1 đến loại 5 và thực hiện phân loại trong biến Pop và thực hiện như sau:

  • Kết hợp lập tần số cho 2 biến:

a$Pop.code <- cut(a$Pop,5,labels = c('Loại 1','Loại 2','Loại 3','Loại 4','LOại 5'))#cut()-để biết chính xác các tham số và chức năng của hàm. với lables (tuỳ chọn) là một vector chứa các nhãn bạn đặt cho các nhóm.
b <- table(a$Country,a$Pop.code)# Đếm theo số lượng các 5 quốc gia để xuất và đếm kết quả theo số loại đã đặt ờ trên.
b
##           
##            Loại 1 Loại 2 Loại 3 Loại 4 LOại 5
##   Brazil       72      0      0      0      0
##   China         0      5     18     17     32
##   India         0     23     17     15     17
##   Nigeria      72      0      0      0      0
##   Pakistan     72      0      0      0      0
  • Kết quả ta có 12 biến và 360 quan sát, tăng thêm 1 biến mới theo ý muốn ở trên và số quan sát và dữ liệu cũ vẫn giữ nguyên. Xuất hiện kết quả là được vào các loại tùy thuộc vào tổng số lượng dân, đông nhất thì xếp vào Loại 5 vd: năm 2021 của china hay số dân ít nhất thì xếp vào loại 1 như năm 1950 của Brazil.

Lập biểu đồ nhánh và lá: Biểu đồ nhánh và lá có chức năng tương tự như histogram nhưng chỉ được dùng để hiện thị phân phối của các tập dữ liệu có kích thước vừa phải. Để vẽ biểu đồ nhánh và lá chúng ta dùng hàm stem()

stem(a$Pop)# yêu cầu làm biểu đồ nhánh cho biến Pop
## 
##   The decimal point is 8 digit(s) to the right of the |
## 
##    0 | 44444444444444444444455555555555555555566666666666666666667777777777+15
##    1 | 00000000000111111111122222222233333333334444444455555555566666666777+14
##    2 | 000000000111111111111122233
##    3 | 66789
##    4 | 0123456789
##    5 | 0123455667889
##    6 | 0012234455566788
##    7 | 00123456688
##    8 | 00223456789
##    9 | 012334566788
##   10 | 00123446688
##   11 | 002234557789
##   12 | 01122344566677899
##   13 | 001122344556778899
##   14 | 00112223
  • Nhìn vào biểu đồ ta thấy dữ liệu có phân phối lệch phải. Biểu đồ nhánh lá có ưu điểm là các giá trị dữ liệu được hiện thị trên biểu đồ.

2.4 Phân tích dữ liệu theo quốc gia và theo thời gian

  • Câu lênh summary(): hiển thị tóm tắt về tập dữ liệu như giá trị lớn nhất, giá trị nhỏ nhất, giá trị trung bình.
summary(a$Pop) #GTNN - Phân vị thứ 1 -Trung vị: 50% các số lơn hơn và 50% các số nhỏ hơn - Phân vị thứ 3 - độ lớn trung bình - GTLN lấy từ dữ liệu a và biến Pop
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 3.719e+07 9.090e+07 1.864e+08 4.426e+08 7.803e+08 1.426e+09
  • Câu lệnh quantile (): Hiển thị các lượng tử theo mặc định — 0%, 25%, 50%, 75% và 100% lượng tử.
quantile(a$Pop, probs = c(.25,.5,.75))#Với probs là đặt vấn đề tỷ lệ lượng tử xuất ra kết quả từ dữ liệu trong ô Pop của a
##       25%       50%       75% 
##  90898148 186364645 780274575
  • Câu lẹnh Var(): hàm để tính phương sai từ dữ liệu cho trước, sư chệnh lệch giữa các biến cố.
var(a$Pop)#Xuất kết quả đã căn 2 của cả cột dữ liệu tên Pop
## [1] 2.044489e+17
  • Câu lệnh Sd(): độ lệch chuẩn dùng trong thống kê mô tả để đo mức độ phân tán của một tập dữ liệu đã được lập thành bảng tần số. Có thể tính ra độ lệch chuẩn bằng cách lấy căn bậc hai của phương sai.
sd(a$Pop)#lấy vùng dữ liệu a và trong biến Pop để thực hiện. Kết quả cho ra là căn bật 2 của var ở trên.
## [1] 452160236
  • Với câu lệnh “group_by”- tạo nhóm theo biến, summarise: là dữ liệu sẽ tổng hợp những giá trị thống kê cho từng nhóm qua câu lệnh group_by. Cú pháp của hàm summarise() là bạn cung cấp tên của (các) cột tổng hợp mới, mean tính trung bình.(tính các đo lường theo quốc gia)
hay <- a %>% group_by(Country) %>% summarise(n = n(),trung_binh= mean(Pop))#Thưc hiện gán và tạo nhóm tại vùng dữ liệu a theo biến và tạo nhóm Country tiếp đến tạo thêm cột mới với tên là trung_bình và tính trung bình của cột Pop, với n là số lần dữ liệu lặp lại.
hay
  • Với cột mới sẽ tính trung bình tất cả quan sát có tên là Brazil của cột Pop và các quan sát còn lại sẽ tương tự, chỉ xuất ra 3 cột là cột dùng để bỏ các nhóm theo quốc qua và cột mới tạo và có dữ liệu tính trung bình của cột Pop và 5 quan sát tương ướng với quốc gia, với cột nói về tần số.

  • Làm tương tự nhưng khác là tính theo median() Đưa ra giá trị trung vị của dữ liệu. Ta làm như sau:(tính các đo lường theo năm).

c <- a %>% group_by(year) %>% summarise(trung_vi = median(Pop))# Tạo nhóm lấy dữ liệu  theo năm và đặt tên là trung_vi và yêu cầu tính trung vi của cột Pop.
c
  • Xuất hiện 2 biến dữ liệu và 72 quan sát thèo từng năm theo móc thời gian, với mỗi quan sát là phép tính trung vị của dữ liệu yêu cầu.

  • Kết hợp tạo nhóm theo cột cẩ tên quốc gia và thời gian:

  • Ở phần grounp_by: tạo nhóm với ta sẽ nhâp cột năm và thời gian

  • Còn trong sumarise: cung cấp tên của (các) cột tổng hợp mới, ta sẽ tạo thêm cột mới tên là Phan_tich với yêu cầu tính trung bình của cọt Pop

  • groups:‘drop’: không tính trung bình với những ô dữ liệu trống.

e <- a %>% group_by(Country,year) %>% summarise(n = n(),phan_tich = mean(Pop),.groups = 'drop')
e
  • Kết quả xuất hiện 360 quan sát và 4 biến với 360 quan sát và 2 biến đầu giống với phần dữ liệu cũ, còn cột n là số dữ liệu lặp lại và cuối cùng là côt phan_tich: tính trung bình nhưng chỉ có 1 mục tiêu nên nó giữ nguyên biến Pop của dữ liệu cũ.

2.5 Chuyển dữ liệu từ long table sang wide table

  • Dùng để xoay và chuyển dữ liệu theo một dạng khác. ( có thể đổi từ cột sang hàng, cũng như hàng sang cột) bằng lệnh “spread” trong đó bao gồm các điều kiện key khóa vùng dữ liệu biến đổi thành các biến và value là dữ liệu để thống kế lại thành quan sát
library(tidyr)#Mở gói lệnh trong thư viện
u <- e %>% spread(key = Country, value = year)# khóa vùng dữ liệu quốc gia, và lấy dữ liệu year để quan sát.
u
  • Kết quả xuất ra màn hinh với 360 quan sát và 7 biến tương ứng với tần suất lặp lại của các quốc gia tính theo năm với 5 biến của quốc gia và 1 biến của cột phan_tich: tính hệ số trung bình của năm theo quốc gia.(Đi kèm 2 điều kiện trong key không làm giảm đi các quan sat hay biến vì năm trong mỗi quốc gia lập lại chỉ 1 lần và ngược lại.)

3 Nhiệm vụ 3.2


3.1 Giải thích bộ dữ liệu

Trong file:SYB66_309_202310_Education.csv. nói về việc Tuyển sinh các cấp tiểu học, trung học cơ sở và trung học phổ thông của các khu vực quốc gia và nhóm quốc gia trên thế giới.

  • Trong đó có các biến:

1.Region/Country/Area:Vùng/Quốc gia/Khu vực: là các kí hiệu bằng số liệu tùy thuộc vào mỗi quốc gia và vùng quốc gia.

2.Cột/biến trống bỏ vào dữ liệu dược kí hiệu là x: là tên các quốc gia hay nhóm quốc gia.

4.Year: năm tuyển sinh kéo dài từ 2000-2022, Tùy vào mỗi quốc gia.

5.Series: hàng loạt các đối tượng tuyển sinh, trong đó bao gồm:

  1. Students enrolled in primary education (thousands):học sinh đăng ký học tiểu học (nghìn).
  • Gross enrollment ratio - Primary (male):Tỷ lệ nhập học chung - Tiểu học (nam).
  • Gross enrollment ratio - Primary (female):Tỷ lệ nhập học chung - Tiểu học (nữ).
  1. Students enrolled in lower secondary education (thousands):Số học sinh đăng ký học trung học cơ sở (nghìn).
  • Gross enrollment ratio - Lower secondary level (male):Tỷ lệ nhập học chung - Cấp trung học cơ sở (nam).
  • Gross enrollment ratio - Lower secondary level (female): Tỷ lệ nhập học chung - Cấp trung học cơ sở (nữ).
  1. Students enrolled in upper secondary education (thousands): Số học sinh đăng ký học trung học phổ thông (nghìn).
  • Gross enrollment ratio - Upper secondary level (male):Tỷ lệ nhập học chung - Cấp trung học phổ thông (nam).
  • Gross enrollment ratio - Upper secondary level (female):Tỷ lệ nhập học chung - Cấp trung học phổ thông (nữ).

6.Value: Số lượng học sinh đã đăng kí.

7.Footnotes: Đánh dấu vào chân trang nếu các chỉ liệu chưa chắc chắn nào ở việc ước lượng(Estimate).

8.Source: Lấy từ nguồn và trích dẫn qua United Nations Educational, Scientific and Cultural Organization (UNESCO), Montreal, the UNESCO Institute for Statistics (UIS) statistics database, last accessed April 2023: Tổ chức Giáo dục, Khoa học và Văn hóa Liên Hợp Quốc (UNESCO), Montreal, cơ sở dữ liệu thống kê của Viện Thống kê UNESCO (UIS), truy cập lần cuối vào tháng 4 năm 2023.

-> Nhìn chung file có 7 biến và 7530 quan sát.

Mở file:SYB66_309_202310_Education.csv.lên

  • Dùng hàm library () để liệt kê, đọc dữ liệu vào R từ file excel ta dùng file xlsx. Gán vào dữ liệu “nv3.2” để bật file.
library(xlsx)#lưu vào thư viện
nv3.2 <- read.csv(file.choose(),header = T)#read.csv:đọc tệp CSV bằng bằng các hàm thư viện pandas, file.choose(): chọn file đữ liệu cần tải lên, header = T: cho hiện các tiêu đề là chữ.
is.data.frame(nv3.2)# kiểm tra xem dữ liệu có phải là data của frame hay không nếu phải thì sẽ xuất ra là true còn không thì sẽ false.
## [1] TRUE
  • Sau khi thưc hiện thì dữ liệu được tải lên ô bên phải phía trên với tên đã gán.
  • Thể hiện rõ số quan sát và biến: 7530 biến quan sát và 7 biến, không có dữ liệu trống.
length(nv3.2)#câu lệnh giúp biết được độ dài của biến trong file yêu cầu là "nv3.2)" và trả kết quả là 7
## [1] 7
names(nv3.2)#cho ra tên cột của file tải lên "nv3.2"
## [1] "Region.Country.Area" "X"                   "Year"               
## [4] "Series"              "Value"               "Footnotes"          
## [7] "Source"
dim(nv3.2)#Cầu lệnh nêu ra vói yêu cầu hãy xuất ra vecto chứa số hàng, cột của file xuất ra theo đúng quan sát và biến là 7530 và 7.
## [1] 7530    7
sum(is.na(nv3.2))#câu lệnh ta tính được tổng số ô trống trong dữ liệu "nv3.2"
## [1] 0

Hiểu rõ hơn về dữ liệu đã tải ta thống kê lại datasheet với các muc:

n_missing: số ô dữ liệu bị miss(trống)

complete_rate: tỷ lệ ô có dữ liệu

mean: trung bình

sd: độ lệch chuẩn

p0: giá trị nhỏ nhất

p25: Phân vị thứ nhất

p50: Phân vị thứ hai cũng chính là trung vị

p75: phân vị thứ ba

p100: giá trị lớn nhất

hist: biểu đồ Histogram

library(skimr)
skim(nv3.2)
## Warning: There was 1 warning in `dplyr::summarize()`.
## ℹ In argument: `dplyr::across(tidyselect::any_of(variable_names),
##   mangled_skimmers$funs)`.
## ℹ In group 0: .
## Caused by warning:
## ! There were 122 warnings in `dplyr::summarize()`.
## The first warning was:
## ℹ In argument: `dplyr::across(tidyselect::any_of(variable_names),
##   mangled_skimmers$funs)`.
## Caused by warning in `grepl()`:
## ! unable to translate 'C<f4>te d<92>Ivoire' to a wide string
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 121 remaining warnings.
Data summary
Name nv3.2
Number of rows 7530
Number of columns 7
_______________________
Column type frequency:
character 4
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
X 0 1 4 29 0 226 0
Series 0 1 39 58 0 9 0
Footnotes 0 1 0 9 6877 2 0
Source 0 1 173 173 0 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Region.Country.Area 0 1 405.50 258.44 1 178.0 414 626.00 894 ▇▆▇▆▅
Year 0 1 2012.53 5.64 2000 2008.0 2012 2017.00 2022 ▁▇▇▇▇
Value 0 1 2214.95 21038.06 0 75.7 101 132.07 744871 ▇▁▁▁▁

3.2 Lựa chọn các quan sát và biến để phân tích

*Chọn quan sát:

  • Chọn các theo cột trống/ kí hiệu X: Ghi nhận tên các quốc gia và nhóm quốc gia trên thế giới.(cột này vẫn sẽ xuất hiện ở dữ liệu cột sau khi lọc)(1)

1.Japan : đại diện cho các quốc gia phát triển.

2.Philippines; đại diện cho các quốc gia đang phát triển.

3.Burundi: đai diện cho các quốc gia kém phát triển.

*Chọn biến/ cột:

2.Year: để dể nhận dạng các quốc gia theo từng năm hay từng đối tượng đăng kí hay tuyển sinh.

3.Series: để phân loại được các đối tượng các học sinh theo từng quốc gia.

4.Value: để có số lượng dể dàng cho quá trình mã hóa.

Vì vậy ta thực hiện các bước để lọc các quan sát và biến để dể dàng phân tích.

library(dplyr)#lưu vào thư viện và mở gói lệnh dplyr ra để thực hiện câu lệnh phía sau.
r <- nv3.2 %>% filter(X=='Japan'|X=='Philippines'|X=='Burundi') %>% select(X,Year,Series,Value) #Gán vào r với các điều kiện lọc (trong hàm filter) ở biến dữ liệu trống/tên X ra 3 quốc gia là  Japan hoặc  hoặc Philippines hoặc Burundi kết hợp hàm select để chọn các biến/ cột tương ướng với ý đồ đã chọn trên.
r
  • Kết quả ra 1 nhóm dữ liệu gồm 93 quan sát kéo dài theo chữ cái từ Burundi->Japan->Philippines và 4 biến với thứ tự các biến theo các column mình đã chọn ở trên xếp từ trái sang phải và vẫn giữ nguyên dữ liệu cũ kèo dài từ năm 2005-2021.

3.3 Mã hóa dữ liệu, lập bảng tần số

  • Đầu tiên dể dàng cho việc phân tích ta sẽ đổi tên lại cho 4 biến bằng câu lệnh names() <- c(tên biến muốn đổi: biến 1, biến 2, biến 3). Sử dùng các kí tự đầu để phân biệt dể nhận dạng các biến.

Cách thực hiện như sau:

names(r) <- c('Country', 'year','Se','Va')# Gọi tên mới từ dữ liệu đã tải lên với tên đã gán là a Với 4 biến và đổi tên biến từ trái sang phải theo thứ tự hàng loạt các biến trong bộ dữ liệu cũ.
r
  • Kết quả không làm thay đổi dữ lệu cột bên dưới hay số quan sát chỉ thay đổi tên của biến theo nhu cầu đã đặt ở trên.

  • Câu lệnh recode(): Là quá trình mã hóa mà ta sẽ mã hóa lại biến hay vùng dữ liệu theo phân loại thành những nhóm dữ liệu khác nhau.

Lập bảng tầng số cho 1 biến

  • Câu lệnh table():: thông kê dãy dữ lệu của biến theo số lượng.

Cách thưc hiện như sau:

library(dplyr)
r$Country.coded <- recode(r$Country,Japan = 'Nhóm 1', Philippines = 'Nhóm 2', Burundi = 'Nhóm 3')#Lấy dữ liệu r tạo thêm 1 biến mới tên là Country.code với yêu cầu mã hoá lại vùng dữ liệu biến Country theo nhóm phát triển tính theo (GDP) cao nhất từ trên xuống như Japan-nhóm1, Philippines- nhoms2,...
table(r$Country.code)# Muốn biết trong cột Country.code có số lượng của các nhóm là bao nhiêu.
## 
## Nhóm 1 Nhóm 2 Nhóm 3 
##     18     39     36
  • Kết quả dữ liệu r tăng thêm 1 biến là 5 cột và quan sát vẫn dữ nguyên là 93 quan sát. Trong đó các vùng dữ liệu trong 4 biến không thay đổi chỉ thêm một biến mới với ý đồ ở trên và hiện lên trên trang dữ liệu tên quốc gia đầu tiên là Burundi theo thứ tự mức độ phát triển trong 3 nước thì nó đứng thứ 3 nên vào nhóm 3 hay Japan thì phát triển nhất trong 3 nước nên thuộc thuộc Nhóm 1, và các nước còn lại tương tự.

  • Xuất hiện tổng kết quả đếm được của nhóm 1 đến nhóm 3 lần lượt từ trên xuống.

  • Câu lệnh ifelse: dùng để mã hóa các dữ liệu thuộc 1 biến về định lương và về định tính, câu lệnh có điều kiện được sử dụng để quyết định xem một câu lệnh hoặc khối câu lệnh nhất định có được thực thi hay không, tức là nếu một điều kiện nhất định là đúng thì khối câu lệnh đó sẽ được thực thi, ngược lại thì không.

Cách làm như sau:

r$year.coded <- ifelse(r$year > 2005,'Những năm tiếp theo', 'Năm đầu')# Lấy dữ liệu r tạo thêm biến mới tên là year.coded, lấy điều kiện để mã hóa vùng dữ liệu của biến year nếu lớn hơn hoặc bằng 2005 (chọn mã hóa biến year vì để nhận diện so với năm đầu tiên có gì thay đổi so với năm khác) nếu dữ liệu quan sát thỏa mãn điều kiện thì sẽ trả về dữ liệu là 'Những năm tiếp theo', ngược lại là 'Năm đầu'.
r
  • Kết quả dữ thêm có thêm một biến là từ 5 lên 6 và số quan sát vẫn không thay đổi là 93, các vùng dữ liệu trước vẫn giữ nguyên. Với quán sát đầu tên biến year.coded thể hiện ở dữ liệu Burundi năm đầu tiên là 2005 bằng với điều kiện nên sẽ mã hóa là “năm đầu” còn lại sẽ dược mã hóa tương tự.

  • Câu lệnh Cause_When():Phân thành các nhóm (hay rời rạc hóa) biến liên tục, được sử dụng khi chúng ta có nhiều điều kiện ràng buộc, câu lệnh này được coi là thay thế trong trường hợp phải dùng quá nhiều ifelse().

  • VD: tạo thêm biến Va.coded để mã hóa vùng dữ liệu Va(chọn biến này để so sánh thấy rõ được số lượng đăng kí học tập của các quốc gia từ phát triển cao đến thấp ) thành các yêu cầu và cách làm như sau:

r$Va.coded <- case_when(r$Va < 50 ~ 'Ít', r$Va >= 50 & r$Va <= 100 ~ 'Bình thường', r$Va >100 ~ 'Đông')#Vẫn lấy dữ liệu r để thêm biến thực hiện quá trình mã với từng điều kiện là vùng dữ liệu của biến Va bé hơn 50 thì trả về dữ liệu là 'íT', nằm trong khoảng lớn hơn 50 hoặc nhỏ hơn 100 thì trả về dữ liệu 'Bình thường', còn lại lớn hơn 100 thì 'Đông'.
r
  • Kết quả thu đươc là có 93 quan sát không thay đổi và 7 biến(tăng thêm 1 biến so vói vùng dữ liệu cũ), các vùng dữ liệu trước vẫn giữ nguyên. Với quan sát của Burundi_2005_Students enrolled in primary education (thousands) là 1037.0 lớn hơn 100 sẽ trả về là ‘Đông’, tiếp đến quan sát của Japan_2015_Gross enrollment ratio - Gross enrollment ratio - Primary (male) là 98.7 nằm trong khoảng lớn hơn 50 hoặc nhỏ hơn 100 nên mang dữ liệu ’ Bình thường’ và quan sát của Burundi_2020_Gross enrollment ratio - Upper secondary level (male) là 44.5 bé hơn 50 chứa dữ liệu ‘Ít’ các quan sát còn lại sẽ thống kê tương tự.

  • Câu lệnh Cut(): dùng để mã hóa, cắt/chia vùng dữ liệu ra tạo ra một biến mới phù hợp các yếu cầu hệ thống sẽ tự động chia theo các khoảng nhất định.VD: lấy dữ liệu a và tạo thêm biến mới là Va.coded1 và làm các nhiệm vụ phân tách nhóm, với ý muốn ta chia làm 3 nhóm với tên mỗi nhóm lần lượt từ loại 1 đến loại 3 và thực hiện phân loại trong biến Va và thực hiện như sau:

  • Kết hợp lập tần số cho 2 biến:

r$Va.coded1 <- cut(r$Va,3,labels = c('Loại 1','Loại 2','Loại 3'))#cut()để biết chính xác các tham số và chức năng của hàm. với lables (tuỳ chọn) là một vector chứa các nhãn bạn đặt cho các nhóm.
i <- table(r$Country,r$Va.coded1)# Đếm theo số lượng 3 quốc gia để xuất và đếm kết quả theo số loại đã đặt ờ trên vd: burndi có 36 loại và không có loại 2,3.
i
##              
##               Loại 1 Loại 2 Loại 3
##   Burundi         36      0      0
##   Japan           16      2      0
##   Philippines     31      4      4
  • Kết quả ta có 8 biến và 93 quan sát, tăng thêm 1 biến mới theo ý muốn ở trên và số quan sát và dữ liệu cũ vẫn giữ nguyên. Xuất hiện kết quả của các loại tùy thuộc vào dữ liệu về lượng học đăng kí thì xếp vào 3 Loại.

Lập biểu đồ nhánh và lá: Biểu đồ nhánh và lá có chức năng tương tự như histogram nhưng chỉ được dùng để hiện thị phân phối của các tập dữ liệu có kích thước vừa phải. Để vẽ biểu đồ nhánh và lá chúng ta dùng hàm stem()

stem(r$Va)# yêu cầu làm biểu đồ nhánh cho biến Va
## 
##   The decimal point is 3 digit(s) to the right of the |
## 
##    0 | 00000000000001111111111111111111111111111111111111111111111111111234
##    2 | 1323567
##    4 | 937
##    6 | 46
##    8 | 3
##   10 | 
##   12 | 517
##   14 | 5
  • Nhìn vào biểu đồ ta thấy dữ liệu có phân phối lệch phải. Biểu đồ nhánh lá có ưu điểm là các giá trị dữ liệu được hiện thị trên biểu đồ.

3.4 Phân tích dữ liệu theo quốc gia và theo thời gian

  • Câu lênh summary(): hiển thị tóm tắt về tập dữ liệu như giá trị lớn nhất, giá trị nhỏ nhất, giá trị trung bình.
summary(r$Va) #GTNN - Phân vị thứ 1 -Trung vị: 50% các số lơn hơn và 50% các số nhỏ hơn - Phân vị thứ 3 - độ lớn trung bình - GTLN của vùng dữ liệu a và biến Va để tính.
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     5.9    75.0   101.5  1380.9   500.0 14453.0
  • Câu lẹnh quantile (): Hiển thị các lượng tử theo mặc định — 0%, 25%, 50%, 75% và 100% lượng tử.
quantile(r$Va, probs = c(.25,.5,.75))#Với probs là đặt vấn đề tỷ lệ lượng tử ra xuất ra kết quả lấy từ  dữ liệu trong ô Va của r
##   25%   50%   75% 
##  75.0 101.5 500.0
  • Câu lệnh Var(): hàm để tính phương sai từ dữ liệu cho trước, sư chệnh lệch giữa các biến cố.
var(r$Va)#Xuất kết quả khi đã tính phương sai của cả cột dữ liệu r với tên biến Va
## [1] 9460885
  • Câu lệnh Sd(): độ lệch chuẩn dùng trong thống kê mô tả để đo mức độ phân tán của một tập dữ liệu đã được lập thành bảng tần số. Có thể tính ra độ lệch chuẩn bằng cách lấy căn bậc hai của phương sai.
sd(r$Va)#lấy vùng dữ liệu r và trong biến Va để thực hiện. Kết quả cho ra là căn bật 2 của var ở trên.
## [1] 3075.855
  • Với câu lệnh “group_by”- tạo nhóm theo biến, summarise: là dữ liệu sẽ tổng hợp những giá trị thống kê cho từng nhóm qua câu lệnh group_by. Cú pháp của hàm summarise() cung cấp tên của (các) cột tổng hợp mới, mean tính trung bình.(tính các đo lường theo quốc gia). Thực hiện như sau:
nice <- r %>% group_by(Country) %>% summarise(n = n(),trung_binh= mean(Va))#Thưc hiện gán và tạo nhóm tại vùng dữ liệu r theo biến và tạo nhóm Country tiếp đến tạo thêm cột mới với tên là trung_bình và tính trung bình của cột Va, với n là số lần dữ liệu lặp lại.
nice
  • Với cột mới sẽ tính trung bình tất cả quan sát có tên là Burundi của cột Va và các quan sát còn lại sẽ tương tự, chỉ xuất ra 3 cột là cột dùng để bỏ các nhóm theo quốc qua và cột mới tạo và có dữ liệu tính trung bình của cột Va và 3 quan sát tương ướng với quốc gia, với cột nói về tần số.

  • Làm tương tự nhưng khác là tính theo median() Đưa ra giá trị trung vị của dữ liệu. Ta làm như sau:(tính các đo lường theo năm).

t <- r %>% group_by(year) %>% summarise(trung_vi = median(Va))# Tạo nhóm lấy dữ liệu theo năm và đặt tên là trung_vi và yêu cầu tính trung vi của cột Va.
t
  • xuất hiện 2 biến dữ liệu và 6 quan sát thèo từng năm theo móc thời gian, với mỗi quan sát là phép tính trung vị của dữ liệu yêu cầu.

  • Kết hợp tạo nhóm theo cột cả tên quốc gia và thời gian:

  • Ở phần grounp_by: tạo nhóm với ta sẽ nhâp cột năm và thời gian

  • Còn trong sumarise: là bạn cung cấp tên của (các) cột tổng hợp mới, ta sẽ tạo thêm cột mới tên là Phan_tich với yêu cầu tính trung bình của cột Va

  • groups:‘drop’: không tính trung bình với những ô dữ liệu trống.

p <- r %>% group_by(Country,year) %>% summarise(n = n(),phan_tich = mean(Va),.groups = 'drop')
p
  • Kết quả xuất hiện 11 quan sát và 4 biến với dữ liệu qua các năm được làm gọn lại theo số năm từ quốc gia xếp theo bảng chữ cái, trong nó n là số dữ liệu lặp lại của năm và côt phan_tich: tính trung bình các cột có cùng năm trong cùng quốc gia.

3.5 Chuyển dữ liệu từ long table sang wide table

  • Dùng để xoay và chuyển dữ liệu theo một dạng khác. ( có thể đổi từ cột sang hàng, cũng như hàng sang cột) bằng lệnh “spread” trong đó bao gồm các điều kiện key khóa vùng dữ liệu bỏ thành các biến và value là vùng dữ liệu cần được thống kê lại theo quan sát
library(tidyr)#Mở gói lẹnh trong thư viện
v <- p %>% spread(key = year, value = Country)#khóa vùng dữ liệu năm, muốn lấy dữ liệu quốc gia để quan sát
v
  • Kết quả xuất ra màn hinh với 11 quan sát và 8 biến tương ứng với tần suất lặp lại của các quốc gia với 6 biến của số năm và 1 biến của cột phan_tich tính hệ số trung bình của quốc gia theo năm.