Professional Documents
Culture Documents
Du Doan Luong 1
Du Doan Luong 1
Dự đoán lương
Bài toán: Sinh viên khi ra trường thường thắc mắc mình đề xuất mức lương bao nhiêu là hợp lý: Nếu cao quá thì
sẽ khó được nhà tuyển dụng chấp nhận và mất luôn cơ hội làm việc, nếu thấp quá thì sẽ thiệt thòi. Để giúp trả
lời câu hỏi này, chúng ta sẽ phân tích thông tin dựa trên dữ liệu khảo sát mức lương của nhân viên có kinh
nghiệm từ 0-10 năm của một số ngành. Các thông tin được thu thập bao gồm
Khai báo các thư viện: pandas: Làm việc với cấu trúc dữ liệu, hỗ trợ đọc ghi file dữ liệu với nhiều định dạng khác
nhau như csv, xls, sql, html... matplotlib: Thư viện hỗ trợ vẽ các đồ thị trong Python
Đọc file dữ liệu "Chương 3 work_data.csv" khảo sát mức lương của nhân viên có kinh nghiệm từ 0-10 năm của
một số ngành vào Dataframes df của python. Dataframes được cấu tạo như một bảng gồm các cột và các dòng.
In [3]: df.shape
Out[3]: (1426, 3)
Out[4]:
SoNamKinhNghiem NganhNghe Luong
0 7 KeToan 26.0
1 4 KeToan 13.8
2 8 KeToan 21.5
3 9 KeToan 24.0
4 1 KeToan 7.8
Out[5]:
SoNamKinhNghiem NganhNghe Luong
0 7 KeToan 26.0
1 4 KeToan 13.8
2 8 KeToan 21.5
3 9 KeToan 24.0
4 1 KeToan 7.8
5 2 KeToan 10.0
6 4 KeToan 13.5
7 5 KeToan 15.8
8 3 KeToan 12.2
9 2 KeToan 10.0
In [19]: df.tail()
Out[19]:
SoNamKinhNghiem NganhNghe Luong
Xem các thông tin thống kê đối với các dữ liệu định lượng:
count: tổng số các bản ghi trong dữ liệu min, max: giá trị lớn nhất nhỏ nhất của dữ liệu mean: giá trị trung bình
std: độ lệch chuẩn, giá trị STD lớn hay nhỏ phản ánh tập dữ liệu phân bố tập trung quanh điểm trung tâm hay rời
xa nó (ở đây là mean)
In [10]: df.describe()
Out[10]:
SoNamKinhNghiem Luong
Đổi tên các thuộc tính cần dùng về dạng đơn giản giúp dễ dàng truy cập sau này
plt.bar(nam, luong)
plt.show()
Biểu đồ ngang
Ví dụ vẽ ba đồ thị về mối quan hệ giữa lương và số năm kinh nghiệm của từng ngành nghề Bước 1: Tách
bảng dữ liệu ban đầu thành các bảng con theo các tiêu chí
Ví dụ tách bảng dữ liệu thành ba bảng con theo 3 ngành nghề
Bước 2: Vẽ 3 đồ thị Trong Matplotlib, mỗi plt.plot() trả về một đối tượng Figure (là hình ảnh bên ngoài), trong
Figure lại có thể có nhiều các đối tượng Axes là các đồ thị con bên trong.
plt.tight_layout()
plt.show()
Biểu đồ hộp Biểu đồ hộp (Box-plot) hay còn gọi là biểu đồ hộp-và-râu (box-and-whisker plot) là biểu đồ diễn tả 5
vị trí phân bố của dữ liệu, đó là: giá trị nhỏ nhất không ngoại lai (râu dưới) (L), tứ phân vị thứ nhất (Q1), trung vị
(median), tứ phân vị thứ 3 (Q3) và giá trị lớn nhất không ngoại lai (râu trên) (U).
Biểu đồ hộp cho biết phân bố của dữ liệu và xác định các giá trị ngoại lai:
Nếu đường trung vị chia chiếc hộp thành 2 nửa đều nhau, thì tập dữ liệu này đối xứng (symmetric). Nếu nửa
dưới nhỏ hơn nửa trên thì tập dữ liệu bị lệch phải (right-skewed), và ngược lại, nếu nửa dưới lớn hơn thì tập dữ
liệu bị lệch trái (left-skewed). Các giá trị ngoại lai (nếu có) sẽ xuất hiện bên ngoài phía dưới râu dưới và phía
trên râu trên
Xây dựng model dự đoán tiền lương theo số năm kinh nghiệm
SoNamKinhNghiem
0 7
1 4
2 8
3 9
4 1
... ...
1421 8
1422 6
1423 0
1424 0
1425 10
Chia bộ dữ liệu làm 2 tập train và test theo tỉ lệ 80% train,20% test
SoNamKinhNghiem
1125 5
1087 7
621 6
716 7
807 0
... ...
994 8
30 4
1325 0
1331 3
967 0
In [10]: print( "Mô hình hồi quy sẽ có dạng: Lương = a + b * số năm kinh nghiệm \nvới c
ác hệ số a và b lần lượt là")
print(model.intercept_)
print(model.coef_)
[[ 8.39450643]
[22.57723484]
[14.47281861]
[ 8.39450643]
[16.49892267]
[14.47281861]
[12.44671455]
[14.47281861]
[16.49892267]
[12.44671455]
[16.49892267]
[14.47281861]
[22.57723484]
[26.62944296]
[14.47281861]
[18.52502673]
[20.55113078]
[22.57723484]
[10.42061049]
[12.44671455]
[16.49892267]
[18.52502673]
[22.57723484]
[18.52502673]
[22.57723484]
[24.6033389 ]
[22.57723484]
[14.47281861]
[24.6033389 ]
[20.55113078]
[24.6033389 ]
[ 8.39450643]
[10.42061049]
[24.6033389 ]
[12.44671455]
[20.55113078]
[ 6.36840237]
[20.55113078]
[26.62944296]
[18.52502673]
[22.57723484]
[16.49892267]
[20.55113078]
[16.49892267]
[ 8.39450643]
[ 6.36840237]
[16.49892267]
[12.44671455]
[ 8.39450643]
[26.62944296]
[ 8.39450643]
[ 6.36840237]
[10.42061049]
[24.6033389 ]
[ 6.36840237]
[16.49892267]
[12.44671455]
localhost:8888/nbconvert/html/Chương 3. Dự đoán lương.ipynb?download=false 13/18
12/7/2020 Chương 3. Dự đoán lương
[14.47281861]
[12.44671455]
[20.55113078]
[18.52502673]
[26.62944296]
[20.55113078]
[ 8.39450643]
[ 8.39450643]
[10.42061049]
[14.47281861]
[14.47281861]
[12.44671455]
[ 6.36840237]
[ 8.39450643]
[18.52502673]
[16.49892267]
[26.62944296]
[26.62944296]
[16.49892267]
[18.52502673]
[18.52502673]
[24.6033389 ]
[14.47281861]
[18.52502673]
[10.42061049]
[10.42061049]
[10.42061049]
[14.47281861]
[ 6.36840237]
[ 6.36840237]
[ 6.36840237]
[18.52502673]
[16.49892267]
[ 8.39450643]
[12.44671455]
[26.62944296]
[10.42061049]
[ 8.39450643]
[14.47281861]
[18.52502673]
[ 6.36840237]
[12.44671455]
[18.52502673]
[24.6033389 ]
[18.52502673]
[20.55113078]
[20.55113078]
[ 6.36840237]
[24.6033389 ]
[24.6033389 ]
[22.57723484]
[12.44671455]
[18.52502673]
[18.52502673]
[ 6.36840237]
[22.57723484]
[22.57723484]
[24.6033389 ]
[ 8.39450643]
[16.49892267]
[16.49892267]
[14.47281861]
[16.49892267]
[14.47281861]
[12.44671455]
[ 6.36840237]
[10.42061049]
[24.6033389 ]
[20.55113078]
[24.6033389 ]
[ 6.36840237]
[20.55113078]
[12.44671455]
[10.42061049]
[16.49892267]
[20.55113078]
[14.47281861]
[12.44671455]
[ 6.36840237]
[24.6033389 ]
[14.47281861]
[26.62944296]
[14.47281861]
[12.44671455]
[24.6033389 ]
[ 6.36840237]
[14.47281861]
[22.57723484]
[16.49892267]
[14.47281861]
[18.52502673]
[22.57723484]
[20.55113078]
[10.42061049]
[16.49892267]
[12.44671455]
[24.6033389 ]
[16.49892267]
[10.42061049]
[18.52502673]
[10.42061049]
[ 8.39450643]
[16.49892267]
[ 8.39450643]
[24.6033389 ]
[ 6.36840237]
[10.42061049]
[22.57723484]
[16.49892267]
[18.52502673]
[24.6033389 ]
[ 8.39450643]
[14.47281861]
[14.47281861]
[10.42061049]
[14.47281861]
[20.55113078]
[20.55113078]
[16.49892267]
[16.49892267]
[14.47281861]
[22.57723484]
[24.6033389 ]
[24.6033389 ]
[16.49892267]
[18.52502673]
[22.57723484]
[18.52502673]
[24.6033389 ]
[16.49892267]
[24.6033389 ]
[ 8.39450643]
[ 6.36840237]
[20.55113078]
[12.44671455]
[20.55113078]
[16.49892267]
[20.55113078]
[20.55113078]
[24.6033389 ]
[12.44671455]
[18.52502673]
[22.57723484]
[14.47281861]
[12.44671455]
[26.62944296]
[18.52502673]
[ 6.36840237]
[ 8.39450643]
[20.55113078]
[ 8.39450643]
[20.55113078]
[ 8.39450643]
[24.6033389 ]
[24.6033389 ]
[20.55113078]
[24.6033389 ]
[18.52502673]
[24.6033389 ]
[18.52502673]
[10.42061049]
[12.44671455]
[12.44671455]
[20.55113078]
[14.47281861]
[ 8.39450643]
[ 8.39450643]
[ 8.39450643]
[12.44671455]
[10.42061049]
[12.44671455]
[ 6.36840237]
[14.47281861]
[10.42061049]
[24.6033389 ]
[12.44671455]
[18.52502673]
[12.44671455]
[20.55113078]
[26.62944296]
[18.52502673]
[14.47281861]
[22.57723484]
[18.52502673]
[18.52502673]
[24.6033389 ]
[20.55113078]
[22.57723484]
[ 8.39450643]
[16.49892267]
[20.55113078]
[18.52502673]
[10.42061049]
[22.57723484]
[16.49892267]
[26.62944296]
[24.6033389 ]
[ 8.39450643]
[22.57723484]
[ 8.39450643]
[18.52502673]
[26.62944296]
[10.42061049]
[26.62944296]
[26.62944296]
[ 8.39450643]
[ 8.39450643]
[ 8.39450643]
[ 8.39450643]
[16.49892267]
[20.55113078]
[20.55113078]
[24.6033389 ]
[ 6.36840237]
[18.52502673]
[20.55113078]
[14.47281861]
[ 6.36840237]
[24.6033389 ]
[14.47281861]
[ 8.39450643]
[14.47281861]
[10.42061049]
[22.57723484]
[ 8.39450643]
[20.55113078]
[26.62944296]
[16.49892267]
[18.52502673]]
In [12]: f = model.score(X_test,y_test)
print("Độ chính xác của mô hình: ", f)
Sử dụng mô hình dự đoán cho dữ liệu mới với Số năm kinh nghiệm 1.2 năm
In [13]: x=[[1.2]]
y = model.predict(x)
print(y)
[[8.79972724]]
Lưu trữ và sử dụng mô hình sau khi đã huấn luyện với ba số năm kinh nghiệm: 1 năm, 2 năm, 4 năm.
x = [[1],[2],[4]]
y_pred = loaded_model.predict(x)
y_pred