“21:34:22, 26 - 01 - 2024”

1 Nhiệm vụ 3.1: population-and-demography

1.1 Giới thiệu:

Nhiệm vụ 3.1 tiến hành thao tác 1 số lệnh cơ bản trên dataset “population-and-demography.csv”. Dataset thống kê dân số và dân số theo từng độ tuổi khác nhau của các nước khác nhau.

1.2 Mô tả cơ bản datasets

  • Là một data frame
  • Có 24 cột tương ứng với 24 giá trị
  • Có 18288 hàng tương ứng với 18288 quan sát
  • Dataset không có dữ liệu trống
  • Ký hiệu các cột là:
    • Country name: Tên quốc gia
    • Year: Năm
    • Population: Dân số
    • Population of children under the age of 1: Dân số của trẻ em dưới 1 tuổi
    • Population of children under the age of 5: Dân số của trẻ em dưới 5 tuổi
    • Population of children under the age of 15: Dân số của trẻ em dưới 15 tuổi
    • Population under the age of 25: Dân số dưới 25 tuổi
    • Population aged 15 to 64 years: Dân số từ 15 đến 64 tuổi
    • Population older than 15 years: Dân số trên 15 tuổi
    • Population older than 18 years: Dân số trên 18 tuổi
    • Population at age 1: Dân số tại lúc 1 tuổi
    • Population aged 1 to 4 years: Dân số từ 1 đến 4 tuổi
    • Population aged 5 to 9 years: Dân sô từ 5 đến 9 tuổi
    • Population aged 10 to 14 years: Dân số từ 10 đến 14 tuổi
    • Population aged 15 to 19 years: Dân số từ 15 đến 19 tuổi
    • Population aged 20 to 29 years: Dân số từ 20 đến 29 tuổi
    • Population aged 30 to 39 years: Dân số từ 30 đến 39 tuổi
    • Population aged 40 to 49 years: Dân số từ 40 đến 49 tuổi
    • Population aged 50 to 59 years: Dân số từ 50 đến 59 tuổi
    • Population aged 60 to 69 years: Dân số từ 60 đến 69 tuổi
    • Population aged 70 to 79 years: Dân số từ 70 đến 79 tuổi
    • Population aged 80 to 89 years: Dân số từ 80 đến 89 tuổi
    • Population aged 90 to 99 years: Dân số từ 90 đến 99 tuổi
    • Population older than 100 years: Dân số trên 100 tuổi

Thực hiện thao tác đọc và gán dữ liệu vào máy. Sau thao tác này thì dữ liệu từ file “population-and-demography.csv” đã được gán vào d như bên dưới

#Đọc dữ liệu từ file csv và gán vào object d
d <- read.csv("C:/Users/Admin/Downloads/population-and-demography.csv", header = TRUE)

Kiểm tra xem “d” có phải là data frame hay không, nếu đúng thì true và ngược lại. Và kết quả trả về là TRUE suy ra d là một dataframe

is.data.frame(d) 
## [1] TRUE

Xác định số hàng, số cột của d dưới dạng vecto. Kết quả trả về thì d tương ứng có 18288 hàng và 24 cột

dim(d)
## [1] 18288    24

Xác định số ô trống của d. Kết quả trả về tương ứng với d không có ô trống nào

sum(is.na(d))
## [1] 0

1.3 Thống kê dữ liệu

Thực hiện thống kê mô tả dataset này ta được kết quả bên dưới, ý nghĩa các cột như sau:

  • 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

Xác định các thông tin cơ bản trong d

library(skimr)
skim(d)
Data summary
Name d
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 ▇▁▁▁▁

1.4 Đổi tên các cột để thao tác

