1. Thong tin co ban

1.1. Thong tin co ban ve du lieu

# Số dòng và số cột
dim(Data)
## [1] 100000     20
# Tên các biến
names(Data)
##  [1] "Employee_ID"                 "Department"                 
##  [3] "Gender"                      "Age"                        
##  [5] "Job_Title"                   "Hire_Date"                  
##  [7] "Years_At_Company"            "Education_Level"            
##  [9] "Performance_Score"           "Monthly_Salary"             
## [11] "Work_Hours_Per_Week"         "Projects_Handled"           
## [13] "Overtime_Hours"              "Sick_Days"                  
## [15] "Remote_Work_Frequency"       "Team_Size"                  
## [17] "Training_Hours"              "Promotions"                 
## [19] "Employee_Satisfaction_Score" "Resigned"
# Cấu trúc dữ liệu
str(Data)
## tibble [100,000 × 20] (S3: tbl_df/tbl/data.frame)
##  $ Employee_ID                : num [1:100000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Department                 : chr [1:100000] "IT" "Finance" "Finance" "Customer Support" ...
##  $ Gender                     : chr [1:100000] "Male" "Male" "Male" "Female" ...
##  $ Age                        : num [1:100000] 55 29 55 48 36 43 37 55 55 45 ...
##  $ Job_Title                  : chr [1:100000] "Specialist" "Developer" "Specialist" "Analyst" ...
##  $ Hire_Date                  : Date[1:100000], format: "2022-01-19" "2024-04-18" ...
##  $ Years_At_Company           : num [1:100000] 2 0 8 7 3 8 1 9 1 7 ...
##  $ Education_Level            : chr [1:100000] "High School" "High School" "High School" "Bachelor" ...
##  $ Performance_Score          : num [1:100000] 5 5 3 2 2 3 5 2 2 1 ...
##  $ Monthly_Salary             : num [1:100000] 6750 7500 5850 4800 4800 7800 5250 7200 4200 6050 ...
##  $ Work_Hours_Per_Week        : num [1:100000] 33 34 37 52 38 46 55 42 51 41 ...
##  $ Projects_Handled           : num [1:100000] 32 34 27 10 11 31 20 46 23 33 ...
##  $ Overtime_Hours             : num [1:100000] 22 13 6 28 29 8 29 7 21 2 ...
##  $ Sick_Days                  : num [1:100000] 2 14 3 12 13 0 2 8 14 6 ...
##  $ Remote_Work_Frequency      : num [1:100000] 0 100 50 100 100 100 0 100 0 75 ...
##  $ Team_Size                  : num [1:100000] 14 12 10 10 15 15 16 7 1 4 ...
##  $ Training_Hours             : num [1:100000] 66 61 1 0 9 95 27 64 0 53 ...
##  $ Promotions                 : num [1:100000] 0 2 0 1 1 0 0 0 1 2 ...
##  $ Employee_Satisfaction_Score: num [1:100000] 2.63 1.72 3.17 1.86 1.25 2.77 4.46 2.09 1.44 2.93 ...
##  $ Resigned                   : logi [1:100000] FALSE FALSE FALSE FALSE FALSE FALSE ...
# Tổng quan thống kê nhanh
summary(Data)
##   Employee_ID      Department           Gender               Age       
##  Min.   :     1   Length:100000      Length:100000      Min.   :22.00  
##  1st Qu.: 25001   Class :character   Class :character   1st Qu.:31.00  
##  Median : 50001   Mode  :character   Mode  :character   Median :41.00  
##  Mean   : 50001                                         Mean   :41.03  
##  3rd Qu.: 75000                                         3rd Qu.:51.00  
##  Max.   :100000                                         Max.   :60.00  
##   Job_Title           Hire_Date          Years_At_Company Education_Level   
##  Length:100000      Min.   :2014-09-07   Min.   : 0.000   Length:100000     
##  Class :character   1st Qu.:2017-03-20   1st Qu.: 2.000   Class :character  
##  Mode  :character   Median :2019-09-21   Median : 4.000   Mode  :character  
##                     Mean   :2019-09-14   Mean   : 4.476                     
##                     3rd Qu.:2022-03-14   3rd Qu.: 7.000                     
##                     Max.   :2024-09-03   Max.   :10.000                     
##  Performance_Score Monthly_Salary Work_Hours_Per_Week Projects_Handled
##  Min.   :1.000     Min.   :3850   Min.   :30.00       Min.   : 0.00   
##  1st Qu.:2.000     1st Qu.:5250   1st Qu.:37.00       1st Qu.:12.00   
##  Median :3.000     Median :6500   Median :45.00       Median :24.00   
##  Mean   :2.995     Mean   :6403   Mean   :44.96       Mean   :24.43   
##  3rd Qu.:4.000     3rd Qu.:7500   3rd Qu.:53.00       3rd Qu.:37.00   
##  Max.   :5.000     Max.   :9000   Max.   :60.00       Max.   :49.00   
##  Overtime_Hours    Sick_Days      Remote_Work_Frequency   Team_Size    
##  Min.   : 0.00   Min.   : 0.000   Min.   :  0.00        Min.   : 1.00  
##  1st Qu.: 7.00   1st Qu.: 3.000   1st Qu.: 25.00        1st Qu.: 5.00  
##  Median :15.00   Median : 7.000   Median : 50.00        Median :10.00  
##  Mean   :14.51   Mean   : 7.009   Mean   : 50.09        Mean   :10.01  
##  3rd Qu.:22.00   3rd Qu.:11.000   3rd Qu.: 75.00        3rd Qu.:15.00  
##  Max.   :29.00   Max.   :14.000   Max.   :100.00        Max.   :19.00  
##  Training_Hours    Promotions     Employee_Satisfaction_Score  Resigned      
##  Min.   : 0.00   Min.   :0.0000   Min.   :1.000               Mode :logical  
##  1st Qu.:25.00   1st Qu.:0.0000   1st Qu.:2.010               FALSE:89990    
##  Median :49.00   Median :1.0000   Median :3.000               TRUE :10010    
##  Mean   :49.51   Mean   :0.9997   Mean   :2.999                              
##  3rd Qu.:75.00   3rd Qu.:2.0000   3rd Qu.:3.990                              
##  Max.   :99.00   Max.   :2.0000   Max.   :5.000

1.2. Thong ke mo ta chi tiet tung bien

library(dplyr)
library(psych)
## Warning: package 'psych' was built under R version 4.5.1
library(moments)

# --- XÁC ĐỊNH DANH SÁCH BIẾN SỐ ---
num_vars <- names(Data)[sapply(Data, is.numeric)]

