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ự")
| 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.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.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).