Các ký hiệu tên tương ứng theo thứ tự lần lượt từ cột 1 đến cột 24

  • Country name= ‘cn’

  • Year= ‘y’

  • Population= ‘p’

  • Population of children under the age of 1= ‘pu1’

  • Population of children under the age of 5= ‘pu5’

  • Population of children under the age of 15= ‘pu15’

  • Population under the age of 25= ‘pu25’

  • Population aged 15 to 64 years= ‘p15t64’

  • Population older than 15 years= ‘pt15’

  • Population older than 18 years= ‘pt18’

  • Population at age 1= ‘p1’

  • Population aged 1 to 4 years= ‘p1t4’

  • Population aged 5 to 9 years= ‘p5t9’

  • Population aged 10 to 14 years= ‘p10t14’

  • Population aged 15 to 19 years= ‘p15t19’

  • Population aged 20 to 29 years= ‘p20t29’

  • Population aged 30 to 39 years= ‘p30t39’

  • Population aged 40 to 49 years= ‘p40t49’

  • Population aged 50 to 59 years= ‘p50t59’

  • Population aged 60 to 69 years= ‘p60t69’

  • Population aged 70 to 79 years= ‘p70t79’

  • Population aged 80 to 89 years= ‘p80t89’

  • Population aged 90 to 99 years= ‘p90t99’

  • Population older than 100 years= ‘pt100’

names(d) = c('cn','y','p','pu1','pu5','pu15','pu25','p15t64','pt15','pt18','p1','p1t4','p5t9','p10t14','p15t19','p20t29','p30t39','p40t49','p50t59','p60t69','p70t79','p80t89','p90t99','pt100')
names(d)
##  [1] "cn"     "y"      "p"      "pu1"    "pu5"    "pu15"   "pu25"   "p15t64"
##  [9] "pt15"   "pt18"   "p1"     "p1t4"   "p5t9"   "p10t14" "p15t19" "p20t29"
## [17] "p30t39" "p40t49" "p50t59" "p60t69" "p70t79" "p80t89" "p90t99" "pt100"

1.5 Rút trích dữ liệu

Việc rút trích dữ liệu theo ý muốn cũng như phần dữ liệu được rút sẽ giúp việc tìm hiểu trở nên tối ưu hơn, để chắc chắn đã rút trích thành công ta dùng lệnh str(x) với x là tên object mà ta gán dữ liệu để có thể xem các đối tượng và số lượng của biến của x

Chọn ra 6 cột tương ứng là “cn”,“y”,“p”,“pu5”,“pu15”,“pu25”,“pt18”,“pt100” và chọn những hàng bắt đầu bằng chữ “A” gán vào object d1. Kết quả trả về là d1 gồm có 6 cột và 1152 giá trị

library(dplyr)
## 
## 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
library(stringr)
d1 <- select(d,cn,y,p,pu5,pu15,pu25,pt18,pt100) %>% filter(str_detect(cn, "^A"))
str(d1)
## 'data.frame':    1152 obs. of  8 variables:
##  $ cn   : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ y    : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ p    : num  7480464 7571542 7667534 7764549 7864289 ...
##  $ pu5  : int  1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
##  $ pu15 : int  3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
##  $ pu25 : num  4494349 4552138 4613604 4676232 4741371 ...
##  $ pt18 : num  3946595 3993640 4041439 4088379 4136116 ...
##  $ pt100: num  0 0 0 0 0 0 0 0 0 0 ...

1.6 Mã hoá dữ liệu

Câu lệnh biểu thị một điều kiện so sánh trên cột pt100 của bảng dữ liệu d1

  • Nếu giá trị trong cột pt100 của hàng nào đó bằng 0 (d1$pt100 == 0 đúng), thì giá trị của cột pt100 trong hàng đó sẽ được thay thế bằng chuỗi ‘Khong Co’.

  • Nếu giá trị trong cột pt100 của hàng nào đó không bằng 0 (d1$pt100 == 0 sai), thì giá trị của cột pt100 trong hàng đó sẽ được thay thế bằng chuỗi ‘Co’

#Câu lệnh biểu thị một điều kiện so sánh trên cột pt100 của bảng dữ liệu d1
d1$pt100.phanloai <- ifelse(d1$pt100 == 0, 'Khong Co', 'Co')
str(d1)
## 'data.frame':    1152 obs. of  9 variables:
##  $ cn            : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ y             : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ p             : num  7480464 7571542 7667534 7764549 7864289 ...
##  $ pu5           : int  1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
##  $ pu15          : int  3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
##  $ pu25          : num  4494349 4552138 4613604 4676232 4741371 ...
##  $ pt18          : num  3946595 3993640 4041439 4088379 4136116 ...
##  $ pt100         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ pt100.phanloai: chr  "Khong Co" "Khong Co" "Khong Co" "Khong Co" ...