# --- HÀM THỐNG KÊ MÔ TẢ CHO 1 BIẾN ---
describe_one_var <- function(x) {
  x_no_na <- na.omit(x)
  data.frame(
    Min = min(x_no_na),
    Max = max(x_no_na),
    Mean = mean(x_no_na),
    Median = median(x_no_na),
    SD = sd(x_no_na),
    Variance = var(x_no_na),
    Skewness = skewness(x_no_na),
    Kurtosis = kurtosis(x_no_na)
  )
}

# --- TẠO DANH SÁCH BẢNG THỐNG KÊ CHO TỪNG BIẾN ---
desc_list <- lapply(num_vars, function(var) {
  stats <- describe_one_var(Data[[var]])
  list(Variable = var, Summary = stats)
})

# --- IN RA MỖI BẢNG RIÊNG ---
for (item in desc_list) {
  cat("\n====================================\n")
  cat("Biến:", item$Variable, "\n")
  print(item$Summary)
}
## 
## ====================================
## Biến: Employee_ID 
##   Min   Max    Mean  Median       SD  Variance Skewness Kurtosis
## 1   1 1e+05 50000.5 50000.5 28867.66 833341667        0      1.8
## 
## ====================================
## Biến: Age 
##   Min Max     Mean Median       SD Variance     Skewness Kurtosis
## 1  22  60 41.02941     41 11.24412 126.4302 -0.006169566 1.796472
## 
## ====================================
## Biến: Years_At_Company 
##   Min Max    Mean Median       SD Variance   Skewness Kurtosis
## 1   0  10 4.47607      4 2.869336  8.23309 0.01121056 1.778282
## 
## ====================================
## Biến: Performance_Score 
##   Min Max    Mean Median       SD Variance    Skewness Kurtosis
## 1   1   5 2.99543      3 1.414726 2.001449 0.004008424 1.699362
## 
## ====================================
## Biến: Monthly_Salary 
##    Min  Max     Mean Median       SD Variance  Skewness Kurtosis
## 1 3850 9000 6403.211   6500 1372.509  1883780 0.1012893 2.124993
## 
## ====================================
## Biến: Work_Hours_Per_Week 
##   Min Max     Mean Median       SD Variance    Skewness Kurtosis
## 1  30  60 44.95695     45 8.942003 79.95942 0.009620887 1.795712
## 
## ====================================
## Biến: Projects_Handled 
##   Min Max     Mean Median       SD Variance    Skewness Kurtosis
## 1   0  49 24.43117     24 14.46958 209.3689 0.009681863 1.791757
## 
## ====================================
## Biến: Overtime_Hours 
##   Min Max     Mean Median       SD Variance     Skewness Kurtosis
## 1   0  29 14.51493     15 8.664026 75.06535 -0.001166502 1.796839
## 
## ====================================
## Biến: Sick_Days 
##   Min Max    Mean Median       SD Variance     Skewness Kurtosis
## 1   0  14 7.00855      7 4.331591 18.76268 -0.003320354 1.783845
## 
## ====================================
## Biến: Remote_Work_Frequency 
##   Min Max    Mean Median       SD Variance     Skewness Kurtosis
## 1   0 100 50.0905     50 35.35116 1249.704 -0.001900944 1.697277
## 
## ====================================
## Biến: Team_Size 
##   Min Max     Mean Median       SD Variance      Skewness Kurtosis
## 1   1  19 10.01356     10 5.495405 30.19948 -0.0005922356 1.788459
## 
## ====================================
## Biến: Training_Hours 
##   Min Max     Mean Median       SD Variance      Skewness Kurtosis
## 1   0  99 49.50606     49 28.89038 834.6542 -0.0006484809 1.800442
## 
## ====================================
## Biến: Promotions 
##   Min Max    Mean Median        SD  Variance     Skewness Kurtosis
## 1   0   2 0.99972      1 0.8158717 0.6656466 0.0005139954 1.502314
## 
## ====================================
## Biến: Employee_Satisfaction_Score 
##   Min Max     Mean Median       SD Variance    Skewness Kurtosis
## 1   1   5 2.999088      3 1.150719 1.324155 0.001321039 1.809045

1.3. Lap bang tan so

# --- BẢNG TẦN SỐ CHO TỪNG BIẾN (TRỪ BIẾN Hire_Date) ---
freq_tables <- lapply(setdiff(names(Data), "Hire_Date"), function(var) {
  col <- Data[[var]]
  
  if (is.numeric(col)) {
    # Tạo 10 khoảng giá trị đẹp cho biến định lượng
    breaks <- pretty(range(col, na.rm = TRUE), n = 10)
    freq <- table(cut(col, breaks = breaks, include.lowest = TRUE))
  } else {
    freq <- table(col)
  }
  
  # Tạo bảng tần số & phần trăm
  freq_df <- as.data.frame(freq)
  names(freq_df) <- c("Value", "Frequency")
  freq_df$Percent <- round(freq_df$Frequency / sum(freq_df$Frequency) * 100, 2)
  freq_df$CumFreq <- cumsum(freq_df$Frequency)
  freq_df$CumPercent <- round(cumsum(freq_df$Percent), 2)
  
  list(Variable = var, FrequencyTable = freq_df)
})

