1 NHIỆM VỤ 3.1

1.1 Đọc dữ liệu từ file csv

Gán file dữ liệu vào biến d và đọc nó. Vì dữ liệu khá dài nên sử dụng câu lệnh summary để tạo bảng tóm tắt thống kê cho mật độ dân số ở các nhóm tuổi trên các nước.

Bảng tóm tắt này bao gồm các thông tin sau: giá trị nhỏ nhất; giá trị lớn nhất; giá trị trung bình; độ lệch chuẩn và phương sai.

d <- read.csv(file.choose(), header = T)
summary(d)
##  Country.name            Year        Population       
##  Length:18288       Min.   :1950   Min.   :1.363e+03  
##  Class :character   1st Qu.:1968   1st Qu.:2.916e+05  
##  Mode  :character   Median :1986   Median :3.834e+06  
##                     Mean   :1986   Mean   :1.265e+08  
##                     3rd Qu.:2003   3rd Qu.:1.679e+07  
##                     Max.   :2021   Max.   :7.909e+09  
##  Population.of.children.under.the.age.of.1
##  Min.   :       25                        
##  1st Qu.:     6664                        
##  Median :    88352                        
##  Mean   :  3133497                        
##  3rd Qu.:   463000                        
##  Max.   :139783730                        
##  Population.of.children.under.the.age.of.5
##  Min.   :      136                        
##  1st Qu.:    31995                        
##  Median :   423784                        
##  Mean   : 14825710                        
##  3rd Qu.:  2160046                        
##  Max.   :690360700                        
##  Population.of.children.under.the.age.of.15 Population.under.the.age.of.25
##  Min.   :4.160e+02                          Min.   :6.230e+02             
##  1st Qu.:8.954e+04                          1st Qu.:1.395e+05             
##  Median :1.186e+06                          Median :1.843e+06             
##  Mean   :4.110e+07                          Mean   :6.376e+07             
##  3rd Qu.:5.906e+06                          3rd Qu.:9.025e+06             
##  Max.   :2.015e+09                          Max.   :3.239e+09             
##  Population.aged.15.to.64.years Population.older.than.15.years
##  Min.   :7.480e+02              Min.   :8.490e+02             
##  1st Qu.:1.703e+05              1st Qu.:1.867e+05             
##  Median :2.247e+06              Median :2.482e+06             
##  Mean   :7.743e+07              Mean   :8.537e+07             
##  3rd Qu.:9.641e+06              3rd Qu.:1.035e+07             
##  Max.   :5.133e+09              Max.   :5.894e+09             
##  Population.older.than.18.years Population.at.age.1
##  Min.   :7.520e+02              Min.   :       26  
##  1st Qu.:1.664e+05              1st Qu.:     6474  
##  Median :2.238e+06              Median :    85824  
##  Mean   :7.820e+07              Mean   :  3011213  
##  3rd Qu.:9.240e+06              3rd Qu.:   440788  
##  Max.   :5.516e+09              Max.   :138478740  
##  Population.aged.1.to.4.years Population.aged.5.to.9.years
##  Min.   :      101            Min.   :      138           
##  1st Qu.:    25269            1st Qu.:    29406           
##  Median :   334454            Median :   392220           
##  Mean   : 11692213            Mean   : 13598575           
##  3rd Qu.:  1697851            3rd Qu.:  1947261           
##  Max.   :550970400            Max.   :683611800           
##  Population.aged.10.to.14.years Population.aged.15.to.19.years
##  Min.   :       73              Min.   :      110             
##  1st Qu.:    27880              1st Qu.:    26296             
##  Median :   363896              Median :   336970             
##  Mean   : 12670942              Mean   : 11782259             
##  3rd Qu.:  1796754              3rd Qu.:  1626211             
##  Max.   :659934300              Max.   :623576060             
##  Population.aged.20.to.29.years Population.aged.30.to.39.years
##  Min.   :1.580e+02              Min.   :1.370e+02             
##  1st Qu.:4.505e+04              1st Qu.:3.661e+04             
##  Median :6.097e+05              Median :4.863e+05             
##  Mean   :2.087e+07              Mean   :1.716e+07             
##  3rd Qu.:2.759e+06              3rd Qu.:2.113e+06             
##  Max.   :1.210e+09              Max.   :1.165e+09             
##  Population.aged.40.to.49.years Population.aged.50.to.59.years
##  Min.   :      119              Min.   :       95             
##  1st Qu.:    27440              1st Qu.:    19650             
##  Median :   364712              Median :   264782             
##  Mean   : 13622139              Mean   : 10177069             
##  3rd Qu.:  1556334              3rd Qu.:  1203386             
##  Max.   :976407200              Max.   :851356900             
##  Population.aged.60.to.69.years Population.aged.70.to.79.years
##  Min.   :       64              Min.   :       31             
##  1st Qu.:    12603              1st Qu.:     6221             
##  Median :   168418              Median :    81824             
##  Mean   :  6801757              Mean   :  3618710             
##  3rd Qu.:   845243              3rd Qu.:   436710             
##  Max.   :598067140              Max.   :330491170             
##  Population.aged.80.to.89.years Population.aged.90.to.99.years
##  Min.   :        6              Min.   :       0              
##  1st Qu.:     1819              1st Qu.:     155              
##  Median :    20270              Median :    1468              
##  Mean   :  1195799              Mean   :  142784              
##  3rd Qu.:   133380              3rd Qu.:   12499              
##  Max.   :131835590              Max.   :22223974              
##  Population.older.than.100.years
##  Min.   :     0                 
##  1st Qu.:     0                 
##  Median :    13                 
##  Mean   :  3108                 
##  3rd Qu.:   163                 
##  Max.   :593166

1.2 Mô tả chi tiết bộ dữ liệu

Là một tập dữ liệu mở rộng về dân số và nhân khẩu học được cung cấp bởi Ủy ban Dân số Liên Hợp Quốc (UNPD). Bộ dữ liệu này cung cấp thông tin về dân số của các quốc gia, vùng lãnh thổ và khu vực trên thế giới.

Bộ dữ liệu bao gồm 18288 quan sát và 24 biến. Được sử dụng để nghiên cứu về mật độ dân số của các nhóm tuổi trên các nước.

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 ▇▁▁▁▁

Độ tuổi dao động từ:

  • Dưới 1 tuổi
  • Dưới 5 tuổi
  • Dưới 15 tuổi
  • Dưới 25 tuổi
  • Từ 15 tuổi đến 64 tuổi
  • Trên 15 tuổi
  • Trên 18 tuổi
  • 1 tuổi
  • Từ 1 tuổi đến 4 tuổi
  • Từ 5 tuổi đến 9 tuổi
  • Từ 10 tuổi đến 14 tuổi
  • Từ 15 tuổi đến 19 tuổi
  • Từ 20 tuổi đến 29 tuổi
  • Từ 30 tuổi đến 39 tuổi
  • Từ 40 tuổi đến 49 tuổi
  • Từ 50 tuổi đến 59 tuổi
  • Từ 60 tuổi đến 69 tuổi
  • Từ 70 tuổi đến 79 tuổi
  • Từ 80 tuổi đến 89 tuổi
  • Từ 90 tuổi đến 99 tuổi
  • Trên 100 tuổi

1.3 Phân tích dữ liệu theo 5 quốc gia, 5 độ tuổi và tổng dân số

Trước tiên sẽ đổi tên cho: tên đất nước, năm, dân số và các biến độ tuổi để thuận tiện cho việc thao tác trên dữ liệu.

Sau khi chạy câu lệnh, các biến sẽ được đổi tên như sau:

  • Country.name: C
  • 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: P015
  • Population older than 18 years: Po18
  • Population at age 1: P1
  • Population aged 1 to 4 years: P1to4
  • Population aged 5 to 9 years: P5to9
  • Population aged 10 to 14 years: P10to14
  • Population aged 15 to 19 years: P15to19
  • Population aged 20 to 29 years: P20to29
  • 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= Po100