Lệnh được sử dụng để tạo một biến mới (p.cut) trong bảng dữ liệu d1 bằng cách chia biến hiện tại p thành các khoảng và gắn tên cho mỗi khoảng dựa trên giá trị của nó. Cụ thể:

  • d1$p là biến bạn đang muốn chia thành các khoảng.

  • 3 là số lượng khoảng bạn muốn tạo.

  • labels = c(‘It’, ‘Trung Binh’, ‘Nhieu’) là tên tương ứng với mỗi khoảng.

Kết quả là, biến mới p.cut sẽ chứa các tên tương ứng (‘It’,‘Trung Binh’,‘Nhieu’) với khoảng mà giá trị của p thuộc vào. Nó tạo ra một biến phân loại dựa trên giá trị của biến số p.

d1$p.cut <- cut(d1$p,3,labels = c('It','Trung Binh','Nhieu'))
str(d1)
## 'data.frame':    1152 obs. of  10 variables:
##  $ cn            : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ y             : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ p             : num  7480464 7571542 7667534 7764549 7864289 ...
##  $ pu5           : int  1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
##  $ pu15          : int  3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
##  $ pu25          : num  4494349 4552138 4613604 4676232 4741371 ...
##  $ pt18          : num  3946595 3993640 4041439 4088379 4136116 ...
##  $ pt100         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ pt100.phanloai: chr  "Khong Co" "Khong Co" "Khong Co" "Khong Co" ...
##  $ p.cut         : Factor w/ 3 levels "It","Trung Binh",..: 1 1 1 1 1 1 1 1 1 1 ...

1.7 Lập bảng tần số

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

  • Bảng tần số có 72 mức giá (1d), được đánh số từ 1 đến 72, tương ứng với mỗi năm từ 1950 đến …

  • Số lần xuất hiện là 16.

  • Attribue “dimnames” mô tả các tên của mỗi mức giá, và chúng được hiển thị dưới dạng chuỗi năm, ví dụ: “1950”, “1951”, “1952”, …

d2 <- table(d1$y)
str(d2)
##  'table' int [1:72(1d)] 16 16 16 16 16 16 16 16 16 16 ...
##  - attr(*, "dimnames")=List of 1
##   ..$ : chr [1:72] "1950" "1951" "1952" "1953" ...

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

Dưới đây là kết quả chi tiết:

  • Bảng tần số có 72 hàng (1:72) và 3 cột (1:3).

  • Chiều thứ nhất (hàng) đại diện cho năm, được đánh số từ 1 đến 72, tương ứng với mỗi năm từ 1950 đến …

  • Chiều thứ hai (cột) đại diện cho các nhóm hoặc mức độ (It, Trung Binh, Nhieu).

  • Mỗi ô trong bảng chứa số lần xuất hiện tương ứng với năm và nhóm tương ứng.

Attribute “dimnames” bao gồm hai danh sách:

  • Danh sách đầu tiên (chiều hàng) chứa tên của mỗi năm, ví dụ: “1950”, “1951”, “1952”, …

  • Danh sách thứ hai (chiều cột) chứa tên của mỗi nhóm, ví dụ: “It”, “Trung Binh”, “Nhieu”.

d3 <- table(d1$y,d1$p.cut)
str(d3)
##  'table' int [1:72, 1:3] 16 16 16 16 16 16 15 15 15 15 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:72] "1950" "1951" "1952" "1953" ...
##   ..$ : chr [1:3] "It" "Trung Binh" "Nhieu"

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

Tính trung bình, phương sai, min, max của cột p

Kết quả là:

st Qu.: Phân vị thứ nhất . 25% dữ liệu nhỏ hơn giá trị này (7.099e+04).

Median: Trung vị. Giá trị giữa khi dữ liệu được sắp xếp theo thứ tự tăng dần (7.023e+06).