# --- IN RA BẢNG TẦN SỐ ---
for (tbl in freq_tables) {
  cat("\n====================================\n")
  cat("Biến:", tbl$Variable, "\n")
  print(tbl$FrequencyTable)
}
## 
## ====================================
## Biến: Employee_ID 
##            Value Frequency Percent CumFreq CumPercent
## 1      [0,1e+04]     10000      10   10000         10
## 2  (1e+04,2e+04]     10000      10   20000         20
## 3  (2e+04,3e+04]     10000      10   30000         30
## 4  (3e+04,4e+04]     10000      10   40000         40
## 5  (4e+04,5e+04]     10000      10   50000         50
## 6  (5e+04,6e+04]     10000      10   60000         60
## 7  (6e+04,7e+04]     10000      10   70000         70
## 8  (7e+04,8e+04]     10000      10   80000         80
## 9  (8e+04,9e+04]     10000      10   90000         90
## 10 (9e+04,1e+05]     10000      10  100000        100
## 
## ====================================
## Biến: Department 
##              Value Frequency Percent CumFreq CumPercent
## 1 Customer Support     11116   11.12   11116      11.12
## 2      Engineering     10956   10.96   22072      22.08
## 3          Finance     11200   11.20   33272      33.28
## 4               HR     10960   10.96   44232      44.24
## 5               IT     11131   11.13   55363      55.37
## 6            Legal     11118   11.12   66481      66.49
## 7        Marketing     11216   11.22   77697      77.71
## 8       Operations     11181   11.18   88878      88.89
## 9            Sales     11122   11.12  100000     100.01
## 
## ====================================
## Biến: Gender 
##    Value Frequency Percent CumFreq CumPercent
## 1 Female     48001   48.00   48001      48.00
## 2   Male     48031   48.03   96032      96.03
## 3  Other      3968    3.97  100000     100.00
## 
## ====================================
## Biến: Age 
##     Value Frequency Percent CumFreq CumPercent
## 1 [20,25]     10178   10.18   10178      10.18
## 2 (25,30]     12853   12.85   23031      23.03
## 3 (30,35]     12704   12.70   35735      35.73
## 4 (35,40]     12831   12.83   48566      48.56
## 5 (40,45]     12756   12.76   61322      61.32
## 6 (45,50]     12965   12.96   74287      74.28
## 7 (50,55]     12926   12.93   87213      87.21
## 8 (55,60]     12787   12.79  100000     100.00
## 
## ====================================
## Biến: Job_Title 
##        Value Frequency Percent CumFreq CumPercent
## 1    Analyst     14261   14.26   14261      14.26
## 2 Consultant     14210   14.21   28471      28.47
## 3  Developer     14195   14.19   42666      42.66
## 4   Engineer     14217   14.22   56883      56.88
## 5    Manager     14325   14.32   71208      71.20
## 6 Specialist     14507   14.51   85715      85.71
## 7 Technician     14285   14.29  100000     100.00
## 
## ====================================
## Biến: Years_At_Company 
##     Value Frequency Percent CumFreq CumPercent
## 1   [0,1]     20101   20.10   20101      20.10
## 2   (1,2]     10272   10.27   30373      30.37
## 3   (2,3]      9935    9.93   40308      40.30
## 4   (3,4]     10103   10.10   50411      50.40
## 5   (4,5]      9892    9.89   60303      60.29
## 6   (5,6]     10068   10.07   70371      70.36
## 7   (6,7]      9892    9.89   80263      80.25
## 8   (7,8]      9961    9.96   90224      90.21
## 9   (8,9]      9732    9.73   99956      99.94
## 10 (9,10]        44    0.04  100000      99.98
## 
## ====================================
## Biến: Education_Level 
##         Value Frequency Percent CumFreq CumPercent
## 1    Bachelor     50041   50.04   50041      50.04
## 2 High School     30004   30.00   80045      80.04
## 3      Master     14904   14.90   94949      94.94
## 4         PhD      5051    5.05  100000      99.99
## 
## ====================================
## Biến: Performance_Score 
##     Value Frequency Percent CumFreq CumPercent
## 1 [1,1.5]     20120   20.12   20120      20.12
## 2 (1.5,2]     20013   20.01   40133      40.13
## 3 (2,2.5]         0    0.00   40133      40.13
## 4 (2.5,3]     19999   20.00   60132      60.13
## 5 (3,3.5]         0    0.00   60132      60.13
## 6 (3.5,4]     19940   19.94   80072      80.07
## 7 (4,4.5]         0    0.00   80072      80.07
## 8 (4.5,5]     19928   19.93  100000     100.00
## 
## ====================================
## Biến: Monthly_Salary 
##              Value Frequency Percent CumFreq CumPercent
## 1  [3.5e+03,4e+03]      2855    2.86    2855       2.86
## 2  (4e+03,4.5e+03]      5785    5.78    8640       8.64
## 3  (4.5e+03,5e+03]     11489   11.49   20129      20.13
## 4  (5e+03,5.5e+03]     11475   11.47   31604      31.60
## 5  (5.5e+03,6e+03]     11298   11.30   42902      42.90
## 6  (6e+03,6.5e+03]      8667    8.67   51569      51.57
## 7  (6.5e+03,7e+03]     14299   14.30   65868      65.87
## 8  (7e+03,7.5e+03]     11272   11.27   77140      77.14
## 9  (7.5e+03,8e+03]      8571    8.57   85711      85.71
## 10 (8e+03,8.5e+03]      8616    8.62   94327      94.33
## 11 (8.5e+03,9e+03]      5673    5.67  100000     100.00
## 
## ====================================
## Biến: Work_Hours_Per_Week 
##     Value Frequency Percent CumFreq CumPercent
## 1 [30,35]     19463   19.46   19463      19.46
## 2 (35,40]     16313   16.31   35776      35.77
## 3 (40,45]     16169   16.17   51945      51.94
## 4 (45,50]     15921   15.92   67866      67.86
## 5 (50,55]     16081   16.08   83947      83.94
## 6 (55,60]     16053   16.05  100000      99.99
## 
## ====================================
## Biến: Projects_Handled 
##      Value Frequency Percent CumFreq CumPercent
## 1    [0,5]     12054   12.05   12054      12.05
## 2   (5,10]     10253   10.25   22307      22.30
## 3  (10,15]     10071   10.07   32378      32.37
## 4  (15,20]      9992    9.99   42370      42.36
## 5  (20,25]      9836    9.84   52206      52.20
## 6  (25,30]      9890    9.89   62096      62.09
## 7  (30,35]      9904    9.90   72000      71.99
## 8  (35,40]      9980    9.98   81980      81.97
## 9  (40,45]      9895    9.89   91875      91.86
## 10 (45,50]      8125    8.12  100000      99.98
## 
## ====================================
## Biến: Overtime_Hours 
##     Value Frequency Percent CumFreq CumPercent
## 1   [0,5]     20005   20.00   20005      20.00
## 2  (5,10]     16580   16.58   36585      36.58
## 3 (10,15]     16703   16.70   53288      53.28
## 4 (15,20]     16590   16.59   69878      69.87
## 5 (20,25]     16693   16.69   86571      86.56
## 6 (25,30]     13429   13.43  100000      99.99
## 
## ====================================
## Biến: Sick_Days 
##      Value Frequency Percent CumFreq CumPercent
## 1    [0,1]     13384   13.38   13384      13.38
## 2    (1,2]      6763    6.76   20147      20.14
## 3    (2,3]      6617    6.62   26764      26.76
## 4    (3,4]      6587    6.59   33351      33.35
## 5    (4,5]      6585    6.59   39936      39.94
## 6    (5,6]      6563    6.56   46499      46.50
## 7    (6,7]      6712    6.71   53211      53.21
## 8    (7,8]      6633    6.63   59844      59.84
## 9    (8,9]      6671    6.67   66515      66.51
## 10  (9,10]      6671    6.67   73186      73.18
## 11 (10,11]      6659    6.66   79845      79.84
## 12 (11,12]      6632    6.63   86477      86.47
## 13 (12,13]      6794    6.79   93271      93.26
## 14 (13,14]      6729    6.73  100000      99.99
## 
## ====================================
## Biến: Remote_Work_Frequency 
##       Value Frequency Percent CumFreq CumPercent
## 1    [0,10]     19837   19.84   19837      19.84
## 2   (10,20]         0    0.00   19837      19.84
## 3   (20,30]     20235   20.24   40072      40.08
## 4   (30,40]         0    0.00   40072      40.08
## 5   (40,50]     19706   19.71   59778      59.79
## 6   (50,60]         0    0.00   59778      59.79
## 7   (60,70]         0    0.00   59778      59.79
## 8   (70,80]     20173   20.17   79951      79.96
## 9   (80,90]         0    0.00   79951      79.96
## 10 (90,100]     20049   20.05  100000     100.01
## 
## ====================================
## Biến: Team_Size 
##      Value Frequency Percent CumFreq CumPercent
## 1    [0,2]     10559   10.56   10559      10.56
## 2    (2,4]     10607   10.61   21166      21.17
## 3    (4,6]     10443   10.44   31609      31.61
## 4    (6,8]     10460   10.46   42069      42.07
## 5   (8,10]     10410   10.41   52479      52.48
## 6  (10,12]     10567   10.57   63046      63.05
## 7  (12,14]     10443   10.44   73489      73.49
## 8  (14,16]     10570   10.57   84059      84.06
## 9  (16,18]     10473   10.47   94532      94.53
## 10 (18,20]      5468    5.47  100000     100.00
## 
## ====================================
## Biến: Training_Hours 
##       Value Frequency Percent CumFreq CumPercent
## 1    [0,10]     11138   11.14   11138      11.14
## 2   (10,20]      9896    9.90   21034      21.04
## 3   (20,30]      9870    9.87   30904      30.91
## 4   (30,40]     10073   10.07   40977      40.98
## 5   (40,50]     10132   10.13   51109      51.11
## 6   (50,60]     10064   10.06   61173      61.17
## 7   (60,70]      9706    9.71   70879      70.88
## 8   (70,80]     10049   10.05   80928      80.93
## 9   (80,90]      9955    9.96   90883      90.89
## 10 (90,100]      9117    9.12  100000     100.01
## 
## ====================================
## Biến: Promotions 
##        Value Frequency Percent CumFreq CumPercent
## 1    [0,0.2]     33296   33.30   33296      33.30
## 2  (0.2,0.4]         0    0.00   33296      33.30
## 3  (0.4,0.6]         0    0.00   33296      33.30
## 4  (0.6,0.8]         0    0.00   33296      33.30
## 5    (0.8,1]     33436   33.44   66732      66.74
## 6    (1,1.2]         0    0.00   66732      66.74
## 7  (1.2,1.4]         0    0.00   66732      66.74
## 8  (1.4,1.6]         0    0.00   66732      66.74
## 9  (1.6,1.8]         0    0.00   66732      66.74
## 10   (1.8,2]     33268   33.27  100000     100.01
## 
## ====================================
## Biến: Employee_Satisfaction_Score 
##     Value Frequency Percent CumFreq CumPercent
## 1 [1,1.5]     12513   12.51   12513      12.51
## 2 (1.5,2]     12379   12.38   24892      24.89
## 3 (2,2.5]     12699   12.70   37591      37.59
## 4 (2.5,3]     12617   12.62   50208      50.21
## 5 (3,3.5]     12565   12.57   62773      62.78
## 6 (3.5,4]     12492   12.49   75265      75.27
## 7 (4,4.5]     12563   12.56   87828      87.83
## 8 (4.5,5]     12172   12.17  100000     100.00
## 
## ====================================
## Biến: Resigned 
##   Value Frequency Percent CumFreq CumPercent
## 1 FALSE     89990   89.99   89990      89.99
## 2  TRUE     10010   10.01  100000     100.00

