Nhiệm vụ 3.1


Tổng quan và một số thông tin cơ bản về bộ dữ liệu

Bộ dữ liệu

Bộ dữ liệu population-and-demography thống kê tổng dân số và số dân ở một số độ tuổi nhất định của 254 quốc gia trong khoảng thời gian từ 1950 - 2021.

Một số thông tin cơ bản

Đầu tiên, ta tiến hành import dữ liệu từ file excel vào bằng câu lệnh read.xlsx nằm trong package xlsx, ở đây ta gắn dữ liệu với object khl . Ta có thể xem tên của các biến bằng lệnh names(khl)(kết quả được trình bày ở bên dưới)

library(xlsx)
khl <- read.xlsx("C:/Users/Dell/OneDrive/UFM/R/population-and-demography.xlsx", sheetIndex = 1, header = 1)
names(khl)
##  [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"

Để có thể xem một số thông tin cơ bản, ta dùng câu lệnh skim(khl) nằm trong package skimr. Sau khi thực hiện câu lệnh, ta được kết quả như sau:

  • Dataset có 18288 hàng tương đương với 18288 quan sát và 24 cột tương đương với 24 biến

  • Dataset có 1 biến định dạng dữ liệu ký tự (character) và 23 biến định dạng dữ liệu số (numeric).

  • Với biến định dạng ký tự (biến Country.name):

    • Không có dữ liệu bị miss

    • Chuỗi ký tự ngắn nhất trên 1 ô dữ liệu là 4

    • Chuỗi ký tự dài nhất trên 1 ô dữ liệu là 59

    • Có 254 giá trị duy nhất, có nghĩa là dataset này thống kê dữ liệu dựa trên 254 quốc gia riêng biệt

  • Với các biến dữ liệu số, ta có thể xem được các giá trị 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 là đại lượng để đo lường mức độ phân tán của dữ liệu

    • p0: giá trị nhỏ nhất

    • p25: Phân vị thứ nhất cho biết có 25% giá trị nằm dưới và 75% giá trị nằm trên p25

    • p50: Phân vị thứ hai cũng chính là trung vị, cho biết 50% giá trị nằm dưới và 50% giá trị nằm trên p50

    • p75: phân vị thứ ba cho biết có 75% giá trị nằm dưới và 25% giá trị nằm trên p75

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

    • hist: biểu đồ Histogram

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

Từ kết quả trên, ta có thể đánh giá 1 số đặc điểm về bộ dữ liệu này như sau:

  • Dataset có 18288 quan sát và 24 biến

  • Có 1 biến định tính, 1 biến thời gian và 22 biến định lượng

  • Có 23 biến định dạng số và 1 biến định dạng ký tự

  • Dataset lấy số liệu từ 254 quốc gia và trong khoảng từ 1950-2021 nên được thống kê thành một Panel Data(Dữ liệu bảng)

  • Không có dữ liệu bị miss

  • Có độ lệch chuẩn khá lớn, có nghĩa là bộ dữ liệu này có mức độ phân tán giá trị khá cao

  • Dân số từ 15 và 18 tuổi trở lên chiếm đa số

  • Từ 30 tuổi trở đi, dân số có xu hướng giảm dần theo độ tuổi

Chọn 5 quốc gia

Thực hiện rút trích

Để tiến hành rút trích dữ liệu, ta có nhiều cách để tiến hành, ở đây ta dùng lệnh filterselect của package tidyverse. Ta sẽ chọn 5 quốc gia lần lượt là Vietnam, Thailand, Malaysia, Cambodia, Singapore và các biến Country.name, Year, Population, 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à gán vào object khl1.

Sau đó ta có thể xem kết quả của việc rút trích bằng lệnh str(khl1) sẽ cho ra số hàng, số cột và định dạng loại dữ liệu.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
khl1 <- filter(khl,khl$Country.name %in% c('Vietnam','Thailand','Malaysia', 'Cambodia','Singapore')) %>% select(Country.name, Year, Population, 
           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)