Mean: Giá trị trung bình (2.338e+08).

3rd Qu.: Phân vị thứ ba . 75% dữ liệu nhỏ hơn giá trị này (2.108e+07).

Max.: Giá trị lớn nhất trong dữ liệu (4.695e+09).

summary(d1$p)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 5.036e+03 7.099e+04 7.023e+06 2.338e+08 2.108e+07 4.695e+09

Phân tích dân số trung bình theo từng nhóm quốc gia

Lệnh d4 <- d1 %>% group_by(y) %>% summarise(mean_of_population = mean(p)) trong R sử dụng gói dplyr để thực hiện một phép tổng hợp dữ liệu trên cột “cn” của bảng dữ liệu “d1” theo nhóm “y”. Dưới đây là giải thích chi tiết:

  • group_by(y): Nhóm dữ liệu theo cột “y”. Điều này có nghĩa là các phép tổng hợp tiếp theo sẽ được thực hiện cho từng nhóm “y” riêng biệt.

  • summarise(mean_of_population = mean(p)): Tính trung bình của cột “p” cho mỗi nhóm “cn” và tạo ra một cột mới có tên “mean_of_population” để lưu trữ kết quả.

Kết quả trả về:

  • Cột “cn”: Chứa tên quốc gia (cột “cn” trong bảng dữ liệu).

  • Cột “mean_of_population” chứa giá trị trung bình của cột “p” cho từng năm.

d4 <- d1 %>% group_by(cn) %>% summarise(mean_of_population = mean(p))
str(d4)
## tibble [16 × 2] (S3: tbl_df/tbl/data.frame)
##  $ cn                : chr [1:16] "Afghanistan" "Africa (UN)" "Albania" "Algeria" ...
##  $ mean_of_population: num [1:16] 1.66e+07 6.43e+08 2.63e+06 2.35e+07 3.92e+04 ...

Phân tích và tổng hợp số trẻ em dưới 15 tuổi theo nhóm quốc gia và năm

Lệnh R này sử dụng dplyr để tạo một tóm tắt của data frame d1 bằng cách nhóm theo cột cn (quốc gia) và y (năm), sau đó tính tổng số lượng (n) và tổng của cột pu15 trong mỗi nhóm. Kết quả sẽ là data frame mới d5 chứa thông tin tổng hợp theo quốc gia và năm.

Kết quả trả về có 1,152 dòng và 4 cột:

  • Cột “cn”: Chứa tên quốc gia (cột “cn” trong bảng dữ liệu).
  • Cột “y”: Chứa năm (cột “y” trong bảng dữ liệu).
  • Cột “n”: Chứa số lượng (số lần xuất hiện) của mỗi cặp giá trị “cn” và “y”.
  • Cột “sum_of_pu15”: Chứa tổng giá trị của cột “pu15” cho mỗi cặp giá trị “cn” và “y”
d5 <- d1 %>% group_by(cn,y) %>% summarise(n = n(),sum_of_pu15 = sum(pu15),.groups = 'drop')
str(d5)
## tibble [1,152 × 4] (S3: tbl_df/tbl/data.frame)
##  $ cn         : chr [1:1152] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ y          : int [1:1152] 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ n          : int [1:1152] 1 1 1 1 1 1 1 1 1 1 ...
##  $ sum_of_pu15: int [1:1152] 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...

2 Nhiệm vụ 3.2

2.1 Giới thiệu:

Nhiệm vụ 3.1 tiến hành thao tác 1 số lệnh cơ bản trên dataset “population.csv”. Dataset thống kê dân số của các nước khác nhau.

2.2 Mô tả cơ bản datasets

  • Là một data frame
  • Có 4 cột tương ứng với 4 giá trị
  • Có 16400 hàng tương ứng với 16400 quan sát
  • Dataset không có dữ liệu trống
  • Ký hiệu các cột là:
    • Country Name: Tên quốc gia
    • Country Code: Mã quốc gia
    • Year: Năm
    • Value: Giá trị dân số
#Đọc dữ liệu từ file csv và gán vào object a
a <- read.csv("C:/Users/Admin/Downloads/population.csv", header = TRUE)