1.4. Phan loai bien theo kieu du lieu

# Đếm số biến định lượng
num_vars <- sapply(Data, is.numeric)
sum(num_vars)
## [1] 14
# Đếm số biến định tính
cat_vars <- sapply(Data, function(x) is.character(x) | is.factor(x))
sum(cat_vars)
## [1] 4
# Đếm số biến thời gian
date_vars <- sapply(Data, function(x) inherits(x, "Date") | inherits(x, "POSIXct"))
sum(date_vars)
## [1] 1
# Liệt kê tên biến theo loại
names(Data)[num_vars]    # Định lượng
##  [1] "Employee_ID"                 "Age"                        
##  [3] "Years_At_Company"            "Performance_Score"          
##  [5] "Monthly_Salary"              "Work_Hours_Per_Week"        
##  [7] "Projects_Handled"            "Overtime_Hours"             
##  [9] "Sick_Days"                   "Remote_Work_Frequency"      
## [11] "Team_Size"                   "Training_Hours"             
## [13] "Promotions"                  "Employee_Satisfaction_Score"
names(Data)[cat_vars]    # Định tính
## [1] "Department"      "Gender"          "Job_Title"       "Education_Level"
names(Data)[date_vars]   # Kiểu thời gian
## [1] "Hire_Date"

Nhận xét: Bộ dữ liệu Data gồm 100.000 quan sát và 20 biến(Department, Gender, Job_Title, Education_Level, Age, Years_At_Company, Performance_Score, Monthly_Salary, Work_Hours_Per_Week, Projects_Handled, Overtime_Hours, Sick_Days, Remote_Work_Frequency, Team_Size, Training_Hours, Promotions, Resigned), chứa thông tin về nhân viên của một công ty.Trong đó gồm: 14 biến định lượng, 4 biến định tính và 1 biến thời gian.

1.5. Nhung thong tin lien quan den bo du lieu gom: so bien, so quan sat, so quan sat trung lap, so quan sat bi thieu.

# Tắt hiển thị dạng số khoa học
options(scipen = 999)

# Tính các thông tin cơ bản
so_bien <- ncol(Data)
so_quan_sat <- nrow(Data)
so_trung_lap <- sum(duplicated(Data))
so_thieu <- sum(is.na(Data))
ty_le_thieu <- round(so_thieu / (so_bien * so_quan_sat) * 100, 2)

# Tổng hợp kết quả thành bảng
thong_tin_co_ban <- data.frame(
  Chi_tieu = c(
    "Số biến (cột)",
    "Số quan sát (dòng)",
    "Số quan sát trùng lặp",
    "Số quan sát bị thiếu",
    "Tỷ lệ quan sát bị thiếu (%)"
  ),
  Gia_tri = c(so_bien, so_quan_sat, so_trung_lap, so_thieu, ty_le_thieu)
)

print(thong_tin_co_ban)
##                      Chi_tieu Gia_tri
## 1               Số biến (cột)      20
## 2          Số quan sát (dòng)  100000
## 3       Số quan sát trùng lặp       0
## 4        Số quan sát bị thiếu       0
## 5 Tỷ lệ quan sát bị thiếu (%)       0