str(khl1)
## 'data.frame':    360 obs. of  8 variables:
##  $ Country.name                   : chr  "Cambodia" "Cambodia" "Cambodia" "Cambodia" ...
##  $ Year                           : num  1950 1951 1952 1953 1954 ...
##  $ Population                     : num  4380384 4485394 4592881 4702070 4814380 ...
##  $ Population.aged.60.to.69.years : num  133728 137369 141236 145214 149203 ...
##  $ Population.aged.70.to.79.years : num  54119 54463 54783 55214 55962 ...
##  $ Population.aged.80.to.89.years : num  8876 9108 9395 9697 9987 ...
##  $ Population.aged.90.to.99.years : num  426 406 398 393 381 370 360 350 349 360 ...
##  $ Population.older.than.100.years: num  2 2 2 2 2 2 1 1 1 1 ...

Giải thích dữ liệu

Lúc này, để có thể xem tổng quan về dữ liệu đã rút, ta tiếp tục sử dụng lệnh skim(khl1) để có thể xem các đặc điểm nổi bật về dữ liệu.

library(skimr)
skim(khl1)
Data summary
Name khl1
Number of rows 360
Number of columns 8
_______________________
Column type frequency:
character 1
numeric 7
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country.name 0 1 7 9 0 5 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 1985.50 20.81 1950 1967.75 1985.5 2003.25 2021 ▇▇▇▇▇
Population 0 1 27921050.42 26454038.28 1006712 6049071.00 16302305.0 45102906.50 97468024 ▇▃▂▂▁
Population.aged.60.to.69.years 0 1 1424164.67 1752429.88 22975 226499.25 671358.0 2047020.25 8457481 ▇▂▁▁▁
Population.aged.70.to.79.years 0 1 721147.99 921019.97 8521 100140.75 297416.0 971559.75 4335041 ▇▂▁▁▁
Population.aged.80.to.89.years 0 1 246827.93 374608.65 1713 24352.25 84455.5 274761.00 1920116 ▇▁▁▁▁
Population.aged.90.to.99.years 0 1 35030.16 63436.84 151 1252.75 8189.0 37137.00 421693 ▇▁▁▁▁
Population.older.than.100.years 0 1 1645.47 4045.90 0 8.00 104.5 889.25 28840 ▇▁▁▁▁

Từ kết quả của câu lệnh, ta đọc được một số đặc điểm nổi bật như sau:

  • Bộ dữ liệu không có dữ liệu bị miss

  • Bộ dữ liệu được rút trích còn lại 360 hàng và 8 cột

  • Trong đó có 1 cột là dữ liệu ký tự và 7 cột là dữ liệu số

  • Về biến Country.name, ta thấy:

    • Chuỗi ký tự ngắn nhất là 7 và dài nhất là 9

    • Có 5 giá trị riêng biệt(đúng vì ta đã rút ra 5 quốc gia)

  • Độ lệch chuẩn của các biến tương đối lớn, điều này có nghĩa là mức độ phân tán dữ liệu khá cao

  • Giá trị nhỏ nhất của biến Population.older.than.100.years bằng 0, có nghĩa là tồn tại một hay nhiều quốc gia không có người lớn hơn 100 tuổi.

  • Dân số và độ tuổi hầu như có tỷ lệ nghịch với nhau, tuổi càng cao thì số dân càng ít.

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

Mã hóa dữ liệu

Ta tiến hành mã hóa dữ liệu thông qua việc so sánh dân số ở độ tuổi từ 70-79 so với 80-89, cụ thể như sau: nếu giá trị ở biến dân số tuổi 70-79 lớn hơn 80-89 thì ô dữ liệu tương ứng sẽ hiện “Lớn hơn”, theo đó ta có 2 trường hợp còn lại là “bằng nhau” và “nhỏ hơn”. Sau đó, ta có thể xem sơ qua kết quả bằng câu lệnh str

