trong đó có các biến:
Bao gồm các nhóm quốc gia:
=> 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.
=> 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.
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
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"
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)
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 | ▇▁▁▁▁ |
*chọn quan sát:
*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.
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
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á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
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
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
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
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
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
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
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
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.
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:
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
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
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.
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 | ▇▁▁▁▁ |
*Chọn quan sát:
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
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á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
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
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
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
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
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
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
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