Nhận xét: Kết quả cho thấy không có quan sát trùng lặp và không có giá trị bị thiếu, tỷ lệ thiếu bằng 0%. Điều này chứng tỏ dữ liệu đã được làm sạch tốt, đảm bảo tính toàn vẹn và độ tin cậy cao, thuận lợi cho việc phân tích mô tả, khám phá và mô hình hóa ở các bước tiếp theo.

1.6. Y nghia cua cac bien

# Tóm tắt ý nghĩa cơ bản (cấu trúc dữ liệu)
library(dplyr)
thong_tin_bien <- Data %>%
  summarise(across(everything(), list(
    Kieu_du_lieu = ~class(.x)[1],
    So_thieu = ~sum(is.na(.x)),
    So_gia_tri_phan_biet = ~n_distinct(.x)
  ), .names = "{.col}_{.fn}"))

# Chuyển từ dạng wide sang long để dễ đọc
thong_tin_bien_long <- data.frame(
  Bien = names(Data),
  Kieu_du_lieu = as.character(thong_tin_bien[1, seq(1, ncol(thong_tin_bien), 3)]),
  So_thieu = as.numeric(thong_tin_bien[1, seq(2, ncol(thong_tin_bien), 3)]),
  So_gia_tri_phan_biet = as.numeric(thong_tin_bien[1, seq(3, ncol(thong_tin_bien), 3)])
)

print(thong_tin_bien_long)
##                           Bien Kieu_du_lieu So_thieu So_gia_tri_phan_biet
## 1                  Employee_ID      numeric        0               100000
## 2                   Department    character        0                    9
## 3                       Gender    character        0                    3
## 4                          Age      numeric        0                   39
## 5                    Job_Title    character        0                    7
## 6                    Hire_Date         Date        0                 3650
## 7             Years_At_Company      numeric        0                   11
## 8              Education_Level    character        0                    4
## 9            Performance_Score      numeric        0                    5
## 10              Monthly_Salary      numeric        0                   28
## 11         Work_Hours_Per_Week      numeric        0                   31
## 12            Projects_Handled      numeric        0                   50
## 13              Overtime_Hours      numeric        0                   30
## 14                   Sick_Days      numeric        0                   15
## 15       Remote_Work_Frequency      numeric        0                    5
## 16                   Team_Size      numeric        0                   19
## 17              Training_Hours      numeric        0                  100
## 18                  Promotions      numeric        0                    3
## 19 Employee_Satisfaction_Score      numeric        0                  401
## 20                    Resigned      logical        0                    2
# Giải thích ý nghĩa các biến trong bộ dữ liệu Data
variable_meaning <- data.frame(
  Variable = c(
    "Employee_ID",
    "Department",
    "Gender",
    "Age",
    "Job_Title",
    "Hire_Date",
    "Years_At_Company",
    "Education_Level",
    "Performance_Score",
    "Monthly_Salary",
    "Work_Hours_Per_Week",
    "Projects_Handled",
    "Overtime_Hours",
    "Sick_Days",
    "Remote_Work_Frequency",
    "Team_Size",
    "Training_Hours",
    "Promotions",
    "Employee_Satisfaction_Score",
    "Resigned"
  ),
  
  Meaning = c(
    "Mã định danh duy nhất của mỗi nhân viên",
    "Phòng ban mà nhân viên đang làm việc (như IT, HR, Sales,...)",
    "Giới tính của nhân viên (Nam/Nữ)",
    "Tuổi của nhân viên (tính bằng năm)",
    "Chức danh công việc hiện tại của nhân viên",
    "Ngày bắt đầu làm việc tại công ty",
    "Số năm nhân viên đã làm việc tại công ty",
    "Trình độ học vấn cao nhất của nhân viên (Cao đẳng, Đại học, Sau đại học,...)",
    "Điểm đánh giá hiệu suất làm việc (từ 1 đến 5)",
    "Mức lương hàng tháng của nhân viên",
    "Số giờ làm việc trung bình mỗi tuần của nhân viên",
    "Số dự án mà nhân viên đã hoặc đang phụ trách",
    "Số giờ làm thêm (overtime) trung bình mỗi tháng",
    "Số ngày nghỉ ốm của nhân viên trong năm",
    "Tần suất làm việc từ xa",
    "Quy mô nhóm hoặc đội mà nhân viên tham gia",
    "Tổng số giờ tham gia các khóa đào tạo",
    "Số lần được thăng chức của nhân viên",
    "Mức độ hài lòng của nhân viên (từ 0 đến 5)",
    "Trạng thái nghỉ việc của nhân viên (TRUE = đã nghỉ, FALSE = còn làm)"
  ),
  
  stringsAsFactors = FALSE
)

# Hiển thị bảng đẹp
library(knitr)
kable(variable_meaning, booktabs = TRUE, caption = "Giải thích ý nghĩa các biến trong bộ dữ liệu nhân sự")
Giải thích ý nghĩa các biến trong bộ dữ liệu nhân sự
Variable Meaning
Employee_ID Mã định danh duy nhất của mỗi nhân viên
Department Phòng ban mà nhân viên đang làm việc (như IT, HR, Sales,…)
Gender Giới tính của nhân viên (Nam/Nữ)
Age Tuổi của nhân viên (tính bằng năm)
Job_Title Chức danh công việc hiện tại của nhân viên
Hire_Date Ngày bắt đầu làm việc tại công ty
Years_At_Company Số năm nhân viên đã làm việc tại công ty
Education_Level Trình độ học vấn cao nhất của nhân viên (Cao đẳng, Đại học, Sau đại học,…)
Performance_Score Điểm đánh giá hiệu suất làm việc (từ 1 đến 5)
Monthly_Salary Mức lương hàng tháng của nhân viên
Work_Hours_Per_Week Số giờ làm việc trung bình mỗi tuần của nhân viên
Projects_Handled Số dự án mà nhân viên đã hoặc đang phụ trách
Overtime_Hours Số giờ làm thêm (overtime) trung bình mỗi tháng
Sick_Days Số ngày nghỉ ốm của nhân viên trong năm
Remote_Work_Frequency Tần suất làm việc từ xa
Team_Size Quy mô nhóm hoặc đội mà nhân viên tham gia
Training_Hours Tổng số giờ tham gia các khóa đào tạo
Promotions Số lần được thăng chức của nhân viên
Employee_Satisfaction_Score Mức độ hài lòng của nhân viên (từ 0 đến 5)
Resigned Trạng thái nghỉ việc của nhân viên (TRUE = đã nghỉ, FALSE = còn làm)

1.7. Chi tieu thong ke bien dinh tinh va dinh luong

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.1
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(dplyr)