library(tidyverse)
khl1 <- khl1 %>% mutate(sosanh=case_when(khl1$Population.aged.70.to.79.years>khl1$Population.aged.80.to.89.years~"Lớn hơn",khl1$Population.aged.70.to.79.years<khl1$Population.aged.80.to.89.years~"Nhỏ hơn",khl1$Population.aged.70.to.79.years==khl1$Population.aged.80.to.89.years~"Bằng nhau"))
str(khl1)
## 'data.frame':    360 obs. of  9 variables:
##  $ Country.name                   : chr  "Cambodia" "Cambodia" "Cambodia" "Cambodia" ...
##  $ Year                           : num  1950 1951 1952 1953 1954 ...
##  $ Population                     : num  4380384 4485394 4592881 4702070 4814380 ...
##  $ Population.aged.60.to.69.years : num  133728 137369 141236 145214 149203 ...
##  $ Population.aged.70.to.79.years : num  54119 54463 54783 55214 55962 ...
##  $ Population.aged.80.to.89.years : num  8876 9108 9395 9697 9987 ...
##  $ Population.aged.90.to.99.years : num  426 406 398 393 381 370 360 350 349 360 ...
##  $ Population.older.than.100.years: num  2 2 2 2 2 2 1 1 1 1 ...
##  $ sosanh                         : chr  "Lớn hơn" "Lớn hơn" "Lớn hơn" "Lớn hơn" ...

Lập bảng tần số

Ta sẽ tiến hành tính toán tần số của kết quả so sánh bên trên bằng câu lệnh table(khl1$sosanh) hay kết hợp chức năng group_by với câu lệnh tính số lượng summaries(n())

Ở đây, tôi sẽ tiến hành 2 cách để so sánh kết quả

table(khl1$sosanh) 
## 
## Lớn hơn 
##     360
library(tidyverse)
group_by(khl1,sosanh) %>% summarise(n())
## # A tibble: 1 × 2
##   sosanh  `n()`
##   <chr>   <int>
## 1 Lớn hơn   360

Chúng ta có thể thấy cả 2 câu lệnh đều cho ra kết quả như nhau đó là có 360 dữ liệu là “Lớn hơn” với tỷ lệ là 100%, điều này có nghĩa dân số ở độ tuổi 70-79 ở bất kỳ quốc gia và bất kỳ thời gian nào đều lớn hơn dân số 80-89. Điều này càng khẳng định hơn việc dân số tỷ lệ nghịch với độ tuổi.

Tính toán các đặc trưng đo lường

Ta thực hiện tính các đặc trưng của tổng dân số cho tất cả 5 quốc gia, cho từng quốc gia và tính theo khoảng thời gian.

Tất cả 5 quốc gia

Để tính toán 1 cách tóm tắt các đặc trưng đo lường ta có thể dùng câu lệnh summary, câu lệnh dùng để tính toán các đặc trưng dễ dàng nhất. Ta sẽ chỉ tính toán các biến định lượng, bởi vì đặc trưng đo lường của biến định tính không có ý nghĩa. Biến định lượng trong dữ liệu này gồm các biến dân số và dân số cho khoảng tuổi.

summary(khl1)
##  Country.name            Year        Population      
##  Length:360         Min.   :1950   Min.   : 1006712  
##  Class :character   1st Qu.:1968   1st Qu.: 6049071  
##  Mode  :character   Median :1986   Median :16302305  
##                     Mean   :1986   Mean   :27921050  
##                     3rd Qu.:2003   3rd Qu.:45102906  
##                     Max.   :2021   Max.   :97468024  
##  Population.aged.60.to.69.years Population.aged.70.to.79.years
##  Min.   :  22975                Min.   :   8521               
##  1st Qu.: 226499                1st Qu.: 100141               
##  Median : 671358                Median : 297416               
##  Mean   :1424165                Mean   : 721148               
##  3rd Qu.:2047020                3rd Qu.: 971560               
##  Max.   :8457481                Max.   :4335041               
##  Population.aged.80.to.89.years Population.aged.90.to.99.years
##  Min.   :   1713                Min.   :   151                
##  1st Qu.:  24352                1st Qu.:  1253                
##  Median :  84456                Median :  8189                
##  Mean   : 246828                Mean   : 35030                
##  3rd Qu.: 274761                3rd Qu.: 37137                
##  Max.   :1920116                Max.   :421693                
##  Population.older.than.100.years    sosanh         
##  Min.   :    0.0                 Length:360        
##  1st Qu.:    8.0                 Class :character  
##  Median :  104.5                 Mode  :character  
##  Mean   : 1645.5                                   
##  3rd Qu.:  889.2                                   
##  Max.   :28840.0

