lOMoARcPSD| 58728417
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CUỐI K
MÔN HỌC: LẬP TRÌNH PYTHON
CHƯƠNG TRÌNH QUẢN LÝ SINH VIÊN ĐẠI HỌC NEW YORK
Mã lớp học phn: [UTE] IPPA233277_06
Học kỳ 1 – Năm học 2024 – 2025
Giảng viên hướng dẫn: ThS. Trần Quang Khải
Danh sách sinh viên thực hiện:
MSSV
Họ tên
23110187
Phạm Hàn Minh Chương
23110266
Nguyễn Thanh Bình Minh
23110336
Nguyễn Thị Thanh Thùy
Thành phố Hồ Chí Minh, tháng 11 năm 2024
lOMoARcPSD| 58728417
Nhận xét của giảng viên
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
TP. Hồ Chí Minh, ngày … tháng… năm 2024
Giảng viên ký tên
lOMoARcPSD| 58728417
MỤC LỤC
DANH MỤC HÌNH ẢNH...................................................................................1
DANH MỤC BẢNG............................................................................................2
PHẦN MỞ ĐẦU..................................................................................................3
1. do chọn đề
tài..........................................................................................3
2. Mục tiêu đề
tài..............................................................................................3
3. Đối tượng phạm vi nghiên
cứu...............................................................3 PHẦN NỘI
DUNG..............................................................................................5
CHƯƠNG 1: TÓM TẮT CƠ SỞ LÝ THUYẾT...............................................5
1.1. Giới thiệu về Python..................................................................................5
1.1.1 Lịch sử của Python...............................................................................5
1.1.2 Đặc điểm của Python............................................................................5
1.2. Giới thiệu về một số thư viện phổ biến của Python................................5
1.3 Giới thiệu Version control system (Git)....................................................6
CHƯƠNG 2: MÔ TẢ DỮ LIỆU........................................................................8
2.1. Nguồn gốc dữ liệu......................................................................................8
2.2. Mô tả trường dữ liệu.................................................................................8
2.3. Ý nghĩa bộ dữ liệu.....................................................................................9
CHƯƠNG 3: ỨNG DỤNG VÀO XỬ LÝ DỮ LIỆU......................................10
3.1 Thao tác Thêm, Sửa, Xóa, Cập nhật Dữ liệu (CRUD)..........................10
3.1.1. Giới thiệu về CRUD...........................................................................10
3.1.2. Triển khai chức năng.........................................................................10
3.2 Làm sạch dữ liệu......................................................................................13
3.2.1 Xử lý giá trị còn thiếu.........................................................................13
3.2.2 Xử giá trị bị trùng lặp.....................................................................16
3.2.3 Chuẩn hóa dữ liệu..............................................................................16
3.2.4 Lưu trữ dữ liệu đã được làm sạch......................................................17
3.3. Trực quan hóa dữ liệu.............................................................................18
3.3.1. Biểu đ phân bố độ tuổi.....................................................................18
3.3.2. Phân bố quốc tịch của sinh viên NYU..............................................18
3.3.3. Phân tích tỷ lệ giới tính giữa các sinh viên NYU.............................20
3.3.4. Phân tích điểm học tập của sinh viên...............................................21
3.3.5. Phân tích điểm số trung bình dựa trên những tiêu chí đánh giá....22
3.3.6. Tương quan giữa Điểm và Các tiêu chí đánh g............................23
3.3.7. Mối quan hệ giữa tuổi và điểm số.....................................................24
lOMoARcPSD| 58728417
3.3.8. Phân tích sự phân bố điểm theo từng môn học................................25
3.3.9. Sự tương quan giữa các môn học và độ tuổi (student_function)....27
3.4 Xử lý dữ liệu trước thống kê...................................................................28
3.4.1 Sắp xếp dữ liệu theo điểm số giảm dần..............................................28
3.4.2 Sắp xếp dữ liệu theo độ tuổi tăng dần................................................29
3.5. Xây dựng giao diện và Chức năng.........................................................29
3.5.1 Giới thiệu về giao diện và chức năng:...............................................29
3.5.2 Thiết kế và phát triển..........................................................................30
3.5.3 Tích hợp các chức năng......................................................................31
KẾT
LUẬN........................................................................................................44
TÀI LIỆU THAM KHẢO................................................................................45
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
DANH MỤC HÌNH ẢNH
Hình 3.1 Đoạn code thêm dữ liệu mới vào file csv............................................10
Hình 3.2 Đoạn code đọc dữ liệu từ file csv.........................................................11
Hình 3.3 Đoạn code cập nhật thông tin sinh viên trong file csv.........................12
Hình 3.4 Đoạn code xóa sinh viên khi dataFrame dựa trên ID........................12
Hình 3.5 Đoạn code loại bỏ record khi không chứa id.......................................13
Hình 3.6 Đoạn code xử lý giá trị bị thiếu ở trưởng có kiểu dữ liệu Float, Int...14
Hình 3.7 Đoạn code xử lý xử lý giá trị bị thiếu ở trường age.............................14
Hình 3.8 Đoạn code xử lý giá trị bị thiếu ở các trưởng có kiểu dữ liệu String. .15
Hình 3.9 Đoạn code xử lý giá trị bị trùng lặp.....................................................16
Hình 3.10 Đoạn code chuẩn hóa giá trị của trưởng age....................................16
Hình 3.11 Đoạn code chuẩn hóa dữ liệu ở các trường liên quan đến rating.....17
Hình 3.12 Đoạn code lưu trữ dữ liệu đã được làm sch vào file chỉ định.........17
Hình 3.13 Code tạo biểu đ phân bố độ tuổi......................................................18
Hình 3.14 Biểu đồ phân bố độ tuổi của sinh viên đại học New York..................18
Hình 3.15 Code tạo biểu đ phân bố quốc tịch..................................................19
Hình 3.16 Biểu đồ thể hiện phân bố quốc tịch của sinh viên NYU.....................19
Hình 3.17 Code tùy chỉnh hover.........................................................................20
Hình 3.18 Code vẽ biểu đồ tỉ lệ giới tính............................................................20
Hình 3.19 Biểu đồ biểu diễn tỉ lệ giới tính của nhóm sinh viên NYU.................21
Hình 3.20 Code tạo biểu đ điểm học tập sinh viên NYU..................................21
Hình 3.21 Biểu đồ điểm trung bình học tập trên dữ liệu sinh viên NYU............22
Hình 3.22 Code tạo biểu đ Điểm đánh giá cá nhân trung bình........................22
Hình 3.23 Biểu đồ Điểm Đánh giá cá nhân trung bình......................................23
Hình 3.24 Code vẽ biểu đồ tương quan giữa Điểm và Đánh giá cá nhân..........23
Hình 3.25 Biểu đồ tương quan giữa Điểm Đánh giá nhân của nhóm sinh
viên trên dữ liệu..................................................................................................24
Hình 3.26 Code tạo biểu đ cho thấy mối quan hệ giữa tuổi và điểm số...........24
Hình 3.27 Biểu đồ thể hiện Mối quan hệ giữa Tuổi và Điểm số.........................25
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Hình 3.28 Code tạo biểu đồ phân bố điểm theo từng môn học...........................25
Hình 3.29 Biểu đồ phân bố theo từng môn học..................................................26
Hình 3.30 Code tạo ma trận tương quan............................................................27
Hình 3.31 Biểu đồ thể hiện sự tương quan giữa tuổi và điểm các môn học.......27
Hình 3.32 Đoạn code sắp xếp dữ liệu theo điểm trung bình giảm dần..............28
Hình 3.33 Đoạn code sắp xếp dữ liệu tăng dần theo độ tuổi..............................29
Hình 3.34 Giao diện đăng nhập..........................................................................31
Hình 3.35 Code logic xử lí đăng nhập................................................................33
Hình 3.36 Giao diện đăng kí...............................................................................34
Hình 3.37 Code logic xử lí đăng kí.....................................................................35
Hình 3.38 Giao diện trang chủ...........................................................................36
Hình 3.39 Giao diện trang quản lí......................................................................37
Hình 3.40 Giao diện thêm sinh viên....................................................................38
Hình 3.41 Giao diện cập nhật sinh viên.............................................................39
Hình 3.42 Giao diện xóa sinh viên......................................................................39
Hình 3.43 Giao diện trang trực quan.................................................................40
Hình 3.44 Giao diện trang thống kê...................................................................42
Hình 3.45 Giao diện lọc sinh viên......................................................................42
Hình 3.46 Giao diện hiển thị sắp xếp sinh viên theo tuổi...................................43
DANH MỤC BẢNG
Bảng 2.1 Tóm tắt các trường của bộ dữ liệu.........................................................8
PHẦN MỞ ĐẦU
1. Lý do chọn đề tài
Quản lý sinh viên trong các trường học ngày nay đòi hỏi một lượng lớn nỗ
lực tài nguyên, đặc biệt khi slượng sinh viên không ngừng tăng cao, bên cạnh
đó, phương pháp thủ công không những tiêu tốn thời gian mà còn dễ dẫn đến sai
sót, làm ảnh hưởng đến hiệu quả hoạt động của nhà trường. Để khắc phục những
hạn chế này, việc ứng dụng công nghệ thông tin vào quản sinh viên trở thành
một nhu cầu cấp thiết nhằm nâng cao hiệu quả và độ chính xác.
Sự phát triển mạnh mẽ của công nghệ đã mở ra nhiều cơ hội trong việc tối
ưu hóa các quy trình quản lý. Các phần mềm ứng dụng không chỉ giúp tự động
hóa các công việc thủ công còn cung cấp khả năng phân tích dữ liệu ra
quyết định nhanh chóng. Điều này không những giảm tải công việc cho cán bộ
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
quản còn nâng cao chất lượng phục vụ sinh viên. Việc phát triển một ứng
dụng quản lý sinh viên do đó trở thành giải pháp thiết thực, cónh khả thi cao và
tiềm năng mở rộng. Ngoài ra, xu hướng chuyển đi số trong giáo dục đòi hỏi các
trường học phải liên tục cải tiến và hiện đại hóa hệ thống quản lý. Một ứng dụng
quản sinh viên tích hợp không chỉ đáp ứng nhu cầu hiện tại còn tạo điều
kiện cho nhà trường tiến tới quản trị thông minh, đồng bhóa dữ liệu hỗ trợ
học tập hiệu quả hơn. Tóm lại, việc chọn đề tài này không ch mang ý nghĩa thực
tiễn mà còn góp phần vào quá trình chuyển đổi số và đổi mới nền giáo dục.
2. Mục tiêu đề tài
Mục tiêu của đề tài là thiết kế phát triển một ứng dụng phần mềm giúp
quản thông tin sinh viên một cách hiệu quả, bao gồm các chức năng như: thêm,
xóa, sửa thông tin sinh viên; tìm kiếm; trực quan hóa dliệu; tạo giao diện
tương tác với người dùng.
Hơn nữa, ứng dụng sẽ cung cấp các công cụ phục vụ người quản như
chức năng tự động tổng hợp số liệu, thống kê hiệu suất học tập của sinh viên, và
tích hợp tính năng báo cáo linh hoạt. Mục tiêu cụ thể là tăng độ chính xác và hiệu
suất trong việc quản lý, giúp người dùng thể truy cập dữ liệu nhanh chóng và
dễ dàng.
3. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu của đề tài này là:
Tập dữ liệu Academic and Personal Data from NYU Students: gồm những
thông tin về id, name, country, city, litatude, longtitude, gender, ethenic group,
age, math grade, scienes grade, language grade, portfolio rating, coverletter
rating, refletter rating.
Sinh viên cán bộ quản lý: những người tham gia vào quá trình cho ra kết
quả của tập dữ liệu những người dùng ứng dụng để quản sinh viên trên
sở dữ liệu nêu trên.
Phạm vi nghiên cứu:
Dựa trên tập tin tiến hành phân tích dữ liệu.
Đưa ra những quy trình phù hợp: Dựa trên cơ sở môn Lập trình python để
tạo ra những bước xử lí, trực quan dữ liệu và thiết kế giao diện phù hợp.
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
PHẦN NỘI DUNG
CHƯƠNG 1: TÓM TẮT CƠ SỞ LÝ THUYẾT
1.1. Giới thiệu về Python
Python một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng
web, phát triển phần mềm, khoa học dữ liệu và học máy (ML). Các nhà phát triển
sử dụng Python hiệu quả, dễ học thể chạy trên nhiều nền tảng khác
nhau. Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại
hệ thống và tăng tốc độ phát triển.
1.1.1 Lịch sử của Python
Guido Van Rossum, một lập trình viên máy tính Lan, đã tạo ra Python.
Ông bắt đầu phát triển ngôn ngữ này vào năm 1989 tại Centrum Wiskunde &
Informatica (CWI) tên gọi của ngôn ngữ này được lấy cảm hứng từ chương
trình truyền hình Monty Python's Flying Circus của đài BBC Guido Van
Rossum là một người hâm mộ của chương trình này.
* Lịch sử các phiên bản Python
Guido Van Rossum cho ra mắt phiên bản đầu tiên của ngôn ngữ Python
(phiên bản 0.9.0) vào năm 1991.
Python 1.0 đã được ra mắt vào năm 1994 với các hàm mới để dễ dàng xử
lý danh sách dữ liệu, chẳng hạn như ánh xạ, lọc và lược bỏ.
Python 2.0 đã được ra mắt vào ngày 16 tháng 10 năm 2000, với các tính
năng hữu ích mới cho lập trình viên, chẳng hạn như hỗ trợ tự Unicode
và cách xử lý chi tiết một danh sách nhanh chóng hơn.
Python 3.0 đã được ra mắt vào ngày 3 tháng 12 năm 2008. Phiên bản này
bao gồm các tính năng như hàm in và hỗ trợ nhiều hơn cho việc phân chia
số và xử lý lỗi.
1.1.2 Đặc điểm của Python
Python một ngôn ngữ thông dịch hỗ trnhiều hình lập trình:
Python là một ngôn ngữ lập trình đa mô hình (multi-paradigm), nghĩa là nó hỗ
trợ nhiều mô hình lập trình khác nhau:
Lập trình thủ tục (Procedural Programming): hình lập trình truyền
thống, trong đó chương trình được cấu trúc thành các thủ tục hoặc hàm
Lập trình hướng đối tượng (Object-Oriented Programming): mô hình
lập trình dựa trên khái niệm "đối tượng", nơi dữ liệu các hành vi liên
quan được nhóm lại với nhau thành các đối tượng
Lập trình hàm (Functional Programming): hình lập trình trong đó
các hàm được coi là các đơn vị cơ bản của việc xây dựng chương trình
1.2. Giới thiệu về một số thư viện phổ biến của Python
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Pandas
Pandas ra đời vào năm 2008 được phát triển bởi Wes McKinney. Cái tên
“Pandas” xuất phát từ thuật ngữ trong kinh tế lượng “Panel Data” tả các tập
dữ liệu gồm các quan sát trong nhiều khoảng thời gian. Pandas được thiết kế để
làm việc dễ dàng trực quan với dliệu cấu trúc (dạng bảng, đa chiều,
tiềm năng không đồng nhất) dữ liệu chuỗi thời gian. Mục tiêu của pandas
trở thành khối căn bản (building block) cấp cao bản cho công việc thực tế,
phân tích dữ liệu thế giới thực trong Python, và rộng hơn trở thành công cụ thao
tác/phân tích nguồn mở mạnh mẽ linh hoạt nhất sẵn trong bất kỳ loại
ngôn ngữ lập trình nào.
Matpolib
Matplotlib là một thư viện vẽ đồ thị trong Python rất phổ biến, được sử
dụng để tạo ra các biểu đồ và đồ thị tĩnh, động, và tương tác. Thư viện này được
phát triển bởi John D. Hunter vào năm 2003. Thư viện này cho phép người dùng
vẽ rất nhiều loại biểu đồ khác nhau như biểu đồ đường, biểu đồ thanh, biểu đồ
phân tán, biểu đồ hình bánh, biểu đồ hộprâu, cũng như nhiều loại đồ thị khác.
Matplotlib có cấu trúc API mô-đun, giúp cho người dùng có thể dễ dàng sử dụng
các chức năng tcơ bản đến nâng cao. Ngoài ra, Matplotlib còn tích hợp tốt với
nhiều thư viện khác như NumPy, Pandas, SciPy, giúp việc xử lý trực quan
hóa dữ liệu trở nên dễ dàng hơn. Bên cạnh đó, thư viên cũng htrợ nhiều định
dạng đầu ra, cho phép xuất đồ thị ở nhiều thể loại file như PNG, PDF, SVG, EPS,
và PGF.
Tkinter
Tkinter một thư viện trong ngôn ngữ lập trình Python được sử dụng để
tạo giao diện đồ họa người dùng (GUI). "Tkinter" viết tắt của "Tk interface",
một toolkit đồ họa cung cấp các công cụ để phát triển giao diện người dùng.
Tkinter là một phần của thư viện tiêu chuẩn của Python đã được tích hợp sẵn
trong hầu hết các cài đặt Python và một lựa chọn phổ biến cho việc phát triển ứng
dụng với giao diện đồ họa đơn giản trong Python.
Các đặc điểm của Tkinter bao gồm khả năng tạo các thành phần giao diện
như cửa sổ, nút, ô văn bản, và các widget khác để tương tác với người dùng. Bên
cạnh đó, Tkinter cung cấp cả các sự kiện phương thức để xử tương tác người
dùng và thay đổi trạng thái của ứng dụng. Chính vậy, Tkinter được xem như
một thư viện trong Python giúp tạo ra giao diện đồ họa người dùng (GUI), hỗ trợ
người dùng tương tác với ứng dụng một cách trực quan và dễ sử dụng nhất.
1.3 Giới thiệu Version control system (Git)
Git là tên gọi là một hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay
(Distributed Version Control System DVCS). DVCS nghĩa hệ thống giúp mỗi
máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân
bản (clone) từ một kho chứa nguồn (repository), mỗi thay đổi vào mã nguồn
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
trên máy tính sthể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa
chính, bên cạnh đó, các này cũng có thể được truy cập bởi những thiết bkhác
khi được cấp quyền. trong Git, thư mục làm việc trên máy tính gọi là Working
Tree. Chính vậy, Git đặc biệt hữu ích trong môi trường làm việc nhóm, nơi
nhiều người thể làm việc trên cùng một dự án hạn chế xung đột hoặc tổn
thất dữ liệu. Bên cạnh đó, để làm việc từ xa và tích hợp liên tục (CI) với Git, hiện
nay các nền tảng như GitHub, GitLab và Bitbucket đã được thiết kế và phát triển
môi trường hỗ trợ Git, giúp lập trình quản lý dự án dễ dàng và hiệu quả hơn.
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
CHƯƠNG 2: MÔ TẢ DỮ LIỆU
2.1. Nguồn gốc dữ liệu
Tập dữ liệu dùng để thực hiện đồ án được tải từ Kaggle, dataset của Kaggle
tính năng hữu ích nhất việc tìm nguồn dữ liệu tại thời gian thực vấn đề
quan trọng với hầu hết các nhà khoa học dữ liệu. Việc cung cấp nguồn dữ liệu đa
dạng tạo nên nơi để các nhà nghiên cứu, lập trình viên và chuyên gia dữ liệu chia
sẻ học hỏi kinh nghiệm. Thêm vào đó, các bộ dữ liệu từ Kaggle thường kèm
theo tả chi tiết, giúp người dùng nắm cách thức thu thập cấu trúc dữ liệu.
Dữ liệu được tổng hợp từ một nhóm các sinh viên với thông tin chi tiết về
lịch, học vấn và các kỹ năng mềm của họ. Mỗi hàng đại diện cho một sinh viên
và chứa các thông tin bao gồm mã sinh viên, tên, quốc tịch, thành phố, tọa độ địa
lý, giới tính, nhóm dân tộc, tuổi các điểm số liên quan đến các môn học cùng
với đánh giá về portfolio, thư xin việc và thư giới thiệu.
Việc chọn Kaggle giúp các nhóm nghiên cứu tiếp cận nhiều công cụ hỗ trợ
phân tích và học hỏi phương pháp mới tcộng đồng, nâng cao chất lượng nghiên
cứu tổng thể.
2.2. Mô tả trường dữ liệu
Thông tin chi tiết về lý lịch, học vấn các knăng mềm của sinh viên Đại
học New York từ bộ dữ liệu bao gồm:
Bảng 2.1 Tóm tắt các trường của bộ dữ liệu
Tên trường
Chi tiết
id
Mã số nhận dạng duy nhất của sinh viên (Khóa chính)
name
Tên sinh viên.
nationality
Quốc tịch của sinh viên.
city
Thành phố nơi sinh viên sinh sống.
latitude longitude
Tọa độ địa lý ca thành phố nơi sinh viên sinh sống.
gender
Giới tính của sinh viên.
ethnic.group
Nhóm dân tộc của sinh viên.
age
Tuổi của sinh viên.
english.grade
Điểm môn tiếng Anh.
math.grade
Điểm môn Toán.
sciences.grade
Điểm các môn khoa học.
language.grade
Điểm các môn ngôn ngữ khác.
portfolio.rating
Đánh giá về portfolio của sinh viên.
coverletter.rating
Đánh giá về thư xin việc ca sinh viên.
refletter.rating
Đánh giá về thư giới thiệu của sinh viên.
Chương 1: Tóm tắt cơ sở lý thuyết
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
2.3. Ý nghĩa bộ dữ liệu
Dataset này cung cấp một cái nhìn toàn diện về hồ học tập các kỹ
năng mềm của sinh viên. Các điểm số đánh giá không chỉ phản ánh khả năng
học tập còn là những chỉ số quan trọng để đánh giá khả năng thành công của
sinh viên trong các môi trường học thuật và công việc. Việc phân tích dữ liệu này
có thể giúp các trường học và nhà tuyển dụng hiểu rõ hơn về các ứng viên, từ đó
đưa ra các quyết định tuyển sinh và tuyển dụng phù hợp.
Chương 1: Tóm tắt cơ sở lý thuyết
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Chương 2: Mô tả dữ liệu CHƯƠNG 3: ỨNG DỤNG VÀO XỬ LÝ DỮ LIỆU
3.1 Thao tác Thêm, Sửa, Xóa, Cập nhật Dữ liệu (CRUD)
3.1.1. Giới thiệu về CRUD
CRUD (Create, Read, Update, Delete) bốn thao tác bản trong việc quản
dữ liệu. Trong ứng dụng này, các thao tác CRUD được áp dụng trên dữ liệu sinh
viên được lưu trữ dưới dạng file CSV (data_clean.csv).
- Thêm dữ liệu (Create): Cho phép người dùng thêm mới thông tin sinh viên
vàofile dữ liệu.
- Đọc dữ liệu (Read): Hiển thị dữ liệu hiện có từ file CSV để xem hoặc chỉnhsửa.
- Cập nhật dữ liệu (Update): Cập nhật thông tin sinh viên theo ID.
- Xóa dữ liệu (Delete): Xóa thông tin sinh viên dựa trên ID.3.1.2. Triển khai chức
năng Công Cụ Sử Dụng:
- Ngôn ngữ chính: Python.
- Thư viện xử lý dữ liệu: Pandas, NumPy.
3.1.2.1 Thêm dữ liệu (Create)
Hàm create_data(student_data, file_path) thêm dữ liệu sinh viên mới vào file
CSV
Hình 3.1 Đoạn code thêm dữ liệu mới vào file csv
Hàm create_data thêm dữ liệu sinh viên vào tệp CSV, đảm bảo tiêu đề cột
luôn đầu. Đầu tiên, hàm đọc dữ liệu hiện từ tệp bằng cách mở tệp chế độ
đọc (mode='r') và sử dụng csv.reader để chuyển đổi nội dung tệp thành danh
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
sách các hàng. Nếu tệp không tồn tại(FileNotFoundError), một danh sách rỗng
được khởi tạo. Tiếp theo, nếu tệp chưa dữ liệu hoặc không chứa tiêu đề, tiêu
đề cột được thêm vào danh sách current_data. Dữ liệu sinh viên mới
(student_data) sau đó được chèn vào cuối danh sách. Cuối cùng, hàm mở lại tệp
chế độ ghi (mode='w') sử dụng csv.writer để ghi toàn bộ dữ liệu (bao gồm
tiêu đề và dữ liệu mới) trở lại tệp CSV.
3.1.2.2 Đọc dữ liệu (Read)
Hàm read_data(file_path) hiển thị nội dung dữ liệu từ file CSV.
Hình 3.2 Đoạn code đọc dữ liệu từ file csv
Đoạn mã này đọc dữ liệu từ tệp CSV và trả về danh sách các hàng. Đầu tiên, tệp
CSV được mở bằng phương thức with open, sử dụng mã hóa UTF-8 và cấu hình
để tránh thêm dòng trống không cần thiết. Sau đó, csv.reader được dùng để đọc
từng hàng trong tệp, và tất cả các hàng được lưu vào danh sách bằng list(reader).
Nếu tệp không chứa dữ liệu, một thông báo sẽ được hiển thị để báo rằng không
dữ liệu đhiển thị. Nếu xảy ra lỗi, ví dụ như tệp không tồn tại hoặc lỗi khác,
các thông báo lỗi cụ thể sẽ được hiển thị cho người dùng bằng messagebox.
Trong cả hai trường hợp lỗi, hàm sẽ trả về None.
3.1.2.3 Cập nhật dữ liệu (Update)
Hàm update_data(student_id, new_info) cập nhật thông tin sinh viên theo ID.
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Hình 3.3 Đoạn code cập nhật thông tin sinh viên trong file csv
Đoạn trên thực hiện việc cập nhật thông tin sinh viên trong một tệp
CSV. Đầu tiên, hàm update_data nhận vào hai tham số: student_id (ID sinh viên
cần cập nhật) new_info (danh ch thông tin mới). Bằng cách sử dụng
csv.reader, dữ liệu từ tệp CSV data_clean.csv được đọc vào dưới dạng danh sách
các dòng. Sau đó, hàm duyệt qua từng dòng trong tệp kiểm tra xem ID sinh
viên khớp với student_id hay không. Nếu tìm thấy sinh viên có ID trùng khớp,
thông tin sinh viên sẽ được cập nhật (giữ nguyên ID thay thế các trường còn
lại bằng new_info). Sau khi cập nhật, hàm sẽ ghi lại dữ liệu mới vào tệp CSV
bằng csv.writer. Nếu việc cập nhật thành công, hàm trả về True, ngược lại trả v
False.
3.1.2.4 Xóa dữ liệu (Delete)
Hàm delete_data (df, student_id) xóa sinh viên dựa trên ID từ DataFrame.
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Hình 3.4 Đoạn code xóa sinh viên khi dataFrame dựa trên ID
Đoạn mã trên thực hiện chức năng xóa sinh viên khỏi DataFrame dựa trên
ID sinh viên. Hàm delete_data nhận vào hai tham số: df (DataFrame chứa dữ liệu
sinh viên) student_id (ID của sinh viên cần xóa). Đầu tiên, hàm tìm vị trí
(index) của sinh viên id trùng khớp với student_id trong DataFrame, sau khi
chuyển đổi id thành chuỗi để so sánh. Nếu tìm thấy sinh viên có ID khớp, hàm sẽ
xóa dòng dữ liệu đó bằng cách sử dụng phương thức drop và trả lại
DataFrame đã được cập nhật. Nếu không tìm thấy sinh viên, hàm trả về None
3.2 Làm sạch dữ liệu
3.2.1 Xử lý giá trị còn thiếu
Dữ liệu thiếu (hay còn gọi Missing Data hoặc NaN trong ngôn ngữ lập
trình) tình trạng xảy ra khi một số giá trị trong bộ dữ liệu không sẵn hoặc
không được ghi nhận. Chính vậy, những giá trị đó sảnh hưởng đến kết quả
phân tích cuối cùng và để giải quyết vấn đề, ta có một số cách xử lý như sau:
Xóa bản ghi khi bị thiếu khóa chính
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Hình 3.5 Đoạn code loại bỏ record khi không chứa id
Đoạn Python trên dùng để loại bỏ các bản ghi (record) trong DataFrame
df không giá trị trong cột id. Điều này được thực hiện bằng phương thức
dropna(), với tham số subset được đặt là ['id']. Cụ thể, khi chạy dòng lệnh df =
df.dropna(subset=['id']), DataFrame df sẽ loại bỏ tất cả các hàng mà giá trị trong
cột id là NaN.
Nguyên nhân cần loại bỏ các bản ghi không chứa giá tr id là vì trường này
được sử dụng như là khóa chính (primary key) trong cơ sở dữ liệu. Khóa chính
một thuộc tính hoặc tập hợp các thuộc tính đảm bảo mỗi bản ghi trong bảng
duy nhất. rất quan trọng trong việc quản truy xuất dữ liệu, giúp tránh
việc các bản ghi trùng lặp duy ttính toàn vẹn của dliệu. Vì thế, nếu
bất kỳ bản ghi nào không giá trị id, tức thiếu khóa chính, điều này thể gây
ra nhiều vấn đề trong quá trình quản dữ liệu phân tích. dụ, các bản ghi
không có khóa chính có thể dẫn đến lỗi khi thực hiện các thao tác tìm kiếm, liên
kết dữ liệu hoặc áp dụng các ràng buộc dữ liệu. Do đó, việc loại bỏ các bản ghi
thiếu id cần thiết để đảm bảo rằng mỗi bản ghi trong DataFrame đều một
định danh duy nhất và dữ liệu được duy trì một cách chính xác và nhất quán.
Thay thế giá trị còn thiếu ở dạng số bằng giá trị 0.0
Hình 3.6 Đoạn code xử gtrị bị thiếu trưởng kiểu dữ liệu Float, Int
Đoạn Python trên xử giá trị thiếu trong hai loại cột khác nhau trong
DataFrame df các cột giá trị dạng số thực (float) các cột giá trị dạng
số nguyên (int). Đầu tiên, đoạn xác định một danh sách các cột số thực
columns_float gồm latitude, longitude, english.grade, math.grade, sciences.grade,
language.grade. Vòng lặp for duyệt qua từng cột trong danh sách này, nếu
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
cột đó tồn tại trong DataFrame, phương thức fillna(0.0) được sử dụng để điền tất
cả các giá trị thiếu trong cột đó bằng giá trị 0.0. Tương tự, đoạn mã xác định một
danh sách các cột số nguyên columns_int gồm
portfolio.rating,coverletter.rating,và refletter.rating. Vòng lặp for tiếp tục kiểm tra
sự tồn tại của từng cột trong DataFrame và sử dụng phương thức fillna(0) để điền
các giá trị thiếu bằng giá trị 0.
Nguyên nhân của việc điền các giá trị thiếu bằng 0.0 hoặc 0 là nhằm tránh
ảnh hưởng tiêu cực của dliệu thiếu đến các phân tích thống hình hóa
sau này và hạn chế bị sai lệch bởi sự thiếu hụt dữ liệu.
Thay thế giá trị còn thiếu ở dạng số bằng giá trị trung bình hoặc trung vị
Hình 3.7 Đoạn code xử lý xử lý giá trị bị thiếu ở trường age
Đoạn Python trên được sử dụng để xử giá trị thiếu (NaN) trong cột
age của DataFrame df bằng cách điền giá trị tuổi trung bình làm tròn lên số
nguyên gần nhất lớn hơn hoặc bằng giá trị hiện tại. Việc này giúp đảm bảo tính
nhất quán toàn vẹn dữ liệu, đặc biệt khi các phân tích thống yêu cầu dữ
liệu không có giá trị thiếu.
Trước tiên, đoạn mã kiểm tra xem cột age tồn tại trong DataFrame hay
không thông qua câu lệnh if 'age' in df.columns. Nếu cột age tồn tại, đoạn mã sẽ
tính giá trị tuổi trung bình của cột này bằng phương thức mean(). Tuy nhiên, đại
lượng tuổi phải là một số nguyên và để đảm bảo rằng giá trị điền vào mang giá trị
nguyên, hàm ceil()từ thư viện math được sử dụng, từ đó giá trị tuổi trung bình đã
được làm tròn này sẽ được lưu trữ trong biến ave_age.
Sau đó, đoạn sử dụng phương thức fillna() của DataFrame đđiền giá
trị thiếu trong cột age bằng giá trị tuổi trung bình đã tính được. Điều này đảm bảo
rằng không còn giá trị thiếu nào trong cột age, giúp dữ liệu trở nên nhất quán và
dễ dàng hơn cho các phân tích sau này. Bên cạnh đó, Nguyên nhân của việc điền
giá trị thiếu bằng tuổi trung bình để giảm thiểu tác động của dữ liệu thiếu đến
các phân tích thng kê và mô hình hóa. Giá trị trung bình được sử dụng vì nó đại
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
diện cho xu hướng trung tâm của dữ liệu, giúp các phân tích sau này không bị
lệch.
Thay thế giá trị còn thiếu ở dạng dui thành “No infor”
Hình 3.8 Đoạn code xử lý giá trị bị thiếu ở các trưởng có kiểu dữ liệu String
Đoạn Python trên được sử dụng để điền các giá trị thiếu trong các cột
dữ liệu chuỗi (string columns) bằng giá trị 'No infor'. Cụ thể, danh sách các cột
cần kiểm tra và điền giá trị gồm: name, nationality, city, và gender.
Để thực hiện nhiệm vụ này, trước tiên ta cần viết định nghĩa một danh
sách các cột chuỗi columns_str chứa tên của các cột cần kiểm tra. Sau đó, mã sử
dụng vòng lặp for để duyệt qua từng cột trong danh sách columns_str. Trong mỗi
lần lặp, đoạn kiểm tra xem cột hiện tại tồn tại trong DataFrame df hay
không bằng và thay thế tất cả các giá trị thiếu (NaN) trong ct đó bằng giá trị 'No
infor' bằng phương thức fillna() của DataFrame. Việc điền các giá trị thiếu giúp
giảm thiểu lỗi trong quá trình phân tích và mô hình hóa dữ liệu sau này. Tóm lại,
bằng cách sử dụng giá trị 'No infor', người dùng cuối thể dễ dàng nhận diện
các trường hợp thiếu dliệu không gây ảnh hưởng đến phân tích khác trong
bộ dữ liệu sẵn có.
3.2.2 Xử lý giá trị bị trùng lặp
Hình 3.9 Đoạn code xử lý giá trị bị trùng lặp
Đoạn Python trên loại bỏ các hàng trùng lặp trong DataFrame df dựa
trên cột id. Hàm remove_duplicates(df) nhận vào một DataFrame sử dụng
phương thức drop.duplicates() của Pandas với tham số subset=['id'].
lOMoARcPSD| 58728417
Báo cáo cuối k Trang
Việc chỉ loại bỏ các hàng dựa trên ct id vì nó được quy ước là khóa chính
của bảng dliệu (đã đcập mục 2.2.1). Do đó, nếu một bản ghi giá trị id
trùng lặp, nghĩa sự không nhất quán hoặc sai sót trong dữ liệu, cần phải
loại bỏ bớt các hàng trùng này đđảm bảo mỗi id duy nhất trong DataFrame.
Ngoài ra, việc tìm kiếm và loại bỏ các hàng trùng lặp dựa trên toàn bộ các cột sẽ
mất nhiều thời gian và tài nguyên tính toán hơn. Chính vì vậy. quá trình làm sạch
dữ liệu sẽ trở nên nhanh chóng và hiệu quả hơn, đồng thời vẫn đảm bảo tính toàn
vẹn của dữ liệu khi tính toán dựa vào khóa chính, cụ thể ở đây là trường id.
3.2.3 Chuẩn hóa dữ liệu
Hình 3.10 Đoạn code chuẩn hóa giá trị của trưởng age
Đoạn mã Python trên giúp chuyển đổi cột age trong DataFrame df thành số
nguyên dương, đảm bảo tính nhất quán chính xác cho dữ liệu. Trước tiên,
kiểm tra xem cột age tồn tại hay không bằng câu lệnh if 'age' in df.columns.
Nếu cột này tồn tại, schuyển đổi các giá trị trong cột thành kiểu số bằng cách
sử dụng pd.to_numeric(df['age'], errors='coerce'), câu lệnh này cho phép chương
trình thay thế các giá trị không thể chuyển đổi được sang dạng snguyên thành
NaN. Sau đó, các giá trị NaN được điền bằng 0 qua hàm fillna(0), và chuyển đổi
thành số nguyên với astype(int). Cuối cùng, sử dụng abs(df['age']) để lấy giá
trị tuyệt đi của tất cả các phần tử trong cột age nhằm đảm bảo rằng tất cả các giá
trị này là số nguyên dương bởi lẽ cột age đại diện cho tuổi của con người.
Hình 3.11 Đoạn code chuẩn hóa dữ liệu ở các trường liên quan đến rating
Tương tự như đoạn lệnh trước đó, đoạn này đảm bảo các cột đánh giá
chỉ chứa các số nguyên không âm từ 0 đến 5. Đầu tiên, đoạn xác định một