# --- DUYỆT QUA TỪNG BIẾN (TRỪ BIẾN Employee_ID) ---
for (var in setdiff(names(Data), "Employee_ID")) {
  col <- Data[[var]]
  
  cat("\n====================================\n")
  cat("Biến:", var, "\n")
  
  # --- BIẾN ĐỊNH TÍNH ---
  if (is.factor(col) || is.character(col)) {
    freq_df <- as.data.frame(table(col))
    names(freq_df) <- c("Category", "Frequency")
    freq_df <- freq_df %>%
      mutate(Percent = round(Frequency / sum(Frequency) * 100, 2))
    
    print(freq_df)
    
    p <- ggplot(freq_df, aes(x = reorder(Category, -Percent), y = Percent, fill = Category)) +
      geom_bar(stat = "identity") +
      geom_text(aes(label = paste0(Percent, "%")), vjust = -0.5, size = 3.5) +
      labs(title = paste("Phân bố (%) của", var),
           x = var,
           y = "Tỷ lệ (%)") +
      theme_minimal() +
      theme(legend.position = "none") +
      coord_cartesian(ylim = c(0, max(freq_df$Percent) * 1.2))
    
    # 👉 ép hiển thị trong cửa sổ Plots
    print(p)

  # --- BIẾN ĐỊNH LƯỢNG ---
  } else if (is.numeric(col)) {
    breaks <- pretty(range(col, na.rm = TRUE), n = 10)
    freq <- table(cut(col, breaks = breaks, include.lowest = TRUE))
    freq_df <- as.data.frame(freq)
    names(freq_df) <- c("Range", "Frequency")
    freq_df <- freq_df %>%
      mutate(Percent = round(Frequency / sum(Frequency) * 100, 2))
    
    print(freq_df)
    
    p <- ggplot(freq_df, aes(x = Range, y = Percent)) +
      geom_bar(stat = "identity", fill = "#69b3a2", color = "black", alpha = 0.8) +
      geom_text(aes(label = paste0(Percent, "%")), vjust = -0.5, size = 3.5) +
      labs(title = paste("Phân bố (%) theo nhóm của", var),
           x = var,
           y = "Tỷ lệ (%)") +
      theme_minimal() +
      theme(axis.text.x = element_text(angle = 45, hjust = 1))
    
    # 👉 ép hiển thị
    print(p)
  }
}
## 
## ====================================
## Biến: Department 
##           Category Frequency Percent
## 1 Customer Support     11116   11.12
## 2      Engineering     10956   10.96
## 3          Finance     11200   11.20
## 4               HR     10960   10.96
## 5               IT     11131   11.13
## 6            Legal     11118   11.12
## 7        Marketing     11216   11.22
## 8       Operations     11181   11.18
## 9            Sales     11122   11.12

## 
## ====================================
## Biến: Gender 
##   Category Frequency Percent
## 1   Female     48001   48.00
## 2     Male     48031   48.03
## 3    Other      3968    3.97

## 
## ====================================
## Biến: Age 
##     Range Frequency Percent
## 1 [20,25]     10178   10.18
## 2 (25,30]     12853   12.85
## 3 (30,35]     12704   12.70
## 4 (35,40]     12831   12.83
## 5 (40,45]     12756   12.76
## 6 (45,50]     12965   12.96
## 7 (50,55]     12926   12.93
## 8 (55,60]     12787   12.79

## 
## ====================================
## Biến: Job_Title 
##     Category Frequency Percent
## 1    Analyst     14261   14.26
## 2 Consultant     14210   14.21
## 3  Developer     14195   14.19
## 4   Engineer     14217   14.22
## 5    Manager     14325   14.32
## 6 Specialist     14507   14.51
## 7 Technician     14285   14.29

## 
## ====================================
## Biến: Hire_Date 
## 
## ====================================
## Biến: Years_At_Company 
##     Range Frequency Percent
## 1   [0,1]     20101   20.10
## 2   (1,2]     10272   10.27
## 3   (2,3]      9935    9.93
## 4   (3,4]     10103   10.10
## 5   (4,5]      9892    9.89
## 6   (5,6]     10068   10.07
## 7   (6,7]      9892    9.89
## 8   (7,8]      9961    9.96
## 9   (8,9]      9732    9.73
## 10 (9,10]        44    0.04

## 
## ====================================
## Biến: Education_Level 
##      Category Frequency Percent
## 1    Bachelor     50041   50.04
## 2 High School     30004   30.00
## 3      Master     14904   14.90
## 4         PhD      5051    5.05

## 
## ====================================
## Biến: Performance_Score 
##     Range Frequency Percent
## 1 [1,1.5]     20120   20.12
## 2 (1.5,2]     20013   20.01
## 3 (2,2.5]         0    0.00
## 4 (2.5,3]     19999   20.00
## 5 (3,3.5]         0    0.00
## 6 (3.5,4]     19940   19.94
## 7 (4,4.5]         0    0.00
## 8 (4.5,5]     19928   19.93

## 
## ====================================
## Biến: Monthly_Salary 
##              Range Frequency Percent
## 1  [3.5e+03,4e+03]      2855    2.86
## 2  (4e+03,4.5e+03]      5785    5.78
## 3  (4.5e+03,5e+03]     11489   11.49
## 4  (5e+03,5.5e+03]     11475   11.47
## 5  (5.5e+03,6e+03]     11298   11.30
## 6  (6e+03,6.5e+03]      8667    8.67
## 7  (6.5e+03,7e+03]     14299   14.30
## 8  (7e+03,7.5e+03]     11272   11.27
## 9  (7.5e+03,8e+03]      8571    8.57
## 10 (8e+03,8.5e+03]      8616    8.62
## 11 (8.5e+03,9e+03]      5673    5.67

## 
## ====================================
## Biến: Work_Hours_Per_Week 
##     Range Frequency Percent
## 1 [30,35]     19463   19.46
## 2 (35,40]     16313   16.31
## 3 (40,45]     16169   16.17
## 4 (45,50]     15921   15.92
## 5 (50,55]     16081   16.08
## 6 (55,60]     16053   16.05

## 
## ====================================
## Biến: Projects_Handled 
##      Range Frequency Percent
## 1    [0,5]     12054   12.05
## 2   (5,10]     10253   10.25
## 3  (10,15]     10071   10.07
## 4  (15,20]      9992    9.99
## 5  (20,25]      9836    9.84
## 6  (25,30]      9890    9.89
## 7  (30,35]      9904    9.90
## 8  (35,40]      9980    9.98
## 9  (40,45]      9895    9.89
## 10 (45,50]      8125    8.12

## 
## ====================================
## Biến: Overtime_Hours 
##     Range Frequency Percent
## 1   [0,5]     20005   20.00
## 2  (5,10]     16580   16.58
## 3 (10,15]     16703   16.70
## 4 (15,20]     16590   16.59
## 5 (20,25]     16693   16.69
## 6 (25,30]     13429   13.43