Kiểm tra xem “a” có phải là data frame hay không, nếu đúng thì true và ngược lại. Và kết quả trả về là TRUE > a là một dataframe

is.data.frame(a) 
## [1] TRUE

Xác định số hàng, số cột của a dưới dạng vecto. Kết quả trả về thì d tương ứng có 16400 hàng và 4 cột

dim(a)
## [1] 16400     4

Xác định số ô trống của a. Kết quả trả về tương ứng với a không có ô trống nào

sum(is.na(a))
## [1] 0

2.3 Thống kê dữ liệu

Thực hiện thống kê mô tả dataset này ta được kết quả bên dưới, ý nghĩa các cột như sau:

  • 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

Xác định các thông tin cơ bản trong a

library(skimr)
skim(a)
Data summary
Name a
Number of rows 16400
Number of columns 4
_______________________
Column type frequency:
character 2
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country.Name 0 1 4 52 0 265 0
Country.Code 0 1 3 3 0 265 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 1990.53 17.9 1960 1975.0 1991 2006 2021 ▇▇▇▇▇
Value 0 1 214080370.13 704055432.4 2646 986302.5 6731400 46024452 7888408686 ▇▁▁▁▁

2.4 Đổi tên các cột để thao tác

Các ký hiệu tên tương ứng theo thứ tự lần lượt từ cột 1 đến cột 4

  • Country name= ‘cn2’

  • Country code= ‘ccode’

  • Year= ‘y2’

  • Value= ‘v’

names(a)= c('cn2','ccode','y2','v')
names(a)
## [1] "cn2"   "ccode" "y2"    "v"

2.5 Rút trích dữ liệu

Việc rút trích dữ liệu theo ý muốn cũng như phần dữ liệu được rút sẽ giúp việc tìm hiểu trở nên tối ưu hơn, để chắc chắn đã rút trích thành công ta dùng lệnh str(x) với x là tên object mà ta gán dữ liệu để có thể xem các đối tượng và số lượng của biến của x

Chọn ra 6 cột tương ứng là “cn2”,“ccode”,“y2”,“v” và chọn những hàng bắt đầu bằng chữ “B” gán vào object a1. Kết quả trả về là a1 gồm có 4 cột và 1116 giá trị

library(dplyr)
library(stringr)
a1 <- select(a,cn2,ccode,y2,v) %>% filter(str_detect(ccode, "^B"))
str(a1)
## 'data.frame':    1116 obs. of  4 variables:
##  $ cn2  : chr  "Burundi" "Burundi" "Burundi" "Burundi" ...
##  $ ccode: chr  "BDI" "BDI" "BDI" "BDI" ...
##  $ y2   : int  1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
##  $ v    : num  2746628 2815972 2887398 2948133 3033221 ...

2.6 Mã Hoá dữ liệu

Tạo một cột mới là “v.Danso”:

  • Nếu giá trị trong cột “v” nhỏ hơn 100,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Ít’.

  • Nếu giá trị trong cột “v” nằm trong khoảng từ 100,000 đến 5,000,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Trung Bình’.

  • Nếu giá trị trong cột “v” lớn hơn 5,000,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Nhiều’.

a1$v.Danso <- case_when(a1$v < 100000 ~ 'Ít', a1$v >= 100000 & a1$v <= 5000000 ~ 'Trung Bình', a1$v > 5000000 ~ 'Nhiều')
str(a1)
## 'data.frame':    1116 obs. of  5 variables:
##  $ cn2    : chr  "Burundi" "Burundi" "Burundi" "Burundi" ...
##  $ ccode  : chr  "BDI" "BDI" "BDI" "BDI" ...
##  $ y2     : int  1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
##  $ v      : num  2746628 2815972 2887398 2948133 3033221 ...
##  $ v.Danso: chr  "Trung Bình" "Trung Bình" "Trung Bình" "Trung Bình" ...

Lệnh này Chia phạm vi giá trị của cột “y” thành 3 khoảng và gán tên cho mỗi khoảng là ‘KhoangTG1’, ‘KhoangTG2’, và ‘KhoangTG3’. Các giá trị của cột “y” sẽ được gán vào các khoảng tương ứng.