Preview text:

lOMoAR cPSD| 58728417
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KỲ
MÔN HỌC: LẬP TRÌNH PYTHON
CHƯƠNG TRÌNH QUẢN LÝ SINH VIÊN ĐẠI HỌC NEW YORK
Mã lớp học phần: [UTE] IPPA233277_06
Học kỳ 1 – Năm học 2024 – 2025
Giảng viên hướng dẫn: ThS. Trần Quang Khải
Danh sách sinh viên thực hiện: MSSV Họ tên 23110187 Phạm Hàn Minh Chương 23110266 Nguyễn Thanh Bình Minh 23110336 Nguyễn Thị Thanh Thùy
Thành phố Hồ Chí Minh, tháng 11 năm 2024 lOMoAR cPSD| 58728417
Nhận xét của giảng viên
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
TP. Hồ Chí Minh, ngày … tháng… năm 2024 Giảng viên ký tên lOMoAR cPSD| 58728417 MỤC LỤC
DANH MỤC HÌNH ẢNH...................................................................................1
DANH MỤC BẢNG............................................................................................2
PHẦN MỞ ĐẦU..................................................................................................3 1. Lý do chọn đề
tài..........................................................................................3 2. Mục tiêu đề
tài..............................................................................................3 3. Đối tượng phạm vi nghiên
cứu...............................................................3 PHẦN NỘI
DUNG..............................................................................................5
CHƯƠNG 1: TÓM TẮT CƠ SỞ LÝ THUYẾT...............................................5
1.1. Giới thiệu về Python..................................................................................5
1.1.1 Lịch sử của Python...............................................................................5
1.1.2 Đặc điểm của Python............................................................................5
1.2. Giới thiệu về một số thư viện phổ biến của Python................................5
1.3 Giới thiệu Version control system (Git)....................................................6
CHƯƠNG 2: MÔ TẢ DỮ LIỆU........................................................................8
2.1. Nguồn gốc dữ liệu......................................................................................8
2.2. Mô tả trường dữ liệu.................................................................................8
2.3. Ý nghĩa bộ dữ liệu.....................................................................................9
CHƯƠNG 3: ỨNG DỤNG VÀO XỬ LÝ DỮ LIỆU......................................10
3.1 Thao tác Thêm, Sửa, Xóa, Cập nhật Dữ liệu (CRUD)..........................10
3.1.1. Giới thiệu về CRUD...........................................................................10
3.1.2. Triển khai chức năng.........................................................................10
3.2 Làm sạch dữ liệu......................................................................................13
3.2.1 Xử lý giá trị còn thiếu.........................................................................13
3.2.2 Xử lý giá trị bị trùng lặp.....................................................................16
3.2.3 Chuẩn hóa dữ liệu..............................................................................16
3.2.4 Lưu trữ dữ liệu đã được làm sạch......................................................17
3.3. Trực quan hóa dữ liệu.............................................................................18
3.3.1. Biểu đồ phân bố độ tuổi.....................................................................18
3.3.2. Phân bố quốc tịch của sinh viên NYU..............................................18
3.3.3. Phân tích tỷ lệ giới tính giữa các sinh viên NYU.............................20
3.3.4. Phân tích điểm học tập của sinh viên...............................................21
3.3.5. Phân tích điểm số trung bình dựa trên những tiêu chí đánh giá....22
3.3.6. Tương quan giữa Điểm và Các tiêu chí đánh giá............................23
3.3.7. Mối quan hệ giữa tuổi và điểm số.....................................................24 lOMoAR cPSD| 58728417
3.3.8. Phân tích sự phân bố điểm theo từng môn học................................25
3.3.9. Sự tương quan giữa các môn học và độ tuổi (student_function)....27
3.4 Xử lý dữ liệu trước thống kê...................................................................28
3.4.1 Sắp xếp dữ liệu theo điểm số giảm dần..............................................28
3.4.2 Sắp xếp dữ liệu theo độ tuổi tăng dần................................................29
3.5. Xây dựng giao diện và Chức năng.........................................................29
3.5.1 Giới thiệu về giao diện và chức năng:...............................................29
3.5.2 Thiết kế và phát triển..........................................................................30
3.5.3 Tích hợp các chức năng......................................................................31 KẾT
LUẬN........................................................................................................44
TÀI LIỆU THAM KHẢO................................................................................45 lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang DANH MỤC HÌNH ẢNH
Hình 3.1 Đoạn code thêm dữ liệu mới vào file csv............................................10
Hình 3.2 Đoạn code đọc dữ liệu từ file csv.........................................................11
Hình 3.3 Đoạn code cập nhật thông tin sinh viên trong file csv.........................12
Hình 3.4 Đoạn code xóa sinh viên khỏi dataFrame dựa trên ID........................12
Hình 3.5 Đoạn code loại bỏ record khi không chứa id.......................................13
Hình 3.6 Đoạn code xử lý giá trị bị thiếu ở trưởng có kiểu dữ liệu Float, Int...14
Hình 3.7 Đoạn code xử lý xử lý giá trị bị thiếu ở trường age.............................14
Hình 3.8 Đoạn code xử lý giá trị bị thiếu ở các trưởng có kiểu dữ liệu String. .15
Hình 3.9 Đoạn code xử lý giá trị bị trùng lặp.....................................................16
Hình 3.10 Đoạn code chuẩn hóa giá trị của trưởng age....................................16
Hình 3.11 Đoạn code chuẩn hóa dữ liệu ở các trường liên quan đến rating.....17
Hình 3.12 Đoạn code lưu trữ dữ liệu đã được làm sạch vào file chỉ định.........17
Hình 3.13 Code tạo biểu đồ phân bố độ tuổi......................................................18
Hình 3.14 Biểu đồ phân bố độ tuổi của sinh viên đại học New York..................18
Hình 3.15 Code tạo biểu đồ phân bố quốc tịch..................................................19
Hình 3.16 Biểu đồ thể hiện phân bố quốc tịch của sinh viên NYU.....................19
Hình 3.17 Code tùy chỉnh hover.........................................................................20
Hình 3.18 Code vẽ biểu đồ tỉ lệ giới tính............................................................20
Hình 3.19 Biểu đồ biểu diễn tỉ lệ giới tính của nhóm sinh viên NYU.................21
Hình 3.20 Code tạo biểu đồ điểm học tập sinh viên NYU..................................21
Hình 3.21 Biểu đồ điểm trung bình học tập trên dữ liệu sinh viên NYU............22
Hình 3.22 Code tạo biểu đồ Điểm đánh giá cá nhân trung bình........................22
Hình 3.23 Biểu đồ Điểm Đánh giá cá nhân trung bình......................................23
Hình 3.24 Code vẽ biểu đồ tương quan giữa Điểm và Đánh giá cá nhân..........23
Hình 3.25 Biểu đồ tương quan giữa Điểm và Đánh giá cá nhân của nhóm sinh
viên trên dữ liệu..................................................................................................24
Hình 3.26 Code tạo biểu đồ cho thấy mối quan hệ giữa tuổi và điểm số...........24
Hình 3.27 Biểu đồ thể hiện Mối quan hệ giữa Tuổi và Điểm số.........................25 lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Hình 3.28 Code tạo biểu đồ phân bố điểm theo từng môn học...........................25
Hình 3.29 Biểu đồ phân bố theo từng môn học..................................................26
Hình 3.30 Code tạo ma trận tương quan............................................................27
Hình 3.31 Biểu đồ thể hiện sự tương quan giữa tuổi và điểm các môn học.......27
Hình 3.32 Đoạn code sắp xếp dữ liệu theo điểm trung bình giảm dần..............28
Hình 3.33 Đoạn code sắp xếp dữ liệu tăng dần theo độ tuổi..............................29
Hình 3.34 Giao diện đăng nhập..........................................................................31
Hình 3.35 Code logic xử lí đăng nhập................................................................33
Hình 3.36 Giao diện đăng kí...............................................................................34
Hình 3.37 Code logic xử lí đăng kí.....................................................................35
Hình 3.38 Giao diện trang chủ...........................................................................36
Hình 3.39 Giao diện trang quản lí......................................................................37
Hình 3.40 Giao diện thêm sinh viên....................................................................38
Hình 3.41 Giao diện cập nhật sinh viên.............................................................39
Hình 3.42 Giao diện xóa sinh viên......................................................................39
Hình 3.43 Giao diện trang trực quan.................................................................40
Hình 3.44 Giao diện trang thống kê...................................................................42
Hình 3.45 Giao diện lọc sinh viên......................................................................42
Hình 3.46 Giao diện hiển thị sắp xếp sinh viên theo tuổi...................................43 DANH MỤC BẢNG
Bảng 2.1 Tóm tắt các trường của bộ dữ liệu.........................................................8 PHẦN MỞ ĐẦU
1. Lý do chọn đề tài
Quản lý sinh viên trong các trường học ngày nay đòi hỏi một lượng lớn nỗ
lực và tài nguyên, đặc biệt khi số lượng sinh viên không ngừng tăng cao, bên cạnh
đó, phương pháp thủ công không những tiêu tốn thời gian mà còn dễ dẫn đến sai
sót, làm ảnh hưởng đến hiệu quả hoạt động của nhà trường. Để khắc phục những
hạn chế này, việc ứng dụng công nghệ thông tin vào quản lý sinh viên trở thành
một nhu cầu cấp thiết nhằm nâng cao hiệu quả và độ chính xác.
Sự phát triển mạnh mẽ của công nghệ đã mở ra nhiều cơ hội trong việc tối
ưu hóa các quy trình quản lý. Các phần mềm ứng dụng không chỉ giúp tự động
hóa các công việc thủ công mà còn cung cấp khả năng phân tích dữ liệu và ra
quyết định nhanh chóng. Điều này không những giảm tải công việc cho cán bộ lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
quản lý mà còn nâng cao chất lượng phục vụ sinh viên. Việc phát triển một ứng
dụng quản lý sinh viên do đó trở thành giải pháp thiết thực, có tính khả thi cao và
tiềm năng mở rộng. Ngoài ra, xu hướng chuyển đổi số trong giáo dục đòi hỏi các
trường học phải liên tục cải tiến và hiện đại hóa hệ thống quản lý. Một ứng dụng
quản lý sinh viên tích hợp không chỉ đáp ứng nhu cầu hiện tại mà còn tạo điều
kiện cho nhà trường tiến tới quản trị thông minh, đồng bộ hóa dữ liệu và hỗ trợ
học tập hiệu quả hơn. Tóm lại, việc chọn đề tài này không chỉ mang ý nghĩa thực
tiễn mà còn góp phần vào quá trình chuyển đổi số và đổi mới nền giáo dục.
2. Mục tiêu đề tài
Mục tiêu của đề tài là thiết kế và phát triển một ứng dụng phần mềm giúp
quản lý thông tin sinh viên một cách hiệu quả, bao gồm các chức năng như: thêm,
xóa, sửa thông tin sinh viên; tìm kiếm; trực quan hóa dữ liệu; và tạo giao diện
tương tác với người dùng.
Hơn nữa, ứng dụng sẽ cung cấp các công cụ phục vụ người quản lý như
chức năng tự động tổng hợp số liệu, thống kê hiệu suất học tập của sinh viên, và
tích hợp tính năng báo cáo linh hoạt. Mục tiêu cụ thể là tăng độ chính xác và hiệu
suất trong việc quản lý, giúp người dùng có thể truy cập dữ liệu nhanh chóng và dễ dàng.
3. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu của đề tài này là:
• Tập dữ liệu Academic and Personal Data from NYU Students: gồm những
thông tin về id, name, country, city, litatude, longtitude, gender, ethenic group,
age, math grade, scienes grade, language grade, portfolio rating, coverletter rating, refletter rating.
• Sinh viên và cán bộ quản lý: những người tham gia vào quá trình cho ra kết
quả của tập dữ liệu và những người dùng ứng dụng để quản lý sinh viên trên cơ sở dữ liệu nêu trên.
Phạm vi nghiên cứu:
• Dựa trên tập tin tiến hành phân tích dữ liệu.
• Đưa ra những quy trình phù hợp: Dựa trên cơ sở môn Lập trình python để
tạo ra những bước xử lí, trực quan dữ liệu và thiết kế giao diện phù hợp. lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang PHẦN NỘI DUNG
CHƯƠNG 1: TÓM TẮT CƠ SỞ LÝ THUYẾT
1.1. Giới thiệu về Python
Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng
web, phát triển phần mềm, khoa học dữ liệu và học máy (ML). Các nhà phát triển
sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác
nhau. Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại
hệ thống và tăng tốc độ phát triển.
1.1.1 Lịch sử của Python
Guido Van Rossum, một lập trình viên máy tính ở Hà Lan, đã tạo ra Python.
Ông bắt đầu phát triển ngôn ngữ này vào năm 1989 tại Centrum Wiskunde &
Informatica (CWI) và tên gọi của ngôn ngữ này được lấy cảm hứng từ chương
trình truyền hình Monty Python's Flying Circus của đài BBC vì Guido Van
Rossum là một người hâm mộ của chương trình này.
* Lịch sử các phiên bản Python
Guido Van Rossum cho ra mắt phiên bản đầu tiên của ngôn ngữ Python
(phiên bản 0.9.0) vào năm 1991. •
Python 1.0 đã được ra mắt vào năm 1994 với các hàm mới để dễ dàng xử
lý danh sách dữ liệu, chẳng hạn như ánh xạ, lọc và lược bỏ. •
Python 2.0 đã được ra mắt vào ngày 16 tháng 10 năm 2000, với các tính
năng hữu ích mới cho lập trình viên, chẳng hạn như hỗ trợ ký tự Unicode
và cách xử lý chi tiết một danh sách nhanh chóng hơn. •
Python 3.0 đã được ra mắt vào ngày 3 tháng 12 năm 2008. Phiên bản này
bao gồm các tính năng như hàm in và hỗ trợ nhiều hơn cho việc phân chia số và xử lý lỗi.
1.1.2 Đặc điểm của Python
Python là một ngôn ngữ thông dịchhỗ trợ nhiều mô hình lập trình:
Python là một ngôn ngữ lập trình đa mô hình (multi-paradigm), có nghĩa là nó hỗ
trợ nhiều mô hình lập trình khác nhau: •
Lập trình thủ tục (Procedural Programming): mô hình lập trình truyền
thống, trong đó chương trình được cấu trúc thành các thủ tục hoặc hàm •
Lập trình hướng đối tượng (Object-Oriented Programming): mô hình
lập trình dựa trên khái niệm "đối tượng", nơi dữ liệu và các hành vi liên
quan được nhóm lại với nhau thành các đối tượng •
Lập trình hàm (Functional Programming): mô hình lập trình trong đó
các hàm được coi là các đơn vị cơ bản của việc xây dựng chương trình
1.2. Giới thiệu về một số thư viện phổ biến của Python lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang Pandas
Pandas ra đời vào năm 2008 và được phát triển bởi Wes McKinney. Cái tên
“Pandas” xuất phát từ thuật ngữ trong kinh tế lượng “Panel Data” mô tả các tập
dữ liệu gồm các quan sát trong nhiều khoảng thời gian. Pandas được thiết kế để
làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều, có
tiềm năng không đồng nhất) và dữ liệu chuỗi thời gian. Mục tiêu của pandas là
trở thành khối căn bản (building block) cấp cao cơ bản cho công việc thực tế,
phân tích dữ liệu thế giới thực trong Python, và rộng hơn là trở thành công cụ thao
tác/phân tích mã nguồn mở mạnh mẽ và linh hoạt nhất có sẵn trong bất kỳ loại
ngôn ngữ lập trình nào. Matpolib
Matplotlib là một thư viện vẽ đồ thị trong Python rất phổ biến, được sử
dụng để tạo ra các biểu đồ và đồ thị tĩnh, động, và tương tác. Thư viện này được
phát triển bởi John D. Hunter vào năm 2003. Thư viện này cho phép người dùng
vẽ rất nhiều loại biểu đồ khác nhau như biểu đồ đường, biểu đồ thanh, biểu đồ
phân tán, biểu đồ hình bánh, biểu đồ hộp và râu, cũng như nhiều loại đồ thị khác.
Matplotlib có cấu trúc API mô-đun, giúp cho người dùng có thể dễ dàng sử dụng
các chức năng từ cơ bản đến nâng cao. Ngoài ra, Matplotlib còn tích hợp tốt với
nhiều thư viện khác như NumPy, Pandas, và SciPy, giúp việc xử lý và trực quan
hóa dữ liệu trở nên dễ dàng hơn. Bên cạnh đó, thư viên cũng hỗ trợ nhiều định
dạng đầu ra, cho phép xuất đồ thị ở nhiều thể loại file như PNG, PDF, SVG, EPS, và PGF. Tkinter
Tkinter là một thư viện trong ngôn ngữ lập trình Python được sử dụng để
tạo giao diện đồ họa người dùng (GUI). "Tkinter" là viết tắt của "Tk interface",
một toolkit đồ họa cung cấp các công cụ để phát triển giao diện người dùng.
Tkinter là một phần của thư viện tiêu chuẩn của Python và đã được tích hợp sẵn
trong hầu hết các cài đặt Python và một lựa chọn phổ biến cho việc phát triển ứng
dụng với giao diện đồ họa đơn giản trong Python.
Các đặc điểm của Tkinter bao gồm khả năng tạo các thành phần giao diện
như cửa sổ, nút, ô văn bản, và các widget khác để tương tác với người dùng. Bên
cạnh đó, Tkinter cung cấp cả các sự kiện và phương thức để xử lý tương tác người
dùng và thay đổi trạng thái của ứng dụng. Chính vì vậy, Tkinter được xem như là
một thư viện trong Python giúp tạo ra giao diện đồ họa người dùng (GUI), hỗ trợ
người dùng tương tác với ứng dụng một cách trực quan và dễ sử dụng nhất.
1.3 Giới thiệu Version control system (Git)
Git là tên gọi là một hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay
(Distributed Version Control System – DVCS). DVCS nghĩa là hệ thống giúp mỗi
máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân
bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
trên máy tính sẽ có thể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa
chính, bên cạnh đó, các mã này cũng có thể được truy cập bởi những thiết bị khác
khi được cấp quyền. Và trong Git, thư mục làm việc trên máy tính gọi là Working
Tree. Chính vì vậy, Git đặc biệt hữu ích trong môi trường làm việc nhóm, nơi
nhiều người có thể làm việc trên cùng một dự án mà hạn chế xung đột hoặc tổn
thất dữ liệu. Bên cạnh đó, để làm việc từ xa và tích hợp liên tục (CI) với Git, hiện
nay các nền tảng như GitHub, GitLab và Bitbucket đã được thiết kế và phát triển
môi trường hỗ trợ Git, giúp lập trình quản lý dự án dễ dàng và hiệu quả hơn. lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
CHƯƠNG 2: MÔ TẢ DỮ LIỆU
2.1. Nguồn gốc dữ liệu
Tập dữ liệu dùng để thực hiện đồ án được tải từ Kaggle, dataset của Kaggle
là tính năng hữu ích nhất vì việc tìm nguồn dữ liệu tại thời gian thực là vấn đề
quan trọng với hầu hết các nhà khoa học dữ liệu. Việc cung cấp nguồn dữ liệu đa
dạng tạo nên nơi để các nhà nghiên cứu, lập trình viên và chuyên gia dữ liệu chia
sẻ và học hỏi kinh nghiệm. Thêm vào đó, các bộ dữ liệu từ Kaggle thường kèm
theo mô tả chi tiết, giúp người dùng nắm rõ cách thức thu thập và cấu trúc dữ liệu.
Dữ liệu được tổng hợp từ một nhóm các sinh viên với thông tin chi tiết về
lý lịch, học vấn và các kỹ năng mềm của họ. Mỗi hàng đại diện cho một sinh viên
và chứa các thông tin bao gồm mã sinh viên, tên, quốc tịch, thành phố, tọa độ địa
lý, giới tính, nhóm dân tộc, tuổi và các điểm số liên quan đến các môn học cùng
với đánh giá về portfolio, thư xin việc và thư giới thiệu.
Việc chọn Kaggle giúp các nhóm nghiên cứu tiếp cận nhiều công cụ hỗ trợ
phân tích và học hỏi phương pháp mới từ cộng đồng, nâng cao chất lượng nghiên cứu tổng thể.
2.2. Mô tả trường dữ liệu
Thông tin chi tiết về lý lịch, học vấn và các kỹ năng mềm của sinh viên Đại
học New York từ bộ dữ liệu bao gồm:
Bảng 2.1 Tóm tắt các trường của bộ dữ liệu Tên trường Chi tiết id
Mã số nhận dạng duy nhất của sinh viên (Khóa chính) name Tên sinh viên. nationality
Quốc tịch của sinh viên. city
Thành phố nơi sinh viên sinh sống.
latitude longitude Tọa độ địa lý của thành phố nơi sinh viên sinh sống. gender
Giới tính của sinh viên. ethnic.group
Nhóm dân tộc của sinh viên. age Tuổi của sinh viên. english.grade Điểm môn tiếng Anh. math.grade Điểm môn Toán. sciences.grade Điểm các môn khoa học. language.grade
Điểm các môn ngôn ngữ khác. portfolio.rating
Đánh giá về portfolio của sinh viên. coverletter.rating
Đánh giá về thư xin việc của sinh viên. refletter.rating
Đánh giá về thư giới thiệu của sinh viên.
Chương 1: Tóm tắt cơ sở lý thuyết lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
2.3. Ý nghĩa bộ dữ liệu
Dataset này cung cấp một cái nhìn toàn diện về hồ sơ học tập và các kỹ
năng mềm của sinh viên. Các điểm số và đánh giá không chỉ phản ánh khả năng
học tập mà còn là những chỉ số quan trọng để đánh giá khả năng thành công của
sinh viên trong các môi trường học thuật và công việc. Việc phân tích dữ liệu này
có thể giúp các trường học và nhà tuyển dụng hiểu rõ hơn về các ứng viên, từ đó
đưa ra các quyết định tuyển sinh và tuyển dụng phù hợp.
Chương 1: Tóm tắt cơ sở lý thuyết lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Chương 2: Mô tả dữ liệu CHƯƠNG 3: ỨNG DỤNG VÀO XỬ LÝ DỮ LIỆU
3.1 Thao tác Thêm, Sửa, Xóa, Cập nhật Dữ liệu (CRUD)