## 
## ====================================
## Biến: Sick_Days 
##      Range Frequency Percent
## 1    [0,1]     13384   13.38
## 2    (1,2]      6763    6.76
## 3    (2,3]      6617    6.62
## 4    (3,4]      6587    6.59
## 5    (4,5]      6585    6.59
## 6    (5,6]      6563    6.56
## 7    (6,7]      6712    6.71
## 8    (7,8]      6633    6.63
## 9    (8,9]      6671    6.67
## 10  (9,10]      6671    6.67
## 11 (10,11]      6659    6.66
## 12 (11,12]      6632    6.63
## 13 (12,13]      6794    6.79
## 14 (13,14]      6729    6.73

## 
## ====================================
## Biến: Remote_Work_Frequency 
##       Range Frequency Percent
## 1    [0,10]     19837   19.84
## 2   (10,20]         0    0.00
## 3   (20,30]     20235   20.24
## 4   (30,40]         0    0.00
## 5   (40,50]     19706   19.71
## 6   (50,60]         0    0.00
## 7   (60,70]         0    0.00
## 8   (70,80]     20173   20.17
## 9   (80,90]         0    0.00
## 10 (90,100]     20049   20.05

## 
## ====================================
## Biến: Team_Size 
##      Range Frequency Percent
## 1    [0,2]     10559   10.56
## 2    (2,4]     10607   10.61
## 3    (4,6]     10443   10.44
## 4    (6,8]     10460   10.46
## 5   (8,10]     10410   10.41
## 6  (10,12]     10567   10.57
## 7  (12,14]     10443   10.44
## 8  (14,16]     10570   10.57
## 9  (16,18]     10473   10.47
## 10 (18,20]      5468    5.47

## 
## ====================================
## Biến: Training_Hours 
##       Range Frequency Percent
## 1    [0,10]     11138   11.14
## 2   (10,20]      9896    9.90
## 3   (20,30]      9870    9.87
## 4   (30,40]     10073   10.07
## 5   (40,50]     10132   10.13
## 6   (50,60]     10064   10.06
## 7   (60,70]      9706    9.71
## 8   (70,80]     10049   10.05
## 9   (80,90]      9955    9.96
## 10 (90,100]      9117    9.12

## 
## ====================================
## Biến: Promotions 
##        Range Frequency Percent
## 1    [0,0.2]     33296   33.30
## 2  (0.2,0.4]         0    0.00
## 3  (0.4,0.6]         0    0.00
## 4  (0.6,0.8]         0    0.00
## 5    (0.8,1]     33436   33.44
## 6    (1,1.2]         0    0.00
## 7  (1.2,1.4]         0    0.00
## 8  (1.4,1.6]         0    0.00
## 9  (1.6,1.8]         0    0.00
## 10   (1.8,2]     33268   33.27

## 
## ====================================
## Biến: Employee_Satisfaction_Score 
##     Range Frequency Percent
## 1 [1,1.5]     12513   12.51
## 2 (1.5,2]     12379   12.38
## 3 (2,2.5]     12699   12.70
## 4 (2.5,3]     12617   12.62
## 5 (3,3.5]     12565   12.57
## 6 (3.5,4]     12492   12.49
## 7 (4,4.5]     12563   12.56
## 8 (4.5,5]     12172   12.17

## 
## ====================================
## Biến: Resigned

2. Phan to cac bien

2.1. Phan to theo gioi tinh va nhom tuoi

# Tạo biến nhóm tuổi (phân tổ theo khoảng)
Data <- Data %>%
  mutate(Nhom_tuoi = cut(Age,
                         breaks = c(20, 30, 40, 50, 60),
                         labels = c("20-29", "30-39", "40-49", "50-59"),
                         right = FALSE))  # khoảng trái đóng, phải mở

# Phân tổ theo giới tính và nhóm tuổi
bang_phan_to <- Data %>%
  group_by(Gender, Nhom_tuoi) %>%
  summarise(
    So_luong = n(),
    Luong_TB = mean(as.numeric(Monthly_Salary), na.rm = TRUE),
    Diem_HL_TB = mean(as.numeric(Employee_Satisfaction_Score), na.rm = TRUE)
  ) %>%
  arrange(Gender, Nhom_tuoi)
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.
# In kết quả ra màn hình
print(bang_phan_to)
## # A tibble: 15 × 5
## # Groups:   Gender [3]
##    Gender Nhom_tuoi So_luong Luong_TB Diem_HL_TB
##    <chr>  <fct>        <int>    <dbl>      <dbl>
##  1 Female 20-29         9722    6403.       3.00
##  2 Female 30-39        12403    6400.       3.01
##  3 Female 40-49        12333    6414.       3.00
##  4 Female 50-59        12331    6400.       3.00
##  5 Female <NA>          1212    6434.       3.06
##  6 Male   20-29         9946    6398.       2.99
##  7 Male   30-39        12056    6399.       3.00
##  8 Male   40-49        12357    6394.       2.99
##  9 Male   50-59        12462    6404.       2.99
## 10 Male   <NA>          1210    6469.       3.03
## 11 Other  20-29          824    6392.       2.94
## 12 Other  30-39         1006    6414.       3.00
## 13 Other  40-49         1020    6427.       3.00
## 14 Other  50-59         1005    6423.       3.00
## 15 Other  <NA>           113    6405.       3.10

2.2. Phan to nam, 30-40 tuoi, bo phan IT, tang ca tren 10 tieng

# Lọc nhân viên nam trong bộ phận IT, độ tuổi 30–40 và tăng ca >10 tiếng
df_filtered <- Data %>%
  filter(
    between(Age, 30, 40),
    Gender == "Male",
    Department == "IT",
    Overtime_Hours > 10
  )

print(df_filtered)
## # A tibble: 972 × 21
##    Employee_ID Department Gender   Age Job_Title  Hire_Date  Years_At_Company
##          <dbl> <chr>      <chr>  <dbl> <chr>      <date>                <dbl>
##  1           7 IT         Male      37 Technician 2023-08-28                1
##  2         103 IT         Male      33 Consultant 2020-01-07                4
##  3         118 IT         Male      38 Consultant 2016-06-10                8
##  4         252 IT         Male      35 Consultant 2017-10-29                6
##  5         455 IT         Male      33 Developer  2019-08-10                5
##  6         465 IT         Male      40 Specialist 2018-05-30                6
##  7         538 IT         Male      35 Manager    2022-04-07                2
##  8         578 IT         Male      40 Specialist 2021-11-12                2
##  9         643 IT         Male      37 Manager    2015-07-09                9
## 10         688 IT         Male      32 Consultant 2016-05-29                8
## # ℹ 962 more rows
## # ℹ 14 more variables: Education_Level <chr>, Performance_Score <dbl>,
## #   Monthly_Salary <dbl>, Work_Hours_Per_Week <dbl>, Projects_Handled <dbl>,
## #   Overtime_Hours <dbl>, Sick_Days <dbl>, Remote_Work_Frequency <dbl>,
## #   Team_Size <dbl>, Training_Hours <dbl>, Promotions <dbl>,
## #   Employee_Satisfaction_Score <dbl>, Resigned <lgl>, Nhom_tuoi <fct>

