ptt <- read.csv("C:/Users/PHAN THANH TRONG/Downloads/population-and-demography.csv", header = T)
str(ptt) # Đây là câu lệnh giúp ta kiểm tra cấu trúc của "ptt"
## 'data.frame': 18288 obs. of 24 variables:
## $ Country : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ Year : int 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
## $ Population : num 7480464 7571542 7667534 7764549 7864289 ...
## $ Population.of.children.under.the.age.of.1 : num 301735 299368 305393 311574 317584 ...
## $ Population.of.children.under.the.age.of.5 : int 1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
## $ Population.of.children.under.the.age.of.15: int 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
## $ Population.under.the.age.of.25 : num 4494349 4552138 4613604 4676232 4741371 ...
## $ Population.aged.15.to.64.years : num 4198587 4250002 4303436 4356242 4408474 ...
## $ Population.older.than.15.years : num 4411609 4466098 4522464 4578167 4633229 ...
## $ Population.older.than.18.years : num 3946595 3993640 4041439 4088379 4136116 ...
## $ Population.at.age.1 : num 258652 254304 252906 258717 264765 ...
## $ Population.aged.1.to.4.years : num 946547 947489 942827 943151 950233 ...
## $ Population.aged.5.to.9.years : int 966210 991791 1017993 1039950 1055592 1062420 1063212 1065357 1071666 1084972 ...
## $ Population.aged.10.to.14.years : int 854363 866796 878857 891707 907651 927921 951472 975939 996403 1011748 ...
## $ Population.aged.15.to.19.years : int 757113 768616 781411 794308 806216 817550 828600 839588 851433 867048 ...
## $ Population.aged.20.to.29.years : int 1241348 1260904 1280288 1298803 1316768 1334989 1353958 1374043 1393789 1414034 ...
## $ Population.aged.30.to.39.years : int 909953 922765 935638 948321 961484 975801 991166 1007440 1023595 1040441 ...
## $ Population.aged.40.to.49.years : int 661807 667015 672491 678064 684153 691279 699431 708537 717938 728233 ...
## $ Population.aged.50.to.59.years : int 467170 468881 470898 472969 475117 477664 480665 484018 487393 491447 ...
## $ Population.aged.60.to.69.years : int 271905 273286 274852 276577 278210 279789 281376 282918 284592 286551 ...
## $ Population.aged.70.to.79.years : int 92691 94358 96026 97705 99298 100839 102385 103932 105508 107136 ...
## $ Population.aged.80.to.89.years : int 9499 10155 10721 11254 11793 12342 12890 13428 13959 14495 ...
## $ Population.aged.90.to.99.years : int 123 118 139 166 190 210 233 255 277 307 ...
## $ Population.older.than.100.years : num 0 0 0 0 0 0 0 0 0 0 ...
Ta thấy, “ptt” là một data frame bao gồm 18288 quan sát và 24 biến. Tên các biến của “ptt” như sau:
Country: Tên quốc gia
Year: Năm
Population: Dân số
Population.of.children.under.the.age.of.1: Dân số dưới 1 tuổi
Population.of.children.under.the.age.of.5: Dân số dưới 5 tuổi
Population.of.children.under.the.age.of.15: Dân số 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ố lớn hơn 15 tuổi
Population.older.than.18.years: Dân số lớn hơn 18 tuổi
Population.at.age.1: Dân số tại độ tuổi 1
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ố lớn hơn 100 tuổi
Ta thấy file “population-and-demography.csv” là một file cực kỳ lớn với 24 biến và 18288 quan sát. Ta chỉ cần lọc ra dữ liệu về quốc gia, độ tuổi và dân số của 5 nước. Ta thực hiện thao tác 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
Lọc ra dữ liệu của các nước: Botswana, Brazil, Comoros, Ecuador, và Greenland
Chọn những cột Tên quốc gia, Năm, Dân số dưới 15 tuổi, Dân số từ 60 đến 69 tuổi, Dân số từ 70 đến 79 tuổi, Dân số từ 80 đến 89 tuổi, Dân số từ 90 đến 99 tuổi, Dân số trên 100 tuổi
ptt <- ptt %>% select(Country,Year,Population,Population.of.children.under.the.age.of.15,Population.aged.60.to.69.years,Population.aged.70.to.79.years,Population.aged.80.to.89.years,Population.aged.90.to.99.years,Population.older.than.100.years)
Vì tên các cột quá dài nên ta sẽ đặt lại tên để dễ dàng thao tác hơn, các tên cột mới sẽ ứng với các tên cột cũ như sau:
name: Country
yr: Year
pp: Population
under15: Population.of.children.under.the.age.of.15
60-69: Population.aged.60.to.69.years
70-79: Population.aged.70.to.79.years
80-89: Population.aged.80.to.89.years
90-99: Population.aged.90.to.99.years
older100: Population.older.than.100.years
# Đổi tên các biến của "ptt" bằng cách gán các vector
names(ptt) <- c('name','yr','pp','under15','60-69','70-79','80-89','90-99','older100')
ptt
Sau khi hoàn tất việc chuẩn bị dữ liệu, ta cần có những thao tác để phân tích dữ liệu như sau:
## [1] TRUE
Kết quả trả ra là TRUE, nghĩa là pad là một data frame
## [1] "name" "yr" "pp" "under15" "60-69" "70-79" "80-89"
## [8] "90-99" "older100"
Kết quả lần lượt là tên các biến trong data frame: “name”, “yr”, “pp”, “under15”, “60-69”, “70-79”, “80-89”, “90-99”, “older100”
## [1] 9
Kết quả hiển thị là 8, nghĩa là ptt có 8 biến (cột)
## [1] 360 9
Số quan sát là 216 và số biến là 8
Ta thực hiện câu lệnh sau
Name | ptt |
Number of rows | 360 |
Number of columns | 9 |
_______________________ | |
Column type frequency: | |
character | 1 |
numeric | 8 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
name | 0 | 1 | 6 | 9 | 0 | 5 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
yr | 0 | 1 | 1985.50 | 20.81 | 1950 | 1967.75 | 1985.5 | 2003.25 | 2021 | ▇▇▇▇▇ |
pp | 0 | 1 | 29602844.14 | 58264117.43 | 23142 | 228571.00 | 1158989.5 | 13359540.50 | 214326220 | ▇▁▁▁▁ |
under15 | 0 | 1 | 9641335.43 | 17694787.26 | 10082 | 101587.25 | 538578.5 | 4554062.00 | 53536730 | ▇▁▁▁▂ |
60-69 | 0 | 1 | 1426211.59 | 3290211.30 | 674 | 8867.75 | 37188.0 | 552995.00 | 17704992 | ▇▁▁▁▁ |
70-79 | 0 | 1 | 725740.79 | 1728191.57 | 218 | 3748.75 | 15828.0 | 310615.00 | 9285972 | ▇▁▁▁▁ |
80-89 | 0 | 1 | 216090.46 | 552927.08 | 20 | 773.50 | 3975.0 | 115419.75 | 3213211 | ▇▁▁▁▁ |
90-99 | 0 | 1 | 15871.76 | 41711.05 | 0 | 48.75 | 348.5 | 11431.50 | 276940 | ▇▁▁▁▁ |
older100 | 0 | 1 | 152.72 | 355.01 | 0 | 0.00 | 4.0 | 92.00 | 2190 | ▇▁▁▁▁ |
Trong đó:
n_missing: dữ liệu bị mất khi không được trả lời
complete_rate: tỉ lệ dữ liệu đầy đủ
min: số lượng ký tự ít nhất trong một ô (không bao gồm biến)
max: số lượng ký tự nhiều nhất trong ô (không bao gômg biến)
n_unique: các dữ liệu trùng lặp
whitespace: khoảng trắng
mean: trung bình
sd: độ lệch chuẩn
p0, p25, p50, p75, p100: phân vị 1
hist: biểu đồ Histogram
“ptt” bao gồm các cột tên quốc gia và dân số theo độ tuổi từ dưới 15 và từ 60 đến 69, 70 đến 79, 80 đến 89, 90 đến 99 và trên 100. Vì file “population-and-demography.csv” không có dữ liệu về dân số trong độ tuổi ngoài 60 nên ta cần phải tính chúng bằng cách cộng các cột dữ liệu về dân số ngoài 60 tuổi. Ta thực hiện thao tác sau
Vì file “population-and-demography.csv” không có dữ liệu về dân số trong độ tuổi từ 16 đến 59, ta cần thêm một cột này và tính chúng bằng cách lấy tổng dân số trừ đi dân số ở độ tuổi dưới 15 và ngoài 60.
Vì ta đã có dữ liệu dân số ở các độ tuổi dưới 15, 16 đến 59 và ngoài 60, ta có thể xóa đi những dữ liệu không cần thiết bằng hàm select.
Như ta đã biết, một nước được coi là có dân số “trẻ” nếu tỉ lệ người trong độ tuổi dưới 15 vượt quá 35% và số người ở độ tuổi trên 60 không quá 7% tổng số dân cả nước. Ngược lại, những nước có dân số “già” khi độ tuổi dưới 15 dao động trong khoảng 30 – 35%, độ tuổi trên 60 vượt quá 7% tổng số dân. (Nguồn: danso.org)
Vậy, để kết luận các đất nước mà ta chọn để phân tích có dân số trẻ hay già, ta có thể thực hiện thao tác sau:
ptt$age_struc <- ifelse(ptt$under15/ptt$pp<0.35 | ptt$older60/ptt$pp>0.07,'Già',ifelse(ptt$under15/ptt$pp>0.35 | ptt$older60/ptt$pp<0.07,'Trẻ','Bình thường'))
Để dễ dàng tính toán, ta chỉ cần lấy dữ liệu ở một mốc thời gian duy nhất. Chọn dữ liệu vào năm 2021 bằng thao tác sau
## [1] 235590278
Tổng dân số của 5 nước là 235590278, rơi vào khoảng 235,5 triệu dân trong năm 2021
## [1] 47118056
Trung bình, mỗi nước sẽ có dân số là 47118056, rơi vào khoảng 47,1 triệu dân trong năm 2021
## [1] 93754080
Tổng dân số trong mỗi nước sẽ có chênh lệnh 93754080 ~ khoảng 93,7 triệu dân so với bình quân dân số 5 nước
## 0% 25% 50% 75% 100%
## 56266 821632 2588424 17797736 214326220
Giá trị đầu tiên - giá trị nhỏ nhất (56266) mang ý nghĩa là giá trị dân số thấp nhất trong 5 nước.
Giá trị thứ hai - tứ phân vị thứ nhất (821632) mang ý nghĩa là có ít nhất 25% dân số các nước bé hơn hoặc bằng 821632 và 75% dân số các nước lớn hơn hoặc bằng 821632
Giá trị thứ ba - trung vị (2588424) mang ý nghĩa là có ít nhất 50% dân số bé hơn hoặc bằng 2588424 và 50% dân số lớn hơn hoặc bằng 2588424
Giá trị thứ tư - tứ phân vị thứ ba (17797736) mang ý nghĩa là có ít nhất 75% dân số các nước bé hơn hoặc bằng 17797736 và 25% dân số các nước lớn hơn hoặc bằng 17797736
Giá trị thứ năm - Giá trị lớn nhất (214326220) mang ý nghĩa là giá trị dân số cao nhất trong 5 nước
“pad” là data frame đang ở định dạng long table, nghĩa là giá trị ở cột đầu tiên bị lặp lại. Ta chuyển chúng thành wide table để có thể tiện quan sát hơn bằng câu lệnh sau:
# Trước tiên cần load gói tidyr
library(tidyr)
# Chuyển từ long table sang wide table bằng câu lệnh spread, trong đó các giá trị ở cột "name" sẽ trở thành biến mới và chúng mang giá trị của cột "pp"
ptt1 <- ptt %>% spread(key = name,value = pp)
# Ta được bảng như sau
ptt1
Sẽ giải thích ở phần tính toán các đặc trưng đo lường↩︎