names(d) = c('C','Y','P','Pu1','Pu5','Pu15','Pu25','P15t64','Po15','Po18','P1','P1t4','P5t9','P10t14','P15t19','P20t29','P30t39','P40t49','P50t59','P60t69','P70t79','P80t89','P90t99','Po100')
names(d)
##  [1] "C"      "Y"      "P"      "Pu1"    "Pu5"    "Pu15"   "Pu25"   "P15t64"
##  [9] "Po15"   "Po18"   "P1"     "P1t4"   "P5t9"   "P10t14" "P15t19" "P20t29"
## [17] "P30t39" "P40t49" "P50t59" "P60t69" "P70t79" "P80t89" "P90t99" "Po100"

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

Việc rút trích dữ liệu giúp dễ dàng tìm thấy thông tin cần lấy trong tập dữ liệu lớn. Bằng cách sử dụng các hàm lọc, có thể lọc dữ liệu dựa trên các tiêu chí nhất định.

Sử dụng câu lệnh select để chọn ra 5 biến độ tuổi từ 1 đến 4 tuổi; 5 đến 9 tuổi; 10 đến 14 tuổi; 15 đến 19 tuổi; 20 đến 29 tuổi. Sau khi chạy câu lệnh sẽ có kết quả là 18288 dòng và 24 cột.

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,C,Y,P,P1t4,P5t9,P10t14,P15t19,P20t29) %>% filter(str_detect(C, "^C"))
str(d1)
## 'data.frame':    1440 obs. of  8 variables:
##  $ C     : chr  "Cambodia" "Cambodia" "Cambodia" "Cambodia" ...
##  $ Y     : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ P     : num  4380384 4485394 4592881 4702070 4814380 ...
##  $ P1t4  : num  573898 599086 625225 650460 671159 ...
##  $ P5t9  : int  590809 602167 614160 628642 649808 676005 703315 732083 760766 785547 ...
##  $ P10t14: int  518138 527312 536028 544716 554024 564248 575270 586910 600917 621261 ...
##  $ P15t19: int  452855 462426 472275 482065 491565 500769 509534 517881 526034 534909 ...
##  $ P20t29: int  727143 743027 758952 774413 789733 805321 821178 837442 853172 869010 ...

1.5 Mã hóa dữ liệu

Sử dụng hàm ifelse() để gán các giá trị mới cho các cột trong tập dữ liệu d1. Với câu lệnh 1 sẽ: * Kiểm tra xem giá trị của cột P bằng “5000000” hay không. * Nếu có, thì gán giá trị “Đông” cho cột P.Coded. * Nếu không, thì gán giá trị “Thưa thớt” cho cột P.Coded

Với câu lệnh 2 sẽ: * Kiểm tra xem giá trị của cột P20t29 lớn hơn hoặc bằng 1250000 hay không. * Nếu có, thì gán giá trị “Nhiều” cho cột P20t29.Coded. * Nếu không, thì gán giá trị “Ít” cho cột P20t29.Coded.

library(DT)
d1$P.Coded <- ifelse(d1$P == 5000000,'Đông','Thưa thớt')
d1$P20t29.Coded <- ifelse(d1$P20t29 >= 1250000,'Nhiều', 'Ít')
datatable(d1)

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

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

Bảng tần số d2 cho biết rằng tất cả 254 quốc gia/vùng lãnh thổ trong cột “C” của tập dữ liệu d1 đều xuất hiện với tần số bằng nhau, cụ thể là 72 lần. Điều này có thể gợi ý rằng dữ liệu trong cột “C” có thể được tạo ra một cách ngẫu nhiên hoặc có sự phân phối đều giữa các quốc gia/vùng lãnh thổ.

d2 <- table(d1$C)
str(d2)
##  'table' int [1:20(1d)] 72 72 72 72 72 72 72 72 72 72 ...
##  - attr(*, "dimnames")=List of 1
##   ..$ : chr [1:20] "Cambodia" "Cameroon" "Canada" "Cape Verde" ...

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

Bảng chéo d3 cho biết rằng giá trị “Thưa thớt” trong cột “P.Coded” xuất hiện 72 lần với mỗi quốc gia/vùng lãnh thổ trong cột “C”. Điều này có nghĩa là không có sự khác biệt về tần suất xuất hiện của giá trị “Thưa thớt” giữa các quốc gia/vùng lãnh thổ.

d3 <- table(d1$P,d1$C)
str(d3)
##  'table' int [1:1440, 1:20] 0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:1440] "6937" "7128" "7472" "7709" ...
##   ..$ : chr [1:20] "Cambodia" "Cameroon" "Canada" "Cape Verde" ...

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

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

Câu lệnh dưới cung cấp tóm tắt các đặc điểm thống kê quan trọng của biến P trong tập dữ liệu d1. Dòng kết quả hiển thị các giá trị tương ứng với các thống kê sau: * Min. (Minimum): Giá trị nhỏ nhất trong cột P. Trong trường hợp này, giá trị nhỏ nhất là 1363. * 1st Qu. (First Quartile): Trung vị của nửa dưới dữ liệu. Ở đây, 25% các giá trị trong cột P nhỏ hơn 291605. * Median: Trung vị của toàn bộ dữ liệu. Giữa 50% các giá trị nằm dưới và 50% các giá trị nằm trên 3834060. * Mean: Giá trị trung bình. Trung bình, mỗi giá trị trong cột P có trị là 1265000000. * 3rd Qu. (Third Quartile): Trung vị của nửa trên dữ liệu. 75% các giá trị trong cột P nhỏ hơn 167907000. * Max. (Maximum): Giá trị lớn nhất trong cột P. Trong trường hợp này, giá trị lớn nhất là 7909000000.

summary(d1$P)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 6.937e+03 6.158e+05 4.611e+06 5.895e+07 1.143e+07 1.426e+09

1.7.2 Tính toán các đặc trưng đo lường theo năm

Dòng kết quả hiển thị các giá trị tương ứng với các thống kê sau: * Min.: 1950 - Đây là giá trị nhỏ nhất trong cột Y. * 1st Qu.: 1968 - Đây là trung vị của nửa dưới dữ liệu. Nói cách khác, 25% các giá trị trong cột Y nhỏ hơn 1968. * Median: 1986 - Đây là trung vị của toàn bộ dữ liệu. Trên 50% và dưới 50% các giá trị nằm dưới 1986. * Mean: 1986 - Đây là giá trị trung bình. Tổng giá trị của tất cả các phần tử trong cột Y được chia cho số lượng phần tử để tính giá trị trung bình. * 3rd Qu.: 2003 - Đây là trung vị của nửa trên dữ liệu. 75% các giá trị trong cột Y nhỏ hơn 2003. * Max.: 2021 - Đây là giá trị lớn nhất trong cột Y.

summary(d1$Y)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1950    1968    1986    1986    2003    2021

2 NHIỆM VỤ 3.2

2.1 Đọc dữ liệu từ file csv

Gán file dữ liệu vào biến car và đọc nó. Vì dữ liệu khá dài nên sử dụng câu lệnh summary để tạo bảng tóm tắt thống kê cho mật độ dân số ở các nhóm tuổi trên các nước.

Bảng tóm tắt này bao gồm các thông tin sau: giá trị nhỏ nhất; giá trị lớn nhất; giá trị trung bình; độ lệch chuẩn và phương sai.