3.1.1. Giới thiệu về CRUD
CRUD (Create, Read, Update, Delete) là bốn thao tác cơ bản trong việc quản lý
dữ liệu. Trong ứng dụng này, các thao tác CRUD được áp dụng trên dữ liệu sinh
viên được lưu trữ dưới dạng file CSV (data_clean.csv).
- Thêm dữ liệu (Create): Cho phép người dùng thêm mới thông tin sinh viên vàofile dữ liệu.
- Đọc dữ liệu (Read): Hiển thị dữ liệu hiện có từ file CSV để xem hoặc chỉnhsửa.
- Cập nhật dữ liệu (Update): Cập nhật thông tin sinh viên theo ID.
- Xóa dữ liệu (Delete): Xóa thông tin sinh viên dựa trên ID.3.1.2. Triển khai chức
năng Công Cụ Sử Dụng:
- Ngôn ngữ chính: Python.
- Thư viện xử lý dữ liệu: Pandas, NumPy.
3.1.2.1 Thêm dữ liệu (Create)
Hàm create_data(student_data, file_path) thêm dữ liệu sinh viên mới vào file CSV
Hình 3.1 Đoạn code thêm dữ liệu mới vào file csv
Hàm create_data thêm dữ liệu sinh viên vào tệp CSV, đảm bảo tiêu đề cột
luôn ở đầu. Đầu tiên, hàm đọc dữ liệu hiện có từ tệp bằng cách mở tệp ở chế độ
đọc (mode='r') và sử dụng csv.reader để chuyển đổi nội dung tệp thành danh lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
sách các hàng. Nếu tệp không tồn tại(FileNotFoundError), một danh sách rỗng
được khởi tạo. Tiếp theo, nếu tệp chưa có dữ liệu hoặc không chứa tiêu đề, tiêu
đề cột được thêm vào danh sách current_data. Dữ liệu sinh viên mới
(student_data) sau đó được chèn vào cuối danh sách. Cuối cùng, hàm mở lại tệp
ở chế độ ghi (mode='w') và sử dụng csv.writer để ghi toàn bộ dữ liệu (bao gồm
tiêu đề và dữ liệu mới) trở lại tệp CSV.
3.1.2.2 Đọc dữ liệu (Read)
Hàm read_data(file_path) hiển thị nội dung dữ liệu từ file CSV.
Hình 3.2 Đoạn code đọc dữ liệu từ file csv
Đoạn mã này đọc dữ liệu từ tệp CSV và trả về danh sách các hàng. Đầu tiên, tệp
CSV được mở bằng phương thức with open, sử dụng mã hóa UTF-8 và cấu hình
để tránh thêm dòng trống không cần thiết. Sau đó, csv.reader được dùng để đọc
từng hàng trong tệp, và tất cả các hàng được lưu vào danh sách bằng list(reader).
Nếu tệp không chứa dữ liệu, một thông báo sẽ được hiển thị để báo rằng không
có dữ liệu để hiển thị. Nếu xảy ra lỗi, ví dụ như tệp không tồn tại hoặc lỗi khác,
các thông báo lỗi cụ thể sẽ được hiển thị cho người dùng bằng messagebox.
Trong cả hai trường hợp lỗi, hàm sẽ trả về None.
3.1.2.3 Cập nhật dữ liệu (Update)
Hàm update_data(student_id, new_info) cập nhật thông tin sinh viên theo ID. lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Hình 3.3 Đoạn code cập nhật thông tin sinh viên trong file csv
Đoạn mã trên thực hiện việc cập nhật thông tin sinh viên trong một tệp
CSV. Đầu tiên, hàm update_data nhận vào hai tham số: student_id (ID sinh viên
cần cập nhật) và new_info (danh sách thông tin mới). Bằng cách sử dụng
csv.reader, dữ liệu từ tệp CSV data_clean.csv được đọc vào dưới dạng danh sách
các dòng. Sau đó, hàm duyệt qua từng dòng trong tệp và kiểm tra xem ID sinh
viên có khớp với student_id hay không. Nếu tìm thấy sinh viên có ID trùng khớp,
thông tin sinh viên sẽ được cập nhật (giữ nguyên ID và thay thế các trường còn
lại bằng new_info). Sau khi cập nhật, hàm sẽ ghi lại dữ liệu mới vào tệp CSV
bằng csv.writer. Nếu việc cập nhật thành công, hàm trả về True, ngược lại trả về False.
3.1.2.4 Xóa dữ liệu (Delete)
Hàm delete_data (df, student_id) xóa sinh viên dựa trên ID từ DataFrame. lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Hình 3.4 Đoạn code xóa sinh viên khỏi dataFrame dựa trên ID
Đoạn mã trên thực hiện chức năng xóa sinh viên khỏi DataFrame dựa trên
ID sinh viên. Hàm delete_data nhận vào hai tham số: df (DataFrame chứa dữ liệu
sinh viên) và student_id (ID của sinh viên cần xóa). Đầu tiên, hàm tìm vị trí
(index) của sinh viên có id trùng khớp với student_id trong DataFrame, sau khi
chuyển đổi id thành chuỗi để so sánh. Nếu tìm thấy sinh viên có ID khớp, hàm sẽ
xóa dòng dữ liệu đó bằng cách sử dụng phương thức drop và trả lại
DataFrame đã được cập nhật. Nếu không tìm thấy sinh viên, hàm trả về None
3.2 Làm sạch dữ liệu
3.2.1 Xử lý giá trị còn thiếu