Ở bản tóm tắt này, ta có thể đọc được các giá trị như sau:

  • Min: Giá trị nhỏ nhất

  • 1st: Phân vị thứ nhất

  • Median: Phân vị thứ hai hay là trung vị

  • Mean: Giá trị trung bình

  • 3rd: Phân vị thứ 3

  • Max: Giá trị lớn nhất

Theo quốc gia riêng biệt

Ở đây, tôi sẽ tiến hành tính toán giá trị trung bình và độ lệch chuẩn của tổng dân số các quốc gia riêng biệt bằng cách thực hiện câu lệnh group_by và kết hợp với lệnh summaries để tính toán các thống kê mỗi nhóm và sẽ gán vào object khl2

library(tidyverse)
khl2 <- khl1 %>% group_by(Country.name) %>% summarise(mean_of_country=mean(Population),sd_of_country=sd(Population))
khl2
## # A tibble: 5 × 3
##   Country.name mean_of_country sd_of_country
##   <chr>                  <dbl>         <dbl>
## 1 Cambodia            9323148.      3881020.
## 2 Malaysia           17388128.      8720294.
## 3 Singapore           3141772.      1496864.
## 4 Thailand           48988953.     16956963.
## 5 Vietnam            60763252.     22973741.

Lúc này, ta có thể dễ dàng so sánh dân số ở các nước, ta thấy dân số cao nhất là quốc gia Vietnam và thấp nhất nằm ở Singapore và dân số ở các quốc gia chênh lệch nhau một khoảng khá lớn. Về độ lệch chuẩn, ta thấy ở quốc gia nào độ lệch chuẩn cũng khá cao, có nghĩa là mức độ phân tán dữ liệu khá lớn, điều này có thể hiểu là dữ liệu khi dùng để tính toán các thống kê thì không đáng tin cậy lắm.

Theo khoảng thời gian

Ở đây, tôi sẽ tiến hành tính giá trị trung bình và trung vị trong khoảng thời gian từ 2000 - 2021 của các quốc gia riêng biệt.

Trước tiên, tôi sẽ thực hiện rút trích dữ liệu để có thể nhận dữ liệu trong khoảng từ năm 2000 - 2021 bằng lệnh filter và sau đó sẽ thực hiện lệnh group_by kết hợp summarise để tính đặc trưng của từng quốc gia.

library(tidyverse)
khl3 <- khl1 %>% filter(khl1$Year>=2000&khl1$Year<=2021)%>%
  group_by(Country.name) %>% summarise(meanofyear=mean(Population),medianofyear=median(Population))
khl3
## # A tibble: 5 × 3
##   Country.name meanofyear medianofyear
##   <chr>             <dbl>        <dbl>
## 1 Cambodia      14426727.     14468714
## 2 Malaysia      28680065.     28950934
## 3 Singapore      5078409.      5222468
## 4 Thailand      68096756.     68491670
## 5 Vietnam       88086727.     87880058

Ở khoảng thời gian từ năm 2020-2021 ta thấy Vietnam vẫn là quốc gia dẫn đầu trong tổng số dân và trung vị ở đây cũng khá xấp xỉ giá trị trung bình

Nhiệm vụ 3.2

Bộ dữ liệu

Dữ liệu được tổng hợp Worldbank bao gồm các biến như sau:

  • Country: Tên quốc gia

  • Year: Năm

  • GDP (current US$): GDP theo giá của người mua tính bằng USD

  • Population, total: Tổng dân số

  • Foreign direct investment, net inflows (BoP, current US$): Đầu tư trực tiếp nước ngoài tính bằng USD

  • Agriculture, forestry, and fishing, value added (current US$): Nông, Lâm, Ngư nghiệp và giá trị gia tăng là sản lượng ròng của một ngành sau khi cộng tất cả các đầu ra và trừ đi các đầu vào trung gian.

  • Inflation, consumer prices (annual %): Lạm phát

Ta tiến hành import dữ liệu bằng câu lệnh read.xlsx trong package xlsx

library(xlsx)
hoa <- read.xlsx('C:/Users/Dell/OneDrive/UFM/R/P_Data_Extract_From_World_Development_Indicators.xlsx', sheetIndex = 1, header = T)