a1$y2.cut <- cut(a1$y2, 3, labels = c('KhoangTG1', 'KhoangTG2', 'KhoangTG3'))
str(a1)   
## 'data.frame':    1116 obs. of  6 variables:
##  $ cn2    : chr  "Burundi" "Burundi" "Burundi" "Burundi" ...
##  $ ccode  : chr  "BDI" "BDI" "BDI" "BDI" ...
##  $ y2     : int  1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
##  $ v      : num  2746628 2815972 2887398 2948133 3033221 ...
##  $ v.Danso: chr  "Trung Bình" "Trung Bình" "Trung Bình" "Trung Bình" ...
##  $ y2.cut : Factor w/ 3 levels "KhoangTG1","KhoangTG2",..: 1 1 1 1 1 1 1 1 1 1 ...

2.7 Lập bảng Tần số

Bảng tần số trên hiển thị số lượng quan sát cho mỗi giá trị của cột “y2.cut” cho từng quốc gia (“cn2”) trong data frame “a1”. Mỗi ô trong bảng đại diện cho số lượng quan sát thuộc từng phạm vi của “y2.cut” (KhoangTG1, KhoangTG2, KhoangTG3) cho mỗi quốc gia.

table(a1$cn2,a1$y2.cut)
##                         
##                          KhoangTG1 KhoangTG2 KhoangTG3
##   Bahamas, The                  21        20        21
##   Bahrain                       21        20        21
##   Bangladesh                    21        20        21
##   Barbados                      21        20        21
##   Belarus                       21        20        21
##   Belgium                       21        20        21
##   Belize                        21        20        21
##   Benin                         21        20        21
##   Bermuda                       21        20        21
##   Bhutan                        21        20        21
##   Bolivia                       21        20        21
##   Bosnia and Herzegovina        21        20        21
##   Botswana                      21        20        21
##   Brazil                        21        20        21
##   Brunei Darussalam             21        20        21
##   Bulgaria                      21        20        21
##   Burkina Faso                  21        20        21
##   Burundi                       21        20        21

2.8 Phân tích dữ liệu theo quốc gia, mã quốc gia, dân số và thời gian

Tính trung bình, phương sai, min, max của cột v

Kết quả là:

Min.: Giá trị nhỏ nhất trong dữ liệu. Trong trường hợp này, giá trị nhỏ nhất của cột v là 44,400.

1st Qu.: Phần vị phân vị thứ nhất . Khoảng 25% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị 1st Qu. là 315,046.

Median: Giá trị trung bình . Khoảng 50% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị Median là 3,813,324.

Mean: Giá trị trung bình của dữ liệu. Trong trường hợp này, giá trị Mean là 17,929,417.

3rd Qu.: Phần vị phân vị thứ ba . Khoảng 75% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị 3rd Qu. là 9,489,023.

Max.: Giá trị lớn nhất trong dữ liệu. Trong trường hợp này, giá trị lớn nhất của cột v là 214,326,223.

summary(a1$v)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##     44400    315046   3813324  17929417   9489023 214326223

Tính dân số trung bình của mỗi quốc gia qua tất cả các năm

Kết quả hiển thị của a3 cho thấy mỗi quốc gia (cn2) và dân số trung bình (Average_Danso) của nó. Dữ liệu được tổ chức dưới dạng một tibble có 18 hàng và 2 cột.

a3 <- a1 %>% group_by(cn2) %>% summarise(Average_Danso = mean(v, na.rm = TRUE), .groups = 'drop')
str(a3)
## tibble [18 × 2] (S3: tbl_df/tbl/data.frame)
##  $ cn2          : chr [1:18] "Bahamas, The" "Bahrain" "Bangladesh" "Barbados" ...
##  $ Average_Danso: num [1:18] 2.74e+05 6.52e+05 1.09e+08 2.59e+05 9.52e+06 ...

Đếm số lượng quốc gia khác nhau có trong dữ liệu. Kết quả là có tổng cộng 18 quốc gia trong obj a1

length(unique(a1$cn2))
## [1] 18