car <- read.csv(file.choose(), header = T)
summary(car)
##    Car_Name              Year      Selling_Price    Present_Price   
##  Length:301         Min.   :2003   Min.   : 0.100   Min.   : 0.320  
##  Class :character   1st Qu.:2012   1st Qu.: 0.900   1st Qu.: 1.200  
##  Mode  :character   Median :2014   Median : 3.600   Median : 6.400  
##                     Mean   :2014   Mean   : 4.661   Mean   : 7.628  
##                     3rd Qu.:2016   3rd Qu.: 6.000   3rd Qu.: 9.900  
##                     Max.   :2018   Max.   :35.000   Max.   :92.600  
##    Kms_Driven      Fuel_Type         Seller_Type        Transmission      
##  Min.   :   500   Length:301         Length:301         Length:301        
##  1st Qu.: 15000   Class :character   Class :character   Class :character  
##  Median : 32000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 36947                                                           
##  3rd Qu.: 48767                                                           
##  Max.   :500000                                                           
##      Owner        
##  Min.   :0.00000  
##  1st Qu.:0.00000  
##  Median :0.00000  
##  Mean   :0.04319  
##  3rd Qu.:0.00000  
##  Max.   :3.00000

2.2 Mô tả chi tiết bộ dữ liệu

names(car)
## [1] "Car_Name"      "Year"          "Selling_Price" "Present_Price"
## [5] "Kms_Driven"    "Fuel_Type"     "Seller_Type"   "Transmission" 
## [9] "Owner"
library(skimr)
skim(car)
Data summary
Name car
Number of rows 301
Number of columns 9
_______________________
Column type frequency:
character 4
numeric 5
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Car_Name 0 1 3 25 0 98 0
Fuel_Type 0 1 3 6 0 3 0
Seller_Type 0 1 6 10 0 2 0
Transmission 0 1 6 9 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 2013.63 2.89 2003.00 2012.0 2014.0 2016.0 2018.0 ▁▁▃▇▅
Selling_Price 0 1 4.66 5.08 0.10 0.9 3.6 6.0 35.0 ▇▂▁▁▁
Present_Price 0 1 7.63 8.64 0.32 1.2 6.4 9.9 92.6 ▇▁▁▁▁
Kms_Driven 0 1 36947.21 38886.88 500.00 15000.0 32000.0 48767.0 500000.0 ▇▁▁▁▁
Owner 0 1 0.04 0.25 0.00 0.0 0.0 0.0 3.0 ▇▁▁▁▁

2.3 Phân tích dữ liệu

Trước tiên sẽ đổi tên cho các biến để thuận tiện cho việc thao tác trên dữ liệu.

Sau khi chạy câu lệnh, các biến sẽ được đổi tên như sau:

  • Car_Name: Ca
  • Year: Y
  • Selling_Price: SP
  • Present_Price: Pre
  • Kms_Driven: Km
  • Fuel_Type: Fu
  • Seller_Type: ST
  • Transmission: Tran
  • Owner: Ow
names(car) = c('Ca','Y','SP','Pre','Km','Fu','ST','Tran','Ow')
names(car)
## [1] "Ca"   "Y"    "SP"   "Pre"  "Km"   "Fu"   "ST"   "Tran" "Ow"

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

Việc rút trích dữ liệu giúp dễ dàng tìm thấy thông tin cần lấy trong tập dữ liệu lớn. Bằng cách sử dụng các hàm lọc, có thể lọc dữ liệu dựa trên các tiêu chí nhất định.

Sử dụng câu lệnh select để chọn ra 3 biến. Sau khi chạy câu lệnh sẽ có kết quả là 301 dòng và 3 cột bao gồm 3 cột ứng với 3 biến được chọn ra là tên xe, năm và số km.

library(stringr)
car1 <- select(car,Ca,Y,Km)
str(car1)
## 'data.frame':    301 obs. of  3 variables:
##  $ Ca: chr  "ritz" "sx4" "ciaz" "wagon r" ...
##  $ Y : int  2014 2013 2017 2011 2014 2018 2015 2015 2016 2015 ...
##  $ Km: int  27000 43000 6900 5200 42450 2071 18796 33429 20273 42367 ...

2.5 Mã hóa dữ liệu

Sử dụng hàm ifelse() để gán các giá trị mới cho các cột trong tập dữ liệu car1.

Với câu lệnh 1 sẽ: Tạo ra một biến mới có tên là Km.Coded trong tập dữ liệu car1. Gán giá trị Nhanh cho các quan sát có giá trị Km bằng 20.000 và giá trị Chậm cho các quan sát có giá trị Km khác 20.000.

Với câu lệnh 2 sẽ: Tạo ra một biến mới có tên là Y.Coded trong tập dữ liệu car1. Gán giá trị Xe đời mới cho các quan sát có giá trị Y lớn hơn hoặc bằng 2017 và giá trị Xe đời cũ cho các quan sát có giá trị Y nhỏ hơn 2017.

car1$Km.Coded <- ifelse(car1$Km == '20000','Nhanh','Chậm')
car1$Y.Coded <- ifelse(car1$Y >= 2017,'Xe đời mới', 'Xe đời cũ')
datatable(car1)

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

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

Đoạn mã lệnh này tạo ra một bảng tần số car2 thể hiện số lượng xe tương ứng với từng năm sản xuất trong tập dữ liệu car1. Bảng tần số này cho thấy có 2 xe sản xuất năm 2003, 1 xe sản xuất năm 2004, 4 xe sản xuất năm 2005, … và 23 xe sản xuất năm 2018.

car2 <- table(car1$Y)
str(car2)
##  'table' int [1:16(1d)] 2 1 4 4 2 7 6 15 19 23 ...
##  - attr(*, "dimnames")=List of 1
##   ..$ : chr [1:16] "2003" "2004" "2005" "2006" ...

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

Đoạn mã lệnh này tạo ra một bảng tần số hai chiều car3 thể hiện mối quan hệ giữa tốc độ sử dụng xe và năm sản xuất trong tập dữ liệu car1. Bảng tần số này cho thấy, ví dụ, có 2 xe thuộc loại “Chậm” được sản xuất năm 2003, 0 xe thuộc loại “Nhanh” được sản xuất năm 2003, 1 xe thuộc loại “Chậm” được sản xuất năm 2004, 0 xe thuộc loại “Nhanh” được sản xuất năm 2004, và tương tự cho các năm khác.

car3 <- table(car1$Km.Coded,car1$Y)
str(car3)
##  'table' int [1:2, 1:16] 2 0 1 0 4 0 4 0 2 0 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:2] "Chậm" "Nhanh"
##   ..$ : chr [1:16] "2003" "2004" "2005" "2006" ...

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

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

Dòng lệnh summary(car1$Ca) cung cấp thông tin tóm tắt về biến Ca (tên xe) trong tập dữ liệu car1. Kết quả hiển thị ba thống kê quan trọng:

Length: 301 - Đây là số lượng quan sát trong biến Ca, tức là có 301 tên xe trong tập dữ liệu. Class: character - Kiểu dữ liệu của biến Ca là ký tự (text). Mode: character - Giá trị xuất hiện nhiều nhất trong biến Ca là một loại ký tự. Tuy nhiên, “Mode” chỉ hiển thị thông tin cơ bản và không cho biết giá trị đó cụ thể là gì.

summary(car1$Ca)
##    Length     Class      Mode 
##       301 character character

2.7.2 Tính toán các đặc trưng đo lường theo năm

Kết quả hiển thị các thống kê sau: * Min.: 2003 - Đây là năm sản xuất sớm nhất của ô tô trong tập dữ liệu. * 1st Qu.: 2012 - Đây là giá trị phân vị thứ nhất, nghĩa là 25% ô tô trong tập dữ liệu có năm sản xuất nhỏ hơn hoặc bằng 2012. * Median: 2014 - Đây là giá trị trung vị, nghĩa là 50% ô tô trong tập dữ liệu có năm sản xuất nhỏ hơn hoặc bằng 2014 và 50% còn lại có năm sản xuất lớn hơn hoặc bằng 2014. * Mean: 2014 - Đây là giá trị trung bình của năm sản xuất. * 3rd Qu.: 2016 - Đây là giá trị phân vị thứ ba, nghĩa là 75% ô tô trong tập dữ liệu có năm sản xuất nhỏ hơn hoặc bằng 2016. * Max.: 2018 - Đây là năm sản xuất muộn nhất của ô tô trong tập dữ liệu.