Xem một số thông tin cơ bản

Ta thực hiện lệnh skim trong package skimr để có thể xem thông tin tổng quan của bộ dữ liệu

library(skimr)
skim(hoa)
Data summary
Name hoa
Number of rows 228
Number of columns 7
_______________________
Column type frequency:
character 1
numeric 6
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country.Name 0 1 5 13 0 6 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1.00 2.003500e+03 1.099000e+01 1.985000e+03 1.994000e+03 2.003500e+03 2.013000e+03 2.022000e+03 ▇▇▇▇▇
GDP..current.US.. 0 1.00 3.760581e+12 5.524029e+12 6.293305e+09 1.275232e+11 4.563230e+11 5.062015e+12 2.543970e+13 ▇▁▁▁▁
Population..total 0 1.00 3.061574e+08 4.444090e+08 2.733373e+06 6.350407e+07 1.095119e+08 2.907823e+08 1.412360e+09 ▇▁▁▁▂
Foreign.direct.investment..net.inflows..BoP..current.US.. 0 1.00 6.318495e+10 1.037903e+11 -4.947474e+09 2.505750e+09 1.241324e+10 6.605156e+10 5.114340e+11 ▇▁▁▁▁
Agriculture..forestry..and.fishing..value.added..current.US.. 24 0.89 1.192126e+11 2.356938e+11 5.969522e+07 7.521169e+09 4.132959e+10 1.128935e+11 1.311311e+12 ▇▁▁▁▁
Inflation..consumer.prices..annual… 13 0.94 2.930000e+00 3.800000e+00 -1.710000e+00 6.600000e-01 2.190000e+00 3.610000e+00 2.426000e+01 ▇▂▁▁▁

Từ kết quả trên, ta có thể đọc được một số thông tin như sau:

  • Dữ liệu gồm 228 hàng ứng với 228 quan sát và 7 cột ứng với 7 biến trong đó có 1 biến định dạng ký tự và 6 biến định dạng số.

  • Về biến Country.Name, ta có thể thấy dữ liệu biến tồn tại 6 giá trị riêng biệt không giống nhau, nghĩa là bộ dữ liệu này thu thập số liệu từ 6 quốc gia khác nhau.

  • Về các biến định dạng số, ta có:

    • Ở biến Agriculture..forestry..and.fishing..value.added..current.US.. chứa 24 giá trị trống với tỷ lệ là 0,11

    • Ở biến Inflation..consumer.prices..annual… chứa 13 giá trị trống chiếm tỷ lệ 0,06

    • Và một số đặc trưng thống kê khác của từng biến ta có thể xem ở kết quả bên trên.

Kiểm tra chi tiết dữ liệu

Ta sẽ tiến hành xem dữ liệu được lấy từ những quốc gia nào bằng câu lệnh table.

table(hoa$Country.Name)
## 
##         China         Japan     Singapore      Thailand United States 
##            38            38            38            38            38 
##      Viet Nam 
##            38

và kiểm tra khoảng thời gian cụ thể nào bằng cách tính giá trị min, max

c(min(hoa$Year),max(hoa$Year))
## [1] 1985 2022

Từ kết quả trên, ta có thể thấy dữ liệu được thu thập từ 6 quốc gia là China, Japan, Singapore, Thailand, United States, Viet Nam với mỗi quốc gia gồm 38 quan sát và trong khoảng thời gian từ 1950-2022

Xử lí dữ liệu trống

Để có thể tránh sự ảnh hưởng của dữ liệu trống đến quá trình tính toán đặc trưng đo lường, ta sẽ tiến hành gán giá trị của dữ liệu trống bằng với giá trị trung bình của chính biến và loại đi những giá trị trống đó.

Trước tiên, ta sẽ tiến hành đổi tên biến để thuận tiện cho quá trình làm việc

Và ta sẽ kiểm tra kết quả bằng câu lệnh sum(is.na())

names(hoa) <- c('country','year','gdp','popu','fdi','agri','infla')

hoa$agri[is.na(hoa$agri)] <- mean(hoa$agri,na.rm = T)