Dữ liệu thiếu (hay còn gọi là Missing Data hoặc NaN trong ngôn ngữ lập
trình) là tình trạng xảy ra khi một số giá trị trong bộ dữ liệu không có sẵn hoặc
không được ghi nhận. Chính vì vậy, những giá trị đó sẽ ảnh hưởng đến kết quả
phân tích cuối cùng và để giải quyết vấn đề, ta có một số cách xử lý như sau:
Xóa bản ghi khi bị thiếu khóa chính lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Hình 3.5 Đoạn code loại bỏ record khi không chứa id
Đoạn mã Python trên dùng để loại bỏ các bản ghi (record) trong DataFrame
df mà không có giá trị trong cột id. Điều này được thực hiện bằng phương thức
dropna(), với tham số subset được đặt là ['id']. Cụ thể, khi chạy dòng lệnh df =
df.dropna(subset=['id']), DataFrame df sẽ loại bỏ tất cả các hàng mà giá trị trong cột id là NaN.
Nguyên nhân cần loại bỏ các bản ghi không chứa giá trị id là vì trường này
được sử dụng như là khóa chính (primary key) trong cơ sở dữ liệu. Khóa chính là
một thuộc tính hoặc tập hợp các thuộc tính đảm bảo mỗi bản ghi trong bảng là
duy nhất. Nó rất quan trọng trong việc quản lý và truy xuất dữ liệu, giúp tránh
việc có các bản ghi trùng lặp và duy trì tính toàn vẹn của dữ liệu. Vì thế, nếu có
bất kỳ bản ghi nào không có giá trị id, tức là thiếu khóa chính, điều này có thể gây
ra nhiều vấn đề trong quá trình quản lý dữ liệu và phân tích. Ví dụ, các bản ghi
không có khóa chính có thể dẫn đến lỗi khi thực hiện các thao tác tìm kiếm, liên
kết dữ liệu hoặc áp dụng các ràng buộc dữ liệu. Do đó, việc loại bỏ các bản ghi
thiếu id là cần thiết để đảm bảo rằng mỗi bản ghi trong DataFrame đều có một
định danh duy nhất và dữ liệu được duy trì một cách chính xác và nhất quán.
• Thay thế giá trị còn thiếu ở dạng số bằng giá trị 0.0
Hình 3.6 Đoạn code xử lý giá trị bị thiếu ở trưởng có kiểu dữ liệu Float, Int
Đoạn mã Python trên xử lý giá trị thiếu trong hai loại cột khác nhau trong
DataFrame df là các cột có giá trị dạng số thực (float) và các cột có giá trị dạng
số nguyên (int). Đầu tiên, đoạn mã xác định một danh sách các cột số thực
columns_float gồm latitude, longitude, english.grade, math.grade, sciences.grade,
và language.grade. Vòng lặp for duyệt qua từng cột trong danh sách này, và nếu lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
cột đó tồn tại trong DataFrame, phương thức fillna(0.0) được sử dụng để điền tất
cả các giá trị thiếu trong cột đó bằng giá trị 0.0. Tương tự, đoạn mã xác định một danh sách các cột số nguyên columns_int gồm
portfolio.rating,coverletter.rating,và refletter.rating. Vòng lặp for tiếp tục kiểm tra
sự tồn tại của từng cột trong DataFrame và sử dụng phương thức fillna(0) để điền
các giá trị thiếu bằng giá trị 0.
Nguyên nhân của việc điền các giá trị thiếu bằng 0.0 hoặc 0 là nhằm tránh
ảnh hưởng tiêu cực của dữ liệu thiếu đến các phân tích thống kê và mô hình hóa
sau này và hạn chế bị sai lệch bởi sự thiếu hụt dữ liệu.
• Thay thế giá trị còn thiếu ở dạng số bằng giá trị trung bình hoặc trung vị
Hình 3.7 Đoạn code xử lý xử lý giá trị bị thiếu ở trường age
Đoạn mã Python trên được sử dụng để xử lý giá trị thiếu (NaN) trong cột
age của DataFrame df bằng cách điền giá trị tuổi trung bình và làm tròn lên số
nguyên gần nhất lớn hơn hoặc bằng giá trị hiện tại. Việc này giúp đảm bảo tính
nhất quán và toàn vẹn dữ liệu, đặc biệt là khi các phân tích thống kê yêu cầu dữ
liệu không có giá trị thiếu.
Trước tiên, đoạn mã kiểm tra xem cột age có tồn tại trong DataFrame hay
không thông qua câu lệnh if 'age' in df.columns. Nếu cột age tồn tại, đoạn mã sẽ
tính giá trị tuổi trung bình của cột này bằng phương thức mean(). Tuy nhiên, đại
lượng tuổi phải là một số nguyên và để đảm bảo rằng giá trị điền vào mang giá trị
nguyên, hàm ceil()từ thư viện math được sử dụng, từ đó giá trị tuổi trung bình đã
được làm tròn này sẽ được lưu trữ trong biến ave_age.
Sau đó, đoạn mã sử dụng phương thức fillna() của DataFrame để điền giá
trị thiếu trong cột age bằng giá trị tuổi trung bình đã tính được. Điều này đảm bảo
rằng không còn giá trị thiếu nào trong cột age, giúp dữ liệu trở nên nhất quán và
dễ dàng hơn cho các phân tích sau này. Bên cạnh đó, Nguyên nhân của việc điền
giá trị thiếu bằng tuổi trung bình là để giảm thiểu tác động của dữ liệu thiếu đến
các phân tích thống kê và mô hình hóa. Giá trị trung bình được sử dụng vì nó đại lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
diện cho xu hướng trung tâm của dữ liệu, giúp các phân tích sau này không bị lệch.
Thay thế giá trị còn thiếu ở dạng duỗi thành “No infor”
Hình 3.8 Đoạn code xử lý giá trị bị thiếu ở các trưởng có kiểu dữ liệu String
Đoạn mã Python trên được sử dụng để điền các giá trị thiếu trong các cột
dữ liệu chuỗi (string columns) bằng giá trị 'No infor'. Cụ thể, danh sách các cột
cần kiểm tra và điền giá trị gồm: name, nationality, city, và gender.
Để thực hiện nhiệm vụ này, trước tiên ta cần viết mã định nghĩa một danh
sách các cột chuỗi columns_str chứa tên của các cột cần kiểm tra. Sau đó, mã sử
dụng vòng lặp for để duyệt qua từng cột trong danh sách columns_str. Trong mỗi
lần lặp, đoạn mã kiểm tra xem cột hiện tại có tồn tại trong DataFrame df hay
không bằng và thay thế tất cả các giá trị thiếu (NaN) trong cột đó bằng giá trị 'No
infor' bằng phương thức fillna() của DataFrame. Việc điền các giá trị thiếu giúp
giảm thiểu lỗi trong quá trình phân tích và mô hình hóa dữ liệu sau này. Tóm lại,
bằng cách sử dụng giá trị 'No infor', người dùng cuối có thể dễ dàng nhận diện
các trường hợp thiếu dữ liệu mà không gây ảnh hưởng đến phân tích khác trong bộ dữ liệu sẵn có.
3.2.2 Xử lý giá trị bị trùng lặp
Hình 3.9 Đoạn code xử lý giá trị bị trùng lặp
Đoạn mã Python trên loại bỏ các hàng trùng lặp trong DataFrame df dựa
trên cột id. Hàm remove_duplicates(df) nhận vào một DataFrame và sử dụng
phương thức drop.duplicates() của Pandas với tham số subset=['id']. lOMoAR cPSD| 58728417 Báo cáo cuối kỳ Trang
Việc chỉ loại bỏ các hàng dựa trên cột id vì nó được quy ước là khóa chính
của bảng dữ liệu (đã đề cập ở mục 2.2.1). Do đó, nếu một bản ghi có giá trị id
trùng lặp, nghĩa là có sự không nhất quán hoặc sai sót trong dữ liệu, và cần phải
loại bỏ bớt các hàng trùng này để đảm bảo mỗi id là duy nhất trong DataFrame.
Ngoài ra, việc tìm kiếm và loại bỏ các hàng trùng lặp dựa trên toàn bộ các cột sẽ
mất nhiều thời gian và tài nguyên tính toán hơn. Chính vì vậy. quá trình làm sạch
dữ liệu sẽ trở nên nhanh chóng và hiệu quả hơn, đồng thời vẫn đảm bảo tính toàn
vẹn của dữ liệu khi tính toán dựa vào khóa chính, cụ thể ở đây là trường id.
3.2.3 Chuẩn hóa dữ liệu
Hình 3.10 Đoạn code chuẩn hóa giá trị của trưởng age
Đoạn mã Python trên giúp chuyển đổi cột age trong DataFrame df thành số
nguyên dương, đảm bảo tính nhất quán và chính xác cho dữ liệu. Trước tiên, mã
kiểm tra xem cột age có tồn tại hay không bằng câu lệnh if 'age' in df.columns.
Nếu cột này tồn tại, mã sẽ chuyển đổi các giá trị trong cột thành kiểu số bằng cách
sử dụng pd.to_numeric(df['age'], errors='coerce'), câu lệnh này cho phép chương
trình thay thế các giá trị không thể chuyển đổi được sang dạng số nguyên thành
NaN. Sau đó, các giá trị NaN được điền bằng 0 qua hàm fillna(0), và chuyển đổi
thành số nguyên với astype(int). Cuối cùng, mã sử dụng abs(df['age']) để lấy giá
trị tuyệt đối của tất cả các phần tử trong cột age nhằm đảm bảo rằng tất cả các giá
trị này là số nguyên dương bởi lẽ cột age đại diện cho tuổi của con người.
Hình 3.11 Đoạn code chuẩn hóa dữ liệu ở các trường liên quan đến rating
Tương tự như đoạn lệnh trước đó, đoạn mã này đảm bảo các cột đánh giá
chỉ chứa các số nguyên không âm từ 0 đến 5. Đầu tiên, đoạn mã xác định một