summary(car1$Y)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2003    2012    2014    2014    2016    2018
LS0tDQp0aXRsZTogIk5ISeG7hk0gVuG7pCAzIg0KYXV0aG9yOiAiVHLhuqduIE5o4bqtdCBMaW5oIg0KZGF0ZTogIlwiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgXCIiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2Zsb2F0X3BsYWNlbWVudDogcmlnaHQNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCi0tLQ0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyAqKk5ISeG7hk0gVuG7pCAzLjEqKg0KDQojIyAqKsSQ4buNYyBk4buvIGxp4buHdSB04burIGZpbGUgY3N2KioNCg0KR8OhbiBmaWxlIGThu68gbGnhu4d1IHbDoG8gYmnhur9uIGQgdsOgIMSR4buNYyBuw7MuIFbDrCBk4buvIGxp4buHdSBraMOhIGTDoGkgbsOqbiBz4butIGThu6VuZyBjw6J1IGzhu4duaCBzdW1tYXJ5IMSR4buDIHThuqFvIGLhuqNuZyB0w7NtIHThuq90IHRo4buRbmcga8OqIGNobyBt4bqtdCDEkeG7mSBkw6JuIHPhu5Eg4bufIGPDoWMgbmjDs20gdHXhu5VpIHRyw6puIGPDoWMgbsaw4bubYy4gDQoNCkLhuqNuZyB0w7NtIHThuq90IG7DoHkgYmFvIGfhu5NtIGPDoWMgdGjDtG5nIHRpbiBzYXU6IGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0OyBnacOhIHRy4buLIGzhu5tuIG5o4bqldDsgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaDsgxJHhu5kgbOG7h2NoIGNodeG6qW4gdsOgIHBoxrDGoW5nIHNhaS4NCg0KYGBge3J9DQpkIDwtIHJlYWQuY3N2KGZpbGUuY2hvb3NlKCksIGhlYWRlciA9IFQpDQpzdW1tYXJ5KGQpDQpgYGANCg0KIyMgKipNw7QgdOG6oyBjaGkgdGnhur90IGLhu5kgZOG7ryBsaeG7h3UqKg0KDQpMw6AgbeG7mXQgdOG6rXAgZOG7ryBsaeG7h3UgbeG7nyBy4buZbmcgduG7gSBkw6JuIHPhu5EgdsOgIG5ow6JuIGto4bqpdSBo4buNYyDEkcaw4bujYyBjdW5nIGPhuqVwIGLhu59pIOG7pnkgYmFuIETDom4gc+G7kSBMacOqbiBI4bujcCBRdeG7kWMgKFVOUEQpLiBC4buZIGThu68gbGnhu4d1IG7DoHkgY3VuZyBj4bqlcCB0aMO0bmcgdGluIHbhu4EgZMOibiBz4buRIGPhu6dhIGPDoWMgcXXhu5FjIGdpYSwgdsO5bmcgbMOjbmggdGjhu5UgdsOgIGtodSB24buxYyB0csOqbiB0aOG6vyBnaeG7m2kuDQoNCkLhu5kgZOG7ryBsaeG7h3UgYmFvIGfhu5NtIDE4Mjg4IHF1YW4gc8OhdCB2w6AgMjQgYmnhur9uLiDEkMaw4bujYyBz4butIGThu6VuZyDEkeG7gyBuZ2hpw6puIGPhu6l1IHbhu4EgbeG6rXQgxJHhu5kgZMOibiBz4buRIGPhu6dhIGPDoWMgbmjDs20gdHXhu5VpIHRyw6puIGPDoWMgbsaw4bubYy4NCg0KYGBgIHtyfQ0KbGlicmFyeShza2ltcikNCnNraW0oZCkNCmBgYA0KDQrEkOG7mSB0deG7lWkgZGFvIMSR4buZbmcgdOG7qzoNCg0KKiBExrDhu5tpIDEgdHXhu5VpDQoqIETGsOG7m2kgNSB0deG7lWkNCiogRMaw4bubaSAxNSB0deG7lWkNCiogRMaw4bubaSAyNSB0deG7lWkNCiogVOG7qyAxNSB0deG7lWkgxJHhur9uIDY0IHR14buVaQ0KKiBUcsOqbiAxNSB0deG7lWkNCiogVHLDqm4gMTggdHXhu5VpDQoqIDEgdHXhu5VpDQoqIFThu6sgMSB0deG7lWkgxJHhur9uIDQgdHXhu5VpDQoqIFThu6sgNSB0deG7lWkgxJHhur9uIDkgdHXhu5VpDQoqIFThu6sgMTAgdHXhu5VpIMSR4bq/biAxNCB0deG7lWkNCiogVOG7qyAxNSB0deG7lWkgxJHhur9uIDE5IHR14buVaQ0KKiBU4burIDIwIHR14buVaSDEkeG6v24gMjkgdHXhu5VpDQoqIFThu6sgMzAgdHXhu5VpIMSR4bq/biAzOSB0deG7lWkNCiogVOG7qyA0MCB0deG7lWkgxJHhur9uIDQ5IHR14buVaQ0KKiBU4burIDUwIHR14buVaSDEkeG6v24gNTkgdHXhu5VpDQoqIFThu6sgNjAgdHXhu5VpIMSR4bq/biA2OSB0deG7lWkNCiogVOG7qyA3MCB0deG7lWkgxJHhur9uIDc5IHR14buVaQ0KKiBU4burIDgwIHR14buVaSDEkeG6v24gODkgdHXhu5VpDQoqIFThu6sgOTAgdHXhu5VpIMSR4bq/biA5OSB0deG7lWkNCiogVHLDqm4gMTAwIHR14buVaQ0KDQojIyAqKlBow6JuIHTDrWNoIGThu68gbGnhu4d1IHRoZW8gNSBxdeG7kWMgZ2lhLCA1IMSR4buZIHR14buVaSB2w6AgdOG7lW5nIGTDom4gc+G7kSoqDQoNClRyxrDhu5tjIHRpw6puIHPhur0gxJHhu5VpIHTDqm4gY2hvOiB0w6puIMSR4bqldCBuxrDhu5tjLCBuxINtLCBkw6JuIHPhu5EgdsOgIGPDoWMgYmnhur9uIMSR4buZIHR14buVaSDEkeG7gyB0aHXhuq1uIHRp4buHbiBjaG8gdmnhu4djIHRoYW8gdMOhYyB0csOqbiBk4buvIGxp4buHdS4NCg0KU2F1IGtoaSBjaOG6oXkgY8OidSBs4buHbmgsIGPDoWMgYmnhur9uIHPhur0gxJHGsOG7o2MgxJHhu5VpIHTDqm4gbmjGsCBzYXU6DQoNCiAqIENvdW50cnkubmFtZTogQw0KICogWWVhcjogWQ0KICogUG9wdWxhdGlvbjogUA0KICogUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE6IFB1MQ0KICogUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDU6IFB1NQ0KICogUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE1OiBQdTE1DQogKiBQb3B1bGF0aW9uIHVuZGVyIHRoZSBhZ2Ugb2YgMjU6IFB1MjUNCiAqIFBvcHVsYXRpb24gYWdlZCAxNSB0byA2NCB5ZWFyczogUDE1dDY0DQogKiBQb3B1bGF0aW9uIG9sZGVyIHRoYW4gMTUgeWVhcnM6IFAwMTUNCiAqIFBvcHVsYXRpb24gb2xkZXIgdGhhbiAxOCB5ZWFyczogUG8xOA0KICogUG9wdWxhdGlvbiBhdCBhZ2UgMTogUDENCiAqIFBvcHVsYXRpb24gYWdlZCAxIHRvIDQgeWVhcnM6IFAxdG80DQogKiBQb3B1bGF0aW9uIGFnZWQgNSB0byA5IHllYXJzOiBQNXRvOQ0KICogUG9wdWxhdGlvbiBhZ2VkIDEwIHRvIDE0IHllYXJzOiBQMTB0bzE0DQogKiBQb3B1bGF0aW9uIGFnZWQgMTUgdG8gMTkgeWVhcnM6IFAxNXRvMTkNCiAqIFBvcHVsYXRpb24gYWdlZCAyMCB0byAyOSB5ZWFyczogUDIwdG8yOQ0KICogUG9wdWxhdGlvbiBhZ2VkIDMwIHRvIDM5IHllYXJzPSBQMzB0MzkNCiAqIFBvcHVsYXRpb24gYWdlZCA0MCB0byA0OSB5ZWFycz0gUDQwdDQ5DQogKiBQb3B1bGF0aW9uIGFnZWQgNTAgdG8gNTkgeWVhcnM9IFA1MHQ1OQ0KICogUG9wdWxhdGlvbiBhZ2VkIDYwIHRvIDY5IHllYXJzPSBQNjB0NjkNCiAqIFBvcHVsYXRpb24gYWdlZCA3MCB0byA3OSB5ZWFycz0gUDcwdDc5DQogKiBQb3B1bGF0aW9uIGFnZWQgODAgdG8gODkgeWVhcnM9IFA4MHQ4OQ0KICogUG9wdWxhdGlvbiBhZ2VkIDkwIHRvIDk5IHllYXJzPSBQOTB0OTkNCiAqIFBvcHVsYXRpb24gb2xkZXIgdGhhbiAxMDAgeWVhcnM9IFBvMTAwDQogDQpgYGAge3J9DQpuYW1lcyhkKSA9IGMoJ0MnLCdZJywnUCcsJ1B1MScsJ1B1NScsJ1B1MTUnLCdQdTI1JywnUDE1dDY0JywnUG8xNScsJ1BvMTgnLCdQMScsJ1AxdDQnLCdQNXQ5JywnUDEwdDE0JywnUDE1dDE5JywnUDIwdDI5JywnUDMwdDM5JywnUDQwdDQ5JywnUDUwdDU5JywnUDYwdDY5JywnUDcwdDc5JywnUDgwdDg5JywnUDkwdDk5JywnUG8xMDAnKQ0KbmFtZXMoZCkNCmBgYA0KIyMgKipSw7p0IHRyw61jaCBk4buvIGxp4buHdSoqDQoNClZp4buHYyByw7p0IHRyw61jaCBk4buvIGxp4buHdSBnacO6cCBk4buFIGTDoG5nIHTDrG0gdGjhuqV5IHRow7RuZyB0aW4gY+G6p24gbOG6pXkgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgbOG7m24uIELhurFuZyBjw6FjaCBz4butIGThu6VuZyBjw6FjIGjDoG0gbOG7jWMsIGPDsyB0aOG7gyBs4buNYyBk4buvIGxp4buHdSBk4buxYSB0csOqbiBjw6FjIHRpw6p1IGNow60gbmjhuqV0IMSR4buLbmguIA0KDQpT4butIGThu6VuZyBjw6J1IGzhu4duaCBzZWxlY3QgxJHhu4MgY2jhu41uIHJhIDUgYmnhur9uIMSR4buZIHR14buVaSB04burIDEgxJHhur9uIDQgdHXhu5VpOyA1IMSR4bq/biA5IHR14buVaTsgMTAgxJHhur9uIDE0IHR14buVaTsgMTUgxJHhur9uIDE5IHR14buVaTsgMjAgxJHhur9uIDI5IHR14buVaS4gU2F1IGtoaSBjaOG6oXkgY8OidSBs4buHbmggc+G6vSBjw7Mga+G6v3QgcXXhuqMgbMOgIDE4Mjg4IGTDsm5nIHbDoCAyNCBj4buZdC4NCg0KYGBgIHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoc3RyaW5ncikNCmQxIDwtIHNlbGVjdChkLEMsWSxQLFAxdDQsUDV0OSxQMTB0MTQsUDE1dDE5LFAyMHQyOSkgJT4lIGZpbHRlcihzdHJfZGV0ZWN0KEMsICJeQyIpKQ0Kc3RyKGQxKQ0KYGBgDQojIyAqKk3DoyBow7NhIGThu68gbGnhu4d1KioNCg0KU+G7rSBk4bulbmcgaMOgbSBpZmVsc2UoKSDEkeG7gyBnw6FuIGPDoWMgZ2nDoSB0cuG7iyBt4bubaSBjaG8gY8OhYyBj4buZdCB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBkMS4NClbhu5tpIGPDonUgbOG7h25oIDEgc+G6vToNCiAqIEtp4buDbSB0cmEgeGVtIGdpw6EgdHLhu4sgY+G7p2EgY+G7mXQgUCBi4bqxbmcgIjUwMDAwMDAiIGhheSBraMO0bmcuDQogKiBO4bq/dSBjw7MsIHRow6wgZ8OhbiBnacOhIHRy4buLICLEkMO0bmciIGNobyBj4buZdCBQLkNvZGVkLg0KICogTuG6v3Uga2jDtG5nLCB0aMOsIGfDoW4gZ2nDoSB0cuG7iyAiVGjGsGEgdGjhu5t0IiBjaG8gY+G7mXQgUC5Db2RlZA0KDQpW4bubaSBjw6J1IGzhu4duaCAyIHPhur06DQogKiBLaeG7g20gdHJhIHhlbSBnacOhIHRy4buLIGPhu6dhIGPhu5l0IFAyMHQyOSBs4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcgMTI1MDAwMCBoYXkga2jDtG5nLg0KICogTuG6v3UgY8OzLCB0aMOsIGfDoW4gZ2nDoSB0cuG7iyAiTmhp4buBdSIgY2hvIGPhu5l0IFAyMHQyOS5Db2RlZC4NCiAqIE7hur91IGtow7RuZywgdGjDrCBnw6FuIGdpw6EgdHLhu4sgIsONdCIgY2hvIGPhu5l0IFAyMHQyOS5Db2RlZC4NCg0KYGBgIHtyfQ0KbGlicmFyeShEVCkNCmQxJFAuQ29kZWQgPC0gaWZlbHNlKGQxJFAgPT0gNTAwMDAwMCwnxJDDtG5nJywnVGjGsGEgdGjhu5t0JykNCmQxJFAyMHQyOS5Db2RlZCA8LSBpZmVsc2UoZDEkUDIwdDI5ID49IDEyNTAwMDAsJ05oaeG7gXUnLCAnw410JykNCmRhdGF0YWJsZShkMSkNCmBgYA0KDQojIyAqKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRKioNCg0KIyMjICoqTOG6rXAgYuG6o25nIHThuqduIHPhu5EgMSBiaeG6v24qKg0KDQpC4bqjbmcgdOG6p24gc+G7kSBkMiBjaG8gYmnhur90IHLhurFuZyB04bqldCBj4bqjIDI1NCBxdeG7kWMgZ2lhL3bDuW5nIGzDo25oIHRo4buVIHRyb25nIGPhu5l0ICJDIiBj4bunYSB04bqtcCBk4buvIGxp4buHdSBkMSDEkeG7gXUgeHXhuqV0IGhp4buHbiB24bubaSB04bqnbiBz4buRIGLhurFuZyBuaGF1LCBj4bulIHRo4buDIGzDoCA3MiBs4bqnbi4NCsSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgZ+G7o2kgw70gcuG6sW5nIGThu68gbGnhu4d1IHRyb25nIGPhu5l0ICJDIiBjw7MgdGjhu4MgxJHGsOG7o2MgdOG6oW8gcmEgbeG7mXQgY8OhY2ggbmfhuqt1IG5oacOqbiBob+G6t2MgY8OzIHPhu7EgcGjDom4gcGjhu5FpIMSR4buBdSBnaeG7r2EgY8OhYyBxdeG7kWMgZ2lhL3bDuW5nIGzDo25oIHRo4buVLg0KDQpgYGAge3J9DQpkMiA8LSB0YWJsZShkMSRDKQ0Kc3RyKGQyKQ0KYGBgDQojIyMgKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSAyIGJp4bq/bioqDQoNCkLhuqNuZyBjaMOpbyBkMyBjaG8gYmnhur90IHLhurFuZyBnacOhIHRy4buLICJUaMawYSB0aOG7m3QiIHRyb25nIGPhu5l0ICJQLkNvZGVkIiB4deG6pXQgaGnhu4duIDcyIGzhuqduIHbhu5tpIG3hu5dpIHF14buRYyBnaWEvdsO5bmcgbMOjbmggdGjhu5UgdHJvbmcgY+G7mXQgIkMiLg0KxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgduG7gSB04bqnbiBzdeG6pXQgeHXhuqV0IGhp4buHbiBj4bunYSBnacOhIHRy4buLICJUaMawYSB0aOG7m3QiIGdp4buvYSBjw6FjIHF14buRYyBnaWEvdsO5bmcgbMOjbmggdGjhu5UuDQoNCmBgYCB7cn0NCmQzIDwtIHRhYmxlKGQxJFAsZDEkQykNCnN0cihkMykNCmBgYA0KIyMgKipQaMOibiB0w61jaCBk4buvIGxp4buHdSB0aGVvIHF14buRYyBnaWEgdsOgIHRoZW8gdGjhu51pIGdpYW4qKg0KDQojIyMgKipUw61uaCBjw6FjIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nKioNCg0KQ8OidSBs4buHbmggZMaw4bubaSBjdW5nIGPhuqVwIHTDs20gdOG6r3QgY8OhYyDEkeG6t2MgxJFp4buDbSB0aOG7kW5nIGvDqiBxdWFuIHRy4buNbmcgY+G7p2EgYmnhur9uIFAgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgZDEuIETDsm5nIGvhur90IHF14bqjIGhp4buDbiB0aOG7iyBjw6FjIGdpw6EgdHLhu4sgdMawxqFuZyDhu6luZyB24bubaSBjw6FjIHRo4buRbmcga8OqIHNhdToNCiAqIE1pbi4gKE1pbmltdW0pOiBHacOhIHRy4buLIG5o4buPIG5o4bqldCB0cm9uZyBj4buZdCBQLiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgbMOgIDEzNjMuDQogKiAxc3QgUXUuIChGaXJzdCBRdWFydGlsZSk6IFRydW5nIHbhu4sgY+G7p2EgbuG7rWEgZMaw4bubaSBk4buvIGxp4buHdS4g4bueIMSRw6J5LCAyNSUgY8OhYyBnacOhIHRy4buLIHRyb25nIGPhu5l0IFAgbmjhu48gaMahbiAyOTE2MDUuDQogKiBNZWRpYW46IFRydW5nIHbhu4sgY+G7p2EgdG/DoG4gYuG7mSBk4buvIGxp4buHdS4gR2nhu69hIDUwJSBjw6FjIGdpw6EgdHLhu4sgbuG6sW0gZMaw4bubaSB2w6AgNTAlIGPDoWMgZ2nDoSB0cuG7iyBu4bqxbSB0csOqbiAzODM0MDYwLg0KICogTWVhbjogR2nDoSB0cuG7iyB0cnVuZyBiw6xuaC4gVHJ1bmcgYsOsbmgsIG3hu5dpIGdpw6EgdHLhu4sgdHJvbmcgY+G7mXQgUCBjw7MgdHLhu4sgbMOgIDEyNjUwMDAwMDAuDQogKiAzcmQgUXUuIChUaGlyZCBRdWFydGlsZSk6IFRydW5nIHbhu4sgY+G7p2EgbuG7rWEgdHLDqm4gZOG7ryBsaeG7h3UuIDc1JSBjw6FjIGdpw6EgdHLhu4sgdHJvbmcgY+G7mXQgUCBuaOG7jyBoxqFuIDE2NzkwNzAwMC4NCiAqIE1heC4gKE1heGltdW0pOiBHacOhIHRy4buLIGzhu5tuIG5o4bqldCB0cm9uZyBj4buZdCBQLiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDc5MDkwMDAwMDAuDQoNCmBgYCB7cn0NCnN1bW1hcnkoZDEkUCkNCmBgYA0KIyMjICoqVMOtbmggdG/DoW4gY8OhYyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZyB0aGVvIG7Eg20qKg0KDQpEw7JuZyBr4bq/dCBxdeG6oyBoaeG7g24gdGjhu4sgY8OhYyBnacOhIHRy4buLIHTGsMahbmcg4bupbmcgduG7m2kgY8OhYyB0aOG7kW5nIGvDqiBzYXU6DQogKiBNaW4uOiAxOTUwIC0gxJDDonkgbMOgIGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0IHRyb25nIGPhu5l0IFkuDQogKiAxc3QgUXUuOiAxOTY4IC0gxJDDonkgbMOgIHRydW5nIHbhu4sgY+G7p2EgbuG7rWEgZMaw4bubaSBk4buvIGxp4buHdS4gTsOzaSBjw6FjaCBraMOhYywgMjUlIGPDoWMgZ2nDoSB0cuG7iyB0cm9uZyBj4buZdCBZIG5o4buPIGjGoW4gMTk2OC4NCiAqIE1lZGlhbjogMTk4NiAtIMSQw6J5IGzDoCB0cnVuZyB24buLIGPhu6dhIHRvw6BuIGLhu5kgZOG7ryBsaeG7h3UuIFRyw6puIDUwJSB2w6AgZMaw4bubaSA1MCUgY8OhYyBnacOhIHRy4buLIG7hurFtIGTGsOG7m2kgMTk4Ni4NCiAqIE1lYW46IDE5ODYgLSDEkMOieSBsw6AgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaC4gVOG7lW5nIGdpw6EgdHLhu4sgY+G7p2EgdOG6pXQgY+G6oyBjw6FjIHBo4bqnbiB04butIHRyb25nIGPhu5l0IFkgxJHGsOG7o2MgY2hpYSBjaG8gc+G7kSBsxrDhu6NuZyBwaOG6p24gdOG7rSDEkeG7gyB0w61uaCBnacOhIHRy4buLIHRydW5nIGLDrG5oLg0KICogM3JkIFF1LjogMjAwMyAtIMSQw6J5IGzDoCB0cnVuZyB24buLIGPhu6dhIG7hu61hIHRyw6puIGThu68gbGnhu4d1LiA3NSUgY8OhYyBnacOhIHRy4buLIHRyb25nIGPhu5l0IFkgbmjhu48gaMahbiAyMDAzLg0KICogTWF4LjogMjAyMSAtIMSQw6J5IGzDoCBnacOhIHRy4buLIGzhu5tuIG5o4bqldCB0cm9uZyBj4buZdCBZLg0KDQpgYGAge3J9DQpzdW1tYXJ5KGQxJFkpDQpgYGANCiMgKipOSEnhu4ZNIFbhu6QgMy4yKioNCg0KIyMgKirEkOG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIGNzdioqDQoNCkfDoW4gZmlsZSBk4buvIGxp4buHdSB2w6BvIGJp4bq/biBjYXIgdsOgIMSR4buNYyBuw7MuIFbDrCBk4buvIGxp4buHdSBraMOhIGTDoGkgbsOqbiBz4butIGThu6VuZyBjw6J1IGzhu4duaCBzdW1tYXJ5IMSR4buDIHThuqFvIGLhuqNuZyB0w7NtIHThuq90IHRo4buRbmcga8OqIGNobyBt4bqtdCDEkeG7mSBkw6JuIHPhu5Eg4bufIGPDoWMgbmjDs20gdHXhu5VpIHRyw6puIGPDoWMgbsaw4bubYy4gDQoNCkLhuqNuZyB0w7NtIHThuq90IG7DoHkgYmFvIGfhu5NtIGPDoWMgdGjDtG5nIHRpbiBzYXU6IGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0OyBnacOhIHRy4buLIGzhu5tuIG5o4bqldDsgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaDsgxJHhu5kgbOG7h2NoIGNodeG6qW4gdsOgIHBoxrDGoW5nIHNhaS4NCg0KYGBgIHtyfQ0KY2FyIDwtIHJlYWQuY3N2KGZpbGUuY2hvb3NlKCksIGhlYWRlciA9IFQpDQpzdW1tYXJ5KGNhcikNCmBgYA0KDQojIyAqKk3DtCB04bqjIGNoaSB0aeG6v3QgYuG7mSBk4buvIGxp4buHdSoqDQoNCiAqIELhu5kgZOG7ryBsaeG7h3UgY2FyZGF0YS5jc3YgZ+G7k20gMzAxIHF1YW4gc8OhdCB2w6AgOSBiaeG6v24uDQogIDkgYmnhur9uIMSRw7MgZ+G7k206IA0KICAgKiBDYXJfTmFtZTogVMOqbiDDtCB0w7QNCiAgICogWWVhcjogTsSDbQ0KICAgKiBTZWxsaW5nX1ByaWNlOiBHacOhIGLDoW4NCiAgICogUHJlc2VudF9QcmljZTogR2nDoSBraHV54bq/biBtw6NpDQogICAqIEttc19Ecml2ZW4NCiAgICogRnVlbF9UeXBlDQogICAqIFNlbGxlcl9UeXBlDQogICAqIFRyYW5zbWlzc2lvbg0KICAgKiBPd25lcg0KICogTOG6pXkgZOG7ryBsaeG7h3UgdOG7qzogaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy9uZWhhbGJpcmxhL3ZlaGljbGUtZGF0YXNldC1mcm9tLWNhcmRla2hvDQogDQpgYGAge3J9DQpuYW1lcyhjYXIpDQpgYGANCmBgYCB7cn0NCmxpYnJhcnkoc2tpbXIpDQpza2ltKGNhcikNCmBgYA0KIyMgKipQaMOibiB0w61jaCBk4buvIGxp4buHdSoqDQoNClRyxrDhu5tjIHRpw6puIHPhur0gxJHhu5VpIHTDqm4gY2hvIGPDoWMgYmnhur9uIMSR4buDIHRodeG6rW4gdGnhu4duIGNobyB2aeG7h2MgdGhhbyB0w6FjIHRyw6puIGThu68gbGnhu4d1Lg0KDQpTYXUga2hpIGNo4bqheSBjw6J1IGzhu4duaCwgY8OhYyBiaeG6v24gc+G6vSDEkcaw4bujYyDEkeG7lWkgdMOqbiBuaMawIHNhdToNCg0KICAgKiBDYXJfTmFtZTogQ2ENCiAgICogWWVhcjogWQ0KICAgKiBTZWxsaW5nX1ByaWNlOiBTUA0KICAgKiBQcmVzZW50X1ByaWNlOiBQcmUNCiAgICogS21zX0RyaXZlbjogS20NCiAgICogRnVlbF9UeXBlOiBGdQ0KICAgKiBTZWxsZXJfVHlwZTogU1QNCiAgICogVHJhbnNtaXNzaW9uOiBUcmFuDQogICAqIE93bmVyOiBPdw0KDQpgYGAge3J9DQpuYW1lcyhjYXIpID0gYygnQ2EnLCdZJywnU1AnLCdQcmUnLCdLbScsJ0Z1JywnU1QnLCdUcmFuJywnT3cnKQ0KbmFtZXMoY2FyKQ0KYGBgDQojIyAqKlLDunQgdHLDrWNoIGThu68gbGnhu4d1KioNCg0KVmnhu4djIHLDunQgdHLDrWNoIGThu68gbGnhu4d1IGdpw7pwIGThu4UgZMOgbmcgdMOsbSB0aOG6pXkgdGjDtG5nIHRpbiBj4bqnbiBs4bqleSB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBs4bubbi4gQuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIGPDoWMgaMOgbSBs4buNYywgY8OzIHRo4buDIGzhu41jIGThu68gbGnhu4d1IGThu7FhIHRyw6puIGPDoWMgdGnDqnUgY2jDrSBuaOG6pXQgxJHhu4tuaC4gDQoNClPhu60gZOG7pW5nIGPDonUgbOG7h25oIHNlbGVjdCDEkeG7gyBjaOG7jW4gcmEgMyBiaeG6v24uIFNhdSBraGkgY2jhuqF5IGPDonUgbOG7h25oIHPhur0gY8OzIGvhur90IHF14bqjIGzDoCAzMDEgZMOybmcgdsOgIDMgY+G7mXQgYmFvIGfhu5NtIDMgY+G7mXQg4bupbmcgduG7m2kgMyBiaeG6v24gxJHGsOG7o2MgY2jhu41uIHJhIGzDoCB0w6puIHhlLCBuxINtIHbDoCBz4buRIGttLg0KDQpgYGAge3J9DQpsaWJyYXJ5KHN0cmluZ3IpDQpjYXIxIDwtIHNlbGVjdChjYXIsQ2EsWSxLbSkNCnN0cihjYXIxKQ0KYGBgDQojIyAqKk3DoyBow7NhIGThu68gbGnhu4d1KioNCg0KU+G7rSBk4bulbmcgaMOgbSBpZmVsc2UoKSDEkeG7gyBnw6FuIGPDoWMgZ2nDoSB0cuG7iyBt4bubaSBjaG8gY8OhYyBj4buZdCB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBjYXIxLg0KDQpW4bubaSBjw6J1IGzhu4duaCAxIHPhur06IFThuqFvIHJhIG3hu5l0IGJp4bq/biBt4bubaSBjw7MgdMOqbiBsw6AgS20uQ29kZWQgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgY2FyMS4gR8OhbiBnacOhIHRy4buLIE5oYW5oIGNobyBjw6FjIHF1YW4gc8OhdCBjw7MgZ2nDoSB0cuG7iyBLbSBi4bqxbmcgMjAuMDAwIHbDoCBnacOhIHRy4buLIENo4bqtbSBjaG8gY8OhYyBxdWFuIHPDoXQgY8OzIGdpw6EgdHLhu4sgS20ga2jDoWMgMjAuMDAwLg0KDQpW4bubaSBjw6J1IGzhu4duaCAyIHPhur06IFThuqFvIHJhIG3hu5l0IGJp4bq/biBt4bubaSBjw7MgdMOqbiBsw6AgWS5Db2RlZCB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBjYXIxLg0KR8OhbiBnacOhIHRy4buLIFhlIMSR4budaSBt4bubaSBjaG8gY8OhYyBxdWFuIHPDoXQgY8OzIGdpw6EgdHLhu4sgWSBs4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcgMjAxNyB2w6AgZ2nDoSB0cuG7iyBYZSDEkeG7nWkgY8WpIGNobyBjw6FjIHF1YW4gc8OhdCBjw7MgZ2nDoSB0cuG7iyBZIG5o4buPIGjGoW4gMjAxNy4NCg0KYGBgIHtyfQ0KY2FyMSRLbS5Db2RlZCA8LSBpZmVsc2UoY2FyMSRLbSA9PSAnMjAwMDAnLCdOaGFuaCcsJ0No4bqtbScpDQpjYXIxJFkuQ29kZWQgPC0gaWZlbHNlKGNhcjEkWSA+PSAyMDE3LCdYZSDEkeG7nWkgbeG7m2knLCAnWGUgxJHhu51pIGPFqScpDQpkYXRhdGFibGUoY2FyMSkNCmBgYA0KIyMgKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSoqDQoNCiMjIyAqKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIDEgYmnhur9uKioNCg0KxJBv4bqhbiBtw6MgbOG7h25oIG7DoHkgdOG6oW8gcmEgbeG7mXQgYuG6o25nIHThuqduIHPhu5EgY2FyMiB0aOG7gyBoaeG7h24gc+G7kSBsxrDhu6NuZyB4ZSB0xrDGoW5nIOG7qW5nIHbhu5tpIHThu6tuZyBuxINtIHPhuqNuIHh14bqldCB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBjYXIxLg0KQuG6o25nIHThuqduIHPhu5EgbsOgeSBjaG8gdGjhuqV5IGPDsyAyIHhlIHPhuqNuIHh14bqldCBuxINtIDIwMDMsIDEgeGUgc+G6o24geHXhuqV0IG7Eg20gMjAwNCwgNCB4ZSBz4bqjbiB4deG6pXQgbsSDbSAyMDA1LCAuLi4gdsOgIDIzIHhlIHPhuqNuIHh14bqldCBuxINtIDIwMTguDQoNCmBgYCB7cn0NCmNhcjIgPC0gdGFibGUoY2FyMSRZKQ0Kc3RyKGNhcjIpDQpgYGANCiMjIyAqKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIDIgYmnhur9uKioNCg0KxJBv4bqhbiBtw6MgbOG7h25oIG7DoHkgdOG6oW8gcmEgbeG7mXQgYuG6o25nIHThuqduIHPhu5EgaGFpIGNoaeG7gXUgY2FyMyB0aOG7gyBoaeG7h24gbeG7kWkgcXVhbiBo4buHIGdp4buvYSB04buRYyDEkeG7mSBz4butIGThu6VuZyB4ZSB2w6AgbsSDbSBz4bqjbiB4deG6pXQgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgY2FyMS4NCkLhuqNuZyB04bqnbiBz4buRIG7DoHkgY2hvIHRo4bqleSwgdsOtIGThu6UsIGPDsyAyIHhlIHRodeG7mWMgbG/huqFpICJDaOG6rW0iIMSRxrDhu6NjIHPhuqNuIHh14bqldCBuxINtIDIwMDMsIDAgeGUgdGh14buZYyBsb+G6oWkgIk5oYW5oIiDEkcaw4bujYyBz4bqjbiB4deG6pXQgbsSDbSAyMDAzLCAxIHhlIHRodeG7mWMgbG/huqFpICJDaOG6rW0iIMSRxrDhu6NjIHPhuqNuIHh14bqldCBuxINtIDIwMDQsIDAgeGUgdGh14buZYyBsb+G6oWkgIk5oYW5oIiDEkcaw4bujYyBz4bqjbiB4deG6pXQgbsSDbSAyMDA0LCB2w6AgdMawxqFuZyB04buxIGNobyBjw6FjIG7Eg20ga2jDoWMuDQoNCmBgYCB7cn0NCmNhcjMgPC0gdGFibGUoY2FyMSRLbS5Db2RlZCxjYXIxJFkpDQpzdHIoY2FyMykNCmBgYA0KIyMgKipQaMOibiB0w61jaCBk4buvIGxp4buHdSB0aGVvIHF14buRYyBnaWEgdsOgIHRoZW8gdGjhu51pIGdpYW4qKg0KDQojIyMgKipUw61uaCBjw6FjIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nKioNCg0KRMOybmcgbOG7h25oIHN1bW1hcnkoY2FyMSRDYSkgY3VuZyBj4bqlcCB0aMO0bmcgdGluIHTDs20gdOG6r3QgduG7gSBiaeG6v24gQ2EgKHTDqm4geGUpIHRyb25nIHThuq1wIGThu68gbGnhu4d1IGNhcjEuIEvhur90IHF14bqjIGhp4buDbiB0aOG7iyBiYSB0aOG7kW5nIGvDqiBxdWFuIHRy4buNbmc6DQoNCkxlbmd0aDogMzAxIC0gxJDDonkgbMOgIHPhu5EgbMaw4bujbmcgcXVhbiBzw6F0IHRyb25nIGJp4bq/biBDYSwgdOG7qWMgbMOgIGPDsyAzMDEgdMOqbiB4ZSB0cm9uZyB04bqtcCBk4buvIGxp4buHdS4NCkNsYXNzOiBjaGFyYWN0ZXIgLSBLaeG7g3UgZOG7ryBsaeG7h3UgY+G7p2EgYmnhur9uIENhIGzDoCBrw70gdOG7sSAodGV4dCkuDQpNb2RlOiBjaGFyYWN0ZXIgLSBHacOhIHRy4buLIHh14bqldCBoaeG7h24gbmhp4buBdSBuaOG6pXQgdHJvbmcgYmnhur9uIENhIGzDoCBt4buZdCBsb+G6oWkga8O9IHThu7EuIFR1eSBuaGnDqm4sICJNb2RlIiBjaOG7iSBoaeG7g24gdGjhu4sgdGjDtG5nIHRpbiBjxqEgYuG6o24gdsOgIGtow7RuZyBjaG8gYmnhur90IGdpw6EgdHLhu4sgxJHDsyBj4bulIHRo4buDIGzDoCBnw6wuDQoNCmBgYCB7cn0NCnN1bW1hcnkoY2FyMSRDYSkNCmBgYA0KIyMjICoqVMOtbmggdG/DoW4gY8OhYyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZyB0aGVvIG7Eg20qKg0KDQpL4bq/dCBxdeG6oyBoaeG7g24gdGjhu4sgY8OhYyB0aOG7kW5nIGvDqiBzYXU6DQogKiBNaW4uOiAyMDAzIC0gxJDDonkgbMOgIG7Eg20gc+G6o24geHXhuqV0IHPhu5ttIG5o4bqldCBj4bunYSDDtCB0w7QgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UuDQogKiAxc3QgUXUuOiAyMDEyIC0gxJDDonkgbMOgIGdpw6EgdHLhu4sgcGjDom4gduG7iyB0aOG7qSBuaOG6pXQsIG5naMSpYSBsw6AgMjUlIMO0IHTDtCB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBjw7MgbsSDbSBz4bqjbiB4deG6pXQgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nIDIwMTIuDQogKiBNZWRpYW46IDIwMTQgLSDEkMOieSBsw6AgZ2nDoSB0cuG7iyB0cnVuZyB24buLLCBuZ2jEqWEgbMOgIDUwJSDDtCB0w7QgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgY8OzIG7Eg20gc+G6o24geHXhuqV0IG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyAyMDE0IHbDoCA1MCUgY8OybiBs4bqhaSBjw7MgbsSDbSBz4bqjbiB4deG6pXQgbOG7m24gaMahbiBob+G6t2MgYuG6sW5nIDIwMTQuDQogKiBNZWFuOiAyMDE0IC0gxJDDonkgbMOgIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggY+G7p2EgbsSDbSBz4bqjbiB4deG6pXQuDQogKiAzcmQgUXUuOiAyMDE2IC0gxJDDonkgbMOgIGdpw6EgdHLhu4sgcGjDom4gduG7iyB0aOG7qSBiYSwgbmdoxKlhIGzDoCA3NSUgw7QgdMO0IHRyb25nIHThuq1wIGThu68gbGnhu4d1IGPDsyBuxINtIHPhuqNuIHh14bqldCBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgMjAxNi4NCiAqIE1heC46IDIwMTggLSDEkMOieSBsw6AgbsSDbSBz4bqjbiB4deG6pXQgbXXhu5luIG5o4bqldCBj4bunYSDDtCB0w7QgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UuDQoNCmBgYCB7cn0NCnN1bW1hcnkoY2FyMSRZKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0K