hoa$infla[is.na(hoa$infla)] <- mean(hoa$infla,na.rm = T)

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

Mã hóa và lập bảng tần số

Rút trích dữ liệu

Tôi dự định sẽ làm việc với GDP nên sẽ rút GDP của các nước ra bằng câu lệnh select của package tidyverse và gán vào object , sau đó sẽ chuyển dạng bảng từ long table sang wide table bằng câu lệnh spread.

library(tidyverse)
gdpofcountry <- select(hoa,country,year,gdp)

wide_gdp <- spread(gdpofcountry,key=country,value=gdp)

Mã hóa dữ liệu

Ta sẽ tiến hành mã hóa dữ liệu bằng cách so sánh GDP của Việt NamThái Lan bằng câu lệnh ifelse. Biến so sánh là ‘Lớn hơn’ nếu GDP VN lớn hơn Thái Lan và tương tự các trường hợp còn lại. Sau khi thực hiện, ta có thể kiểm tra bằng câu lệnh str để xem cấu trúc bảng sau khi được mã hóa.

wide_gdp$sosanh <- ifelse(wide_gdp$`Viet Nam`>wide_gdp$Thailand,'Lớn hơn',ifelse(wide_gdp$`Viet Nam`< wide_gdp$Thailand,'Nhỏ hơn','Bằng nhau'))
str(wide_gdp)
## 'data.frame':    38 obs. of  8 variables:
##  $ year         : num  1985 1986 1987 1988 1989 ...
##  $ China        : num  3.10e+11 3.01e+11 3.27e+11 4.08e+11 4.56e+11 ...
##  $ Japan        : num  1.43e+12 2.12e+12 2.58e+12 3.13e+12 3.11e+12 ...
##  $ Singapore    : num  1.92e+10 1.86e+10 2.09e+10 2.54e+10 3.05e+10 ...
##  $ Thailand     : num  3.89e+10 4.31e+10 5.05e+10 6.17e+10 7.23e+10 ...
##  $ United States: num  4.34e+12 4.58e+12 4.86e+12 5.24e+12 5.64e+12 ...
##  $ Viet Nam     : num  1.41e+10 2.63e+10 3.67e+10 2.54e+10 6.29e+09 ...
##  $ sosanh       : chr  "Nhỏ hơn" "Nhỏ hơn" "Nhỏ hơn" "Nhỏ hơn" ...

Lập bảng tần số

Ta sẽ lập bảng tần số của biến so sánh để xem xét liệu có bao nhiêu năm thì GDP của VN lớn hơn Thái Lan.

table(wide_gdp$sosanh)
## 
## Nhỏ hơn 
##      38

Ta thấy giá trị nhỏ hơn xuất hiện 38 lần và không có giá trị nào khác, có nghĩa là trong 38 quan sát thì GDP VN đều thấp hơn GDP của Thái Lan.

Phân tích dữ liệu

Mục tiêu

  1. Tính toán được các đặc trưng đo lường của các quốc gia

  2. So sánh được các biến dữ liệu giữa các quốc gia với nhau

Đặc trưng đo lường

Cho cả 6 quốc gia

Ta tiếp tục sử dụng câu lệnh summary như bài 3.1 để tính toán đặc trưng trên tổng các quốc gia

summary(hoa)
##    country               year           gdp                 popu          
##  Length:228         Min.   :1985   Min.   :6.293e+09   Min.   :2.733e+06  
##  Class :character   1st Qu.:1994   1st Qu.:1.275e+11   1st Qu.:6.350e+07  
##  Mode  :character   Median :2004   Median :4.563e+11   Median :1.095e+08  
##                     Mean   :2004   Mean   :3.761e+12   Mean   :3.062e+08  
##                     3rd Qu.:2013   3rd Qu.:5.062e+12   3rd Qu.:2.908e+08  
##                     Max.   :2022   Max.   :2.544e+13   Max.   :1.412e+09  
##       fdi                  agri               infla        
##  Min.   :-4.947e+09   Min.   :5.970e+07   Min.   :-1.7103  
##  1st Qu.: 2.506e+09   1st Qu.:9.959e+09   1st Qu.: 0.6968  
##  Median : 1.241e+10   Median :4.792e+10   Median : 2.3213  
##  Mean   : 6.318e+10   Mean   :1.192e+11   Mean   : 2.9311  
##  3rd Qu.: 6.605e+10   3rd Qu.:1.192e+11   3rd Qu.: 3.5251  
##  Max.   : 5.114e+11   Max.   :1.311e+12   Max.   :24.2570

Như đã giải thích ở bài 3.1, ta có thể đọc được các đặc trưng đo lường của các biến trên tổng quốc gia

Cho từng quốc gia riêng biệt

Ta tiếp tục sử dụng các câu lệnh như bài 3.1, ở đây ta sẽ tính đặc trưng là giá trị trung bình và độ lệch chuẩn của biến gdp

library(tidyverse)
hoa1 <- hoa %>% group_by(country) %>% summarise(mean_of_country_gdp=mean(gdp),sd_of_country_gdp=sd(gdp))
hoa1
## # A tibble: 6 × 3
##   country       mean_of_country_gdp sd_of_country_gdp
##   <chr>                       <dbl>             <dbl>
## 1 China                     5.01e12           5.60e12
## 2 Japan                     4.50e12           1.02e12
## 3 Singapore                 1.73e11           1.33e11
## 4 Thailand                  2.45e11           1.60e11
## 5 United States             1.25e13           5.85e12
## 6 Viet Nam                  1.16e11           1.23e11

Ta dễ dàng thấy được China là quốc gia dẫn đầu trong GDP và Vietnam là quốc gia có GDP thấp nhất.

Theo khoảng thời gian

Ta tiến hành tính toán đặc trưng trung bình và trung vị của FDI ở các nước riêng biệt trong khoảng thời gian từ 2000-2022

library(tidyverse)
hoa2 <- hoa %>% filter(hoa$year>=2000&hoa$year<=2022)%>%
  group_by(country) %>% summarise(meanofyear=mean(fdi),medianofyear=median(fdi))
hoa2
## # A tibble: 6 × 3
##   country          meanofyear  medianofyear
##   <chr>                 <dbl>         <dbl>
## 1 China         176629654331. 174749584584.
## 2 Japan          18156049363.  11557373874.
## 3 Singapore      56408814913.  55310807548.
## 4 Thailand        7586629857.   8215637195.
## 5 United States 282076347826. 264039000000 
## 6 Viet Nam        8550826087.   8368000000

Ở biến FDI thì giá trị trung bình của USA là dẫn đầu, các nước theo sau lần lượt là China,Singapore,Japan,Vietnam và Thailand.

Đánh giá tốc độ phát triển GDP của Việt Nam

Trước tiên, ta tiến hành rút trích các dữ liệu về GDP của Việt Nam trong khoảng thời gian từ 2000 - 2022 và gán vào object vn

Sau đó, ta xem thử khoảng thời gian là gồm bao nhiêu năm để thuận tiện cho vẽ biểu đồ.

library(tidyverse)
vn <- filter(hoa,hoa$country=='Viet Nam' & hoa$year >= 2000) %>% select(year,gdp)
length(vn$year)
## [1] 23

Ta tiến hành vẽ biểu đồ bằng câu lệnh ggplot nằm trong package ggplot2 và sử dụng gói package scales để thêm định dạng cho biểu đồ

library(ggplot2)
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
hihi <- vector()
for(i in 1:(23-1)) {
  hihi[i]= (vn$gdp[i+1]/vn$gdp[i]-1)}
hehe <- data.frame(hihi)
hehe$year <- vn$year[2:23]
hehe %>% ggplot(aes(x = factor(year), y = percent(hihi))) +
  geom_col(fill ='red') +
  xlab('Năm') +
  ylab('Tốc độ phát triển liên hoàn') +
  labs(title = 'Hình 3.1: Tốc độ phát triển liên hoàn GDP của Việt Nam từ 2000-2022')

Từ biểu đồ trên, ta nhận xét được tốc độ phát triển GDP của Việt Nam như sau:

  • Tốc độ phát triển cao nhất nằm ở năm 2017 và thấp nhất là 2018

  • Tốc độ phát triển không đều nhau, nhưng vẫn tăng từng năm và không có hiện tượng giảm GDP