2.3. Phan to chuc danh nha phat trien, trinh do thac si, diem hieu suat duoi 2, so ngay om tren 5

# Lọc dữ liệu theo tiêu chí học vấn, hiệu suất và số ngày ốm
df_filtered2 <- Data %>%
  filter(
    Job_Title == "Developer",
    Education_Level == "Master",
    Performance_Score < 2,
    Sick_Days > 5
  )

print(df_filtered2)
## # A tibble: 252 × 21
##    Employee_ID Department Gender   Age Job_Title Hire_Date  Years_At_Company
##          <dbl> <chr>      <chr>  <dbl> <chr>     <date>                <dbl>
##  1         338 Operations Female    55 Developer 2017-02-07                7
##  2         670 Legal      Male      47 Developer 2019-04-29                5
##  3         811 Sales      Female    24 Developer 2018-06-20                6
##  4         986 IT         Female    56 Developer 2020-07-31                4
##  5        1774 Finance    Male      45 Developer 2022-03-27                2
##  6        2191 Legal      Female    39 Developer 2016-05-06                8
##  7        2437 IT         Female    36 Developer 2014-12-23                9
##  8        2783 Finance    Female    43 Developer 2016-03-28                8
##  9        2847 Legal      Other     53 Developer 2017-09-13                6
## 10        3119 HR         Female    58 Developer 2015-09-17                8
## # ℹ 242 more rows
## # ℹ 14 more variables: Education_Level <chr>, Performance_Score <dbl>,
## #   Monthly_Salary <dbl>, Work_Hours_Per_Week <dbl>, Projects_Handled <dbl>,
## #   Overtime_Hours <dbl>, Sick_Days <dbl>, Remote_Work_Frequency <dbl>,
## #   Team_Size <dbl>, Training_Hours <dbl>, Promotions <dbl>,
## #   Employee_Satisfaction_Score <dbl>, Resigned <lgl>, Nhom_tuoi <fct>

3. Phan tich mot bien

3.1. Phan tich bien trinh do hoc van

df_summary <- Data %>%
  group_by(Education_Level) %>%
  summarise(
    Min_Training = min(Training_Hours, na.rm = TRUE),
    Max_Training = max(Training_Hours, na.rm = TRUE),
    Mean_Training = mean(Training_Hours, na.rm = TRUE),
    SD_Training = sd(Training_Hours, na.rm = TRUE),
    .groups = "drop"
  )

print(df_summary)
## # A tibble: 4 × 5
##   Education_Level Min_Training Max_Training Mean_Training SD_Training
##   <chr>                  <dbl>        <dbl>         <dbl>       <dbl>
## 1 Bachelor                   0           99          49.6        28.9
## 2 High School                0           99          49.5        28.9
## 3 Master                     0           99          49.3        28.8
## 4 PhD                        0           99          49.5        28.7

Nhận xét: Mức Training_Hours (giờ đào tạo) dao động từ 0 đến 99 giờ ở tất cả các nhóm trình độ học vấn. Trung bình số giờ đào tạo gần như tương đương nhau giữa các nhóm — dao động quanh 49 giờ. Độ lệch chuẩn (SD) khoảng 28.7–28.9, cho thấy mức độ phân tán khá lớn, tức là một số nhân viên được đào tạo nhiều trong khi một số khác rất ít.

**3.2. Phan tich bien muc do hai long cua nhan vien

# Phân tích mô tả cho biến Employee_Satisfaction_Score

# Thống kê cơ bản
summary(Data$Employee_Satisfaction_Score)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.010   3.000   2.999   3.990   5.000
# Tính thêm các chỉ số mô tả chi tiết hơn
library(dplyr)

mo_ta_satisfaction <- Data %>%
  summarise(
    So_quan_sat = n(),
    Gia_tri_thap_nhat = min(Employee_Satisfaction_Score, na.rm = TRUE),
    Q1 = quantile(Employee_Satisfaction_Score, 0.25, na.rm = TRUE),
    Trung_vi = median(Employee_Satisfaction_Score, na.rm = TRUE),
    Trung_binh = mean(Employee_Satisfaction_Score, na.rm = TRUE),
    Q3 = quantile(Employee_Satisfaction_Score, 0.75, na.rm = TRUE),
    Gia_tri_cao_nhat = max(Employee_Satisfaction_Score, na.rm = TRUE),
    Do_lech_chuan = sd(Employee_Satisfaction_Score, na.rm = TRUE)
  )

print(mo_ta_satisfaction)
## # A tibble: 1 × 8
##   So_quan_sat Gia_tri_thap_nhat    Q1 Trung_vi Trung_binh    Q3 Gia_tri_cao_nhat
##         <int>             <dbl> <dbl>    <dbl>      <dbl> <dbl>            <dbl>
## 1      100000                 1  2.01        3       3.00  3.99                5
## # ℹ 1 more variable: Do_lech_chuan <dbl>
# Trực quan hóa bằng biểu đồ
hist(
  Data$Employee_Satisfaction_Score,
  main = "Phân bố điểm hài lòng nhân viên",
  xlab = "Employee Satisfaction Score",
  col = "skyblue", border = "white"
)

boxplot(
  Data$Employee_Satisfaction_Score,
  main = "Biểu đồ Boxplot - Employee Satisfaction Score",
  col = "lightgreen",
  horizontal = TRUE
)

Nhận xét: Điểm hài lòng dao động từ 1 đến 5, cho thấy thang đo Likert 5 mức (từ rất không hài lòng → rất hài lòng). Trung bình ≈ 3, trung vị ≈ 3, nên phân phối dữ liệu khá cân đối quanh mức trung bình. Độ lệch chuẩn ≈ 1.15, thể hiện mức độ chênh lệch vừa phải — có sự khác biệt nhất định trong cảm nhận hài lòng giữa các nhân viên. Biểu đồ histogram cho thấy đa số nhân viên có điểm hài lòng trung bình – khá, trong khi tỷ lệ nhân viên cực kỳ hài lòng hoặc rất không hài lòng là ít hơn. Không có dấu hiệu ngoại lai đáng kể (theo boxplot).