và đề xuất những thông tin bất động sản phù hợp với thông tin tìm kiếm và nhu cầu của người dùng Xây dựng hệ thống với các công nghệ mới như Nodejs, Reactjs, MongoDB.. Nhóm em chọn nhữ
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN CÔNG HIẾU – 18520743
VŨ CÁT - 18520515
KHÓA LUẬN TỐT NGHIỆP
RÚT TRÍCH VÀ TRỰC QUAN HOÁ DỮ LIỆU
TRONG LĨNH VỰC BẤT ĐỘNG SẢN
Extraction and data visualization in Real Estate
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
TP HỒ CHÍ MINH, 2022
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN CÔNG HIẾU – 18520743
VŨ CÁT – 18520515
KHÓA LUẬN TỐT NGHIỆP
RÚT TRÍCH VÀ TRỰC QUAN HOÁ DỮ LIỆU
Trang 3THÔNG TIN HỘI ĐỒNG CHẤM KHÓA LUẬN TỐT NGHIỆP
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số ……… ngày ……… của Hiệu trưởng Trường Đại học Công nghệ Thông tin
1 ……… – Chủ tịch
2 ……… – Thư ký
3 ……… – Ủy viên
Trang 4ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng… năm……
NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP (CỦA CÁN BỘ HƯỚNG DẪN/PHẢN BIỆN) Tên khóa luận: RÚT TRÍCH VÀ TRỰC QUAN HOÁ DỮ LIỆU TRONG LĨNH VỰC BẤT ĐỘNG SẢN Nhóm SV thực hiện: Cán bộ hướng dẫn/phản biện: Nguyễn Công Hiếu – 18520743 Thạc sĩ: Trần Anh Dũng Vũ Cát - 18520515 Đánh giá Khóa luận 1 Về cuốn báo cáo: Một số nhận xét về hình thức cuốn báo cáo: ………
………
………
………
2 Về nội dung nghiên cứu: ………
………
………
………
Trang 53 Về chương trình ứng dụng:
………
………
………
………
4 Về thái độ làm việc của sinh viên: ………
………
………
………
Đánh giá chung: ………
………
………
………
Điểm từng sinh viên: Nguyễn Công Hiếu: ……… /10
Vũ Cát: ……… /10
Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 6LỜI CẢM ƠN
Trong suốt quá trình học tập tại khoa Công Nghệ Phần Mềm trường Đại học Công nghệ thông tin, chúc em luôn nhận được sự quan tâm, hướng dẫn và giúp đỡ tận tình của các thầy, cô giáo trong trong khoa cùng với sự động viên và giúp đỡ của bạn bè và mọi người xung quanh
Lời đầu tiên chúng em xin được bài tỏ lòng biết ơn sâu sắc đến ThS Trần Anh Dũng đã giúp đỡ bọn em một cách tận tình, cũng như hướng dẫn đưa ra những hướng đi đúng đắn giúp bọn em hoàn thành khoá luận lần này một cách thành công nhất
Nhân dịp này chúng em cũng xin cảm ơn thầy Lê Thanh Trọng - cố vấn học tập của bọn em suốt 4 năm qua Thầy luôn quan tâm và giúp đỡ, đưa ra những kinh nghiệm và giúp tụi em có thể hoàn thành khoá học và tiến tới thực hiện khoá luận thành công như ngày hôm nay Một lần nữa tụi
em xin cảm ơn thầy
Đề tài đã được nhóm em nghiên cứu và thực hiện thành công Tuy nhiên vẫn còn những hạn chế về năng lực và những thiếu sót trong quá trình nghiên cứu và thực hiện Nhóm em xin lắng nghe và tiếp thu những ý kiến của giáo viên phản biện để hoàn thiện sản phẩm, bổ sung kiến thức
Nhóm em xin chân thành cảm ơn
TP HCM, ngày … tháng …năm …
Nguyễn Công Hiếu
Vũ Cát
Trang 7ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT
NAM Độc Lập - Tự Do - Hạnh Phúc
ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: RÚT TRÍCH VÀ TRỰC QUAN HÓA DỮ LIỆU TRONG LĨNH VỰC
BẤT ĐỘNG SẢN
(Extraction and data visualization in Real Estate)
Cán bộ hướng dẫn: Ths Trần Anh Dũng
Thời gian thực hiện: Từ ngày 28/02/2022 đến ngày 13/06/2022
Sinh viên thực hiện:
Nguyễn Công Hiếu - 18520743
Xây dựng hệ thống cho phép người dùng có thể tìm kiếm, so sánh thông tin một
cách trực quan dựa trên dữ liệu thu thập được từ các trang thông tin khác
Xây dựng trang web thông tin có các tin tức về thị trường bất động sản
Xây dựng hệ thống tích hợp AI phân tích, dự đoán giá nhà đất theo từng khu vực
Trang 8và đề xuất những thông tin bất động sản phù hợp với thông tin tìm kiếm và nhu cầu của người dùng
Xây dựng hệ thống với các công nghệ mới như Nodejs, Reactjs, MongoDB Nhóm
em chọn những công nghệ này vì chúng có tính bao quát rộng hơn, Nodejs hỗ trợ bất đồng bộ giúp nhiều phương thức chạy động thời, MongoDB là một noSQL hỗ trợ dễ dàng trong việc thêm dữ liệu, không cần khai báo biến mà sử dụng “key: value”, còn Reactjs là một frontend mới nổi do facebook tạo ra, hỗ trợ rất nhiều thư viện, giúp dễ dàng trong việc xây dựng ứng dụng
Phạm vi:
Phạm vi địa lý: Ứng dụng sử dụng tại Việt Nam
Phạm vi chức năng:
Quản lý người sử dụng
Quản lý bài viết
Quản lý thông tin bất động sản
Quản lý các biểu đồ
Quản lý tìm kiếm thông tin (recommend bài viết)
Quản lý AI hệ thống
Đối tượng: Những người có nhu cầu tìm kiếm và chia sẻ thông tin bất động sản tại thị
trường Việt Nam
Phương pháp thực hiện:
Tìm hiểu và phân tích các website bất động sản hiện có trên thị trường
Làm việc cá nhân, sử dụng request để lấy thông tin từ những trang web cụ thể, lưu xuống database và xuất lên cho người dùng thấy
Xậy dựng database với MongoDB
Trang 9 Xây dựng giao diện với ReactJS
Xây dựng hệ thống Restful API với NodeJS, Express và Django
Công nghệ sử dụng:
ReacJs: Xây dựng Front End
MongoDB: Xây dựng database
Nodejs, Django: Xây dựng Back End
ExpressJs: Xây dựng API
Postman: Kiểm tra các API đã xây dựng
PrimeReact, chartjs: Các Framework dùng để trực quan hóa dữ liệu
Visual Code: IDE để thực hiện đồ án
Kết quả mong đợi:
- Hoàn thiện ứng dụng web thu thập và chia sẻ thông tin bất động sản, đáp ứng đủ các nhu cầu cơ bản
- Trực quan hóa dữ liệu thu thập được và hiển thị cho người dùng
- Tích hợp được AI dự đoán giá bất động sản theo khu vực
- Xây dựng được hệ thống có thể phát triển sử dụng rộng rãi trong tương lai
Kế hoạch thực hiện:(Mô tả kế hoạch làm việc và phân công công việc cho từng sinh viên
tham gia)
Giai đoạn 1: Tìm hiểu, nghiên cứu
Trang 10Sprint 3 (21/03-03/04/2022)
Lựa chọn công nghệ cho phù hợp với sản
phẩm sẽ phát triển
Cả 2 thành viên:
- Đánh giá các công nghệ đã mô tả
- Lựa chọn công nghệ sẽ phát triển
- Lựa chọn công nghệ để deploy và public sản phẩm (AWS, Azure,….)
Giai đoạn 2: Triển khai
Trang 11kế databse - Thiết kế source code
Nguyễn Công Hiếu (Back-end):
- Thiết kế source code
- Thiết kế database Sprint 5 (18/04-08/05/2022)
Xây dựng tính năng AI dự đoán giá
- Phân tích địa điểm, thời gian, nhu cầu của người dùng để đưa ra đề xuất
- Tích hợp API với giao diện chức năng gợi ý các bất động sản phù hợp với người dùng
Giai đoạn 3: Hoàn thiện, trình bày
Sprint 7+ (30/05-13/06/2022)
Cải thiện giao diện, sửa lỗi và sẵn sàng
Cả 2 thành viên
- Sửa các lỗi liên quan đến hệ thống
- Cải thiện giao diện trải nghiệm
Trang 12Nguyễn Công Hiếu
Sinh viên 2 (Ký tên và ghi rõ họ tên)
Vũ Cát
Trang 13MỤC LỤC
TÓM TẮT KHOÁ LUẬN 1
Chương 1 TỔNG QUAN 2
1.1 Lý do chọn đề tài 2
1.2 Tính năng mới, khác biệt 2
1.3 Giới thiệu hệ thống website “Rút trích và trực quan hóa thông tin bất động sản” 3
1.4 Mục tiêu và phạm vi đề tài 4
1.4.1 Mục tiêu 4
1.4.2 Phạm vi 4
1.4.3 Đối tượng sử dụng 5
1.4.4 Kết quả dự kiến 5
Chương 2 CƠ SỞ LÝ THUYẾT 6
2.1 Nodejs 6
2.1.1 Giới thiệu về Nodejs 6
2.1.2 Tại sao nên sử dụng Nodejs 6
2.1.3 Áp dụng Nodejs vào đề tài 7
2.2 ExpressJS framework 7
2.2.1 Giới thiệu về ExpressJS 7
2.2.2 Tại sao nên sử dụng ExpressJS 9
2.2.3 Áp dụng ExpressJS vào đề tài 9
2.3 Django – Python: 9
2.3.1 Tổng quan về Django: 9
2.3.2 Những lợi thế của Django: 10
Trang 142.3.3 Sự phổ biến của Django: 11
2.3.4 Áp dụng Django vào đề tài: 11
2.4 MongoDB 11
2.4.1 Giới thiệu về MongoDB 11
2.4.2 Tại sao nên sử dụng hệ quản trị cơ sở dữ liệu MongoDB 12
2.4.3 Áp dụng MongoDB vào đề tài 13
2.5 Reactjs 14
2.5.1 Giới thiệu về Reactjs 14
2.5.2 Tại sao nên sử dụng Reactjs 14
2.6 Postman 16
2.6.1 Postman là gì? 16
2.6.2 Tại sao sử dụng Postman? 17
2.6.3 Áp dụng Postman vào đồ án: 17
2.7 Thuật toán Hồi quy tuyến tính: 17
2.7.1 Tổng quan về thuật toán Hồi quy tuyến tính: 17
2.7.2 Ví dụ về Hồi quy tuyến tính 18
2.7.3 Áp dụng thuật toán Hồi quy tuyến tính vào khóa luận 24
Chương 3 PHÁT BIỂU BÀI TOÁN 25
3.1 Giới thiệu hệ thống website “Rút trích và trực quan hóa thông tin bất động sản” 25
3.2 Khảo sát các hệ thống liên quan 26
3.2.1 Website batdongsan.com.vn 26
3.2.2 Website mogi.vn 28
3.2.3 Website alonhadat.com.vn 30
Trang 153.2.4 So sánh hệ thống với các website 31
3.3 Yêu cầu hệ thống 34
3.3.1 Yêu cầu chức năng 34
3.3.2 Yêu cầu phi chức năng 34
Chương 4 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 36
4.1 Sơ đồ phân rã cức năng: 36
4.2 Sơ đồ Use-case: 37
4.2.1 Danh sách các Actor: 38
4.2.2 Danh sách các Use-case: 38
4.2.3 Đặc tả một số use-case chính: 40
4.3 Các sơ đồ và luồng hoạt động 49
4.3.1 Đăng kí 49
4.3.2 Đăng nhập: 51
4.3.3 Tìm kiếm: 53
4.3.4 Sắp xếp: 55
4.3.5 Thiết lập biểu đồ: 57
4.3.6 Dự đoán giá nhà đất: 59
4.3.7 Đề xuất bài viết cho người dùng 61
4.4 Thiết kế kiến trúc: 63
4.4.1 Mô hình kiến trúc 63
4.4.2 Mô tả 63
4.4.3 Thiết kế cơ sở dữ liệu: 65
4.5 Thiết kế giao diện: 70
4.5.1 Màn hình đăng kí tài khoản: 70
Trang 164.5.2 Màn hình đăng nhập: 71
4.5.3 Màn hình trang chủ: 72
4.5.4 Màn hình xem thông tin tìm kiếm: 73
4.5.5 Màn hình xem chi tiết thông tin bài viết: 74
4.5.6 Màn hình xem thông tin biểu đồ: 75
4.5.7 Màn hình biểu đồ giá nhà đất trung bình theo thành phố 76
4.5.8 Màn hình dự đoán giá nhà đất trung bình theo quận (huyện): 77
4.5.9 Màn hình dự đoán giá nhà đất 78
Chương 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 79
5.1 Ưu điểm: 79
5.2 Nhược điểm: 79
5.3 Kết quả đạt được: 79
5.3.1 Về mặt nghiên cứu: 79
5.3.2 Về mặt sản phẩm: 80
5.4 Hướng phát triển: 80
TÀI LIỆU THAM KHẢO 81
Trang 17DANH MỤC HÌNH ẢNH
Hình 2.1 Blocking I/O (trái) và Non-Blocking I/O (phải) 7
Hình 2.2 Cấu trúc của ExpressJs 8
Hình 2.3 Lí do vì sao nên sử dụng Reactjs 16
Hình 2.4 Đường hồi quy tuyến tính 19
Hình 2.5 Đường hồi quy và đường thực tế 23
Hình 3.1 Trang chủ của batdongsan.com.vn 27
Hình 3.2 Trang chủ của mogi.vn 29
Hình 3.3 Trang chủ website alonhadat.com.vn 30
Hình 4.1 Sơ đồ phân rã chức năng 36
Hình 4.2 Sơ đồ Use-case tổng quan 37
Hình 4.3 Sơ đồ hoạt động chức năng đăng kí 49
Hình 4.4 Sơ đồ tuần tự chức năng đăng kí 50
Hình 4.5 Sơ đồ hoạt động chức năng đăng nhập 51
Hình 4.6 Sơ đồ tuần tự chức năng đăng nhập 52
Hình 4.7 Sơ đồ hoạt động chức năng tìm kiếm 53
Hình 4.8 Sơ đồ tuần tự chức năng tìm kiếm 54
Hình 4.9 Sơ đồ hoạt động chức năng sắp xếp 55
Hình 4.10 Sơ đồ tuần tự chức năng sắp xếp 56
Hình 4.11 Sơ đồ hoạt động chức năng thiết lập biểu đồ 57
Hình 4.12 Sơ đồ tuần tự chức năng thiết lập biểu đồ 58
Hình 4.13 Sơ đồ hoạt động chức năng dự đoán giá nhà đất 59
Hình 4.14 Sơ đồ tuần tự chức năng dự đoán giá nhà đất 60
Hình 4.15 Sơ đồ hoạt động chức năng đề xuất bài viết 61
Hình 4.16 Sơ đồ tuần tự chức năng đề xuất bài viết 62
Hình 4.17 Cơ sở dữ liệu SQLite 65
Hình 4.18 Cơ sở dữ liệu MongoDB 68
Hình 4.19 Màn hình đăng kí 70
Trang 18Hình 4.20 Màn hình đăng nhập 71
Hình 4.21 Màn hình trang chủ 72
Hình 4.22 Màn hình thông tin bài viết 73
Hình 4.23 Màn hình thông tin chi tiết bài viết 74
Hình 4.24 Màn hình thông tin biểu đồ 75
Hình 4.25 Màn hình thông tin biểu đồ giá nhà đất trung bình theo thành phố 76
Hình 4.26 Màn hình thông tin biểu đồ giá nhà đất trung bình theo quận (huyện) 77
Hình 4.27 Màn hình dự đoán giá nhà đất theo khu vực và diện tích 78
Trang 19DANH MỤC BẢNG
Bảng 3.1 Bảng so sánh giữa các hệ thống bất động sản 33
Bảng 4.1 Bảng danh sách người dùng 38
Bảng 4.2 Bảng danh sách use-case 39
Bảng 4.3 Bảng đặc tả use case đăng kí 40
Bảng 4.4 Bảng đặc tả use case đăng nhập 41
Bảng 4.5 Bảng đặc tả use case xem tin tức 42
Bảng 4.6 Bảng đặc tả use case tìm kiếm 43
Bảng 4.7 Bảng đặc tả use case sắp xếp 44
Bảng 4.8 Bảng đặc tả use case thiết lập biểu đồ 45
Bảng 4.9 Bảng đặc tả use case dự đoán giá nhà đất 47
Bảng 4.10 Bảng đặc tả use case đề xuất thông tin bất động sản 48
Bảng 4.11 Bảng mô tả thông tin các table trong database 65
Bảng 4.12 Bảng mô tả table User 66
Bảng 4.13 Bảng mô tả table LogSearch 67
Bảng 4.14 Bảng mô tả table LogPost 68
Bảng 4.15 Các collection trong database MongoDb 69
Bảng 4.16 Thông tin chi tiết collection PostDetail 69
Bảng 4.17 Mô tả thành phần màn hình đăng kí 70
Bảng 4.18 Mô tả thành phần màn hình đăng nhập 71
Trang 20MVC Model – View -
Controller
MVC là một mẫu kiến trúc phần mềm để tạo lập giao diện người dùng trên máy tính MVC chia thành ba phần được kết nối với nhau như tên gọi: Model (dữ liệu), View (giao diện) và Controller (bộ điều khiển)
API Application Programming
Interface
API là một tập các quy tắc và cơ chế mà theo
đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML
REST Representational State
Transfer
REST () là một dạng chuyển đổi cấu trúc dữ liệu, một kiểu kiến trúc để viết API Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếp giữa các máy Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin người dùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL
để xử lý dữ liệu
RDBMS Relational Database RDBMS có nghĩa là hệ quản trị cơ sỡ dữ liệu
Trang 21Management System quan hệ OLS
UI User Interface Giao diện người dùng
URL Uniform Resource
Locator
URL là định vị tài nguyên thống nhất Cụ thể, URL là địa chỉ của một tài nguyên duy nhất trên Web
Trang 221
TÓM TẮT KHOÁ LUẬN
- Khoá luận với đề tài “Rút trích và trực quan hoá dữ liệu trong lĩnh vực bất động sản” nhằm mục đích cung cấp một hệ thống hỗ trợ người dùng tìm kiếm, so sánh thông tin bất động sản một cách trực quan dưới dạng những biểu đồ Qua đó giúp người dùng
dễ dàng tìm kiếm, lựa chọn thông tin bất động sản phù hợp với nhu cầu của mình
- Hệ thống cũng tích hợp chức năng dự đoán giá nhà đất, giúp người dùng có thể
dự đoán được giá tiền ở khu vực mình lựa chọn thông qua diện tích mong muốn Thêm vào đó, hệ thống sẽ phân tích thông tin người dùng, thông tin tìm kiếm để đề xuất những bài đăng bất động sản phù hợp nhất với nhu cầu người dùng
- Hệ thống được xây dựng dựa trên nền tảng Web nên người dùng dễ dàng tiếp cận
và sử dụng Nhóm sử dụng công nghệ Django – Python và NodeJS cho phía Back-end,
và sử dụng ReactJS cho Front-end để thực hiện khoá luận
- Đồ án đã được nhóm nghiên cứu và thực hiện, đưa ra những tính năng phù hợp nhất cho người dùng Đây mà một ý tưởng mới, hiện tại chưa có hệ thống nào thực hiện nên có khả năng thu hút được khách hàng nếu phát triển thương mại
Trang 23Chương 1 TỔNG QUAN
1.1 Lý do chọn đề tài
- Thị trường bất động sản là một trong những thị trường có vị trí và vai trò quan trọng đối với nền kinh tế quốc dân, có quan hệ trực tiếp với các thị trường tài chính tiền tệ, thị trường xây dựng, thị trường vật liệu xây dựng, thị trường lao động Phát triển và quản lý có hiệu quả thị trường này sẽ góp phần quan trọng vào quá trình thúc đẩy phát triển kinh tế - xã hội, tạo khả năng thu hút các nguồn vốn đầu tư cho phát triển, đóng góp thiết thực vào quá trình phát triển đô thị và nông thôn bền vững theo hướng công nghiệp hoá, hiện đại hóa đất nước
- Với các kiến thức về công nghệ thông tin, ta có thể phát triển được 1 phần mềm hỗ trợ các chức năng cung cấp các thông tin thật và giúp người buôn bán và người mua có thể trao đổi thuận tiện hơn Ngoài ra cũng giúp người mua có thể tìm kiếm các thông tin phù hợp với nhu cầu của bản thân và tin tưởng vào các thông tin đăng trên website thay vì thông qua các cò đất không uy tin trên thị trường lúc bấy giờ
1.2 Tính năng mới, khác biệt
Sau khi tham khảo một số trang web bất động sản hiện nay nhóm nhận thấy những bất cập cần phải cải thiện sau đây:
- Rút trích và trực quan hóa dữ liệu để người dùng dễ dàng tìm kiếm thông tin về bất động sản
- Chưa có thống kê về thị trường bất động sản của từng khu vực
- Chưa có chức năng dự đoán giá của bất động sản trong tương lai
- Xem lịch sử tìm kiếm của người dùng
Từ đó nhóm quyết định thực hiện ứng dụng web với đầy đủ chức năng cơ bản như tra cứu thông tin, ngoài ra cũng bổ sung một vài chức năng mới phục việc tìm kiếm và đề xuất phù hợp với người dùng
Chức năng:
Trang 24- Kế thừa toàn bộ các chứng năng ứng dụng đã có
- Thêm chức năng dự đoán giá
- Thêm biểu đồ để trực quan hóa dữ liệu một cách dễ dàng
- Thêm chức năng xem lịch sử tìm kiếm của người dùng
1.3 Giới thiệu hệ thống website “Rút trích và trực quan hóa thông tin bất động sản”
- Hệ thống sẽ thu thập, rút trích có chọn lọc thông tin bất động sản một cách hiệu quả bao gồm: nội dung, giá cả, địa chỉ, thông tin chi tiết, hình ảnh của bất động sản, của trang bất động sản nổi tiếng hiện nay đó là: alonhadat.com.vn Sau đó sắp xếp, trực quan hóa và lưu trữ thông tin một cách có hệ thống để dễ dàng sử dụng và chia sẻ thông tin tới khách hàng một cách hợp lý (rõ ràng, dễ nhìn, dễ đọc) và có lợi ích đối với khách hàng
- Hệ thống giúp khách hàng không phải đi đến từng trang web nêu trên để tìm kiếm thông tin khi cần thiết mà chỉ cần truy cập vào trang web là đủ
- Website có công cụ tìm kiếm một cách hiệu quả giúp người dùng cần tìm một số thông tin một cách nhanh nhất có thể, ví dụ tìm theo: loại nhà đất, địa chỉ bất động sản, giá cả bất động sản,
- Website có công cụ trực quan dữ liệu một cách hiệu quả giúp người dùng so sánh thông tin giữa các trang web một cách nhanh nhất có thể
- Hệ thống còn cho phép người dùng đăng thông tin bất động sản của mình lên để chia sẻ rộng rãi tới những người dùng khác và những khách hàng tìm năng
- Ngoài ra, trên mỗi tin tức được chính người dùng chia sẻ trên hệ thống, người dùng sẽ có quyền sửa hoặc xoá tin tức đó nếu thấy nội dung cung cấp bị sai lệch, và người quản trị là người có quyền sửa hoặc xoá toàn bộ tin tức, để khi có ai đó báo cáo sai lệch về tin tức nào, người quản trị sẽ trực tiếp sửa hoặc gỡ bỏ
Trang 251.4 Mục tiêu và phạm vi đề tài
1.4.1 Mục tiêu
- Xây dựng một website trên nền tảng web với mục đích chính là tìm kiếm, trực quan dữ liệu và chia sẻ thông tin bất động sản
- Xây dựng chức năng thêm vào danh sách ưu thích để tiện cho người dùng
- Xây dựng server theo thời gian thực, cập nhật các thông tin bài viết người dùng đăng hoặc chia sẻ
- Xây dựng chức năng đăng thông tin bất động sản
- Xây dựng chức năng cập nhật và xoá thông tin bất động sản
- Xây dựng chức năng đăng nhập và hệ thống người dùng để tăng tính bảo mật
- Xây dựng chức năng tìm kiếm thông tin bất động sản cơ bản và nâng cao
- Xây dựng chức năng sắp xếp với các yêu cầu cơ bản để giúp người dùng tiện trong lúc tìm kiếm thông tin
- Xây dựng chức năng trực quan hóa dữ liệu bằng biểu đồ, chức năng dự đoán giá nhà đất theo biểu đồ
• Quản lý thông tin người dùng
• Quản lí thông tin bất động sản
Trang 26• Tìm kiếm thông tin loại hình bất động sản
- Hoàn thành website cung cấp thông tin bất động sản
- Hoàn thành chức năng xây dựng biểu đồ
- Hoàn thành chức năng cho phép người dùng lưu vào danh sách ưa thích
- Hoàn thành chức năng tìm kiếm và sắp xếp tin tức
- Hoàn thành chi tiết về 1 thông tin bất động sản
Trang 27Chương 2 CƠ SỞ LÝ THUYẾT
2.1 Nodejs
2.1.1 Giới thiệu về Nodejs
NodeJS là một nền tảng được xây dựng trên V8 JavaScript Engine – trình thông dịch thực thi mã JavaScript, giúp xây dựng các ứng dụng web một cách đơn giản và dễ dàng mở rộng
NodeJS được phát triển bởi Ryan Dahl vào năm 2009 và có thể chạy trên nhiều
hệ điều hành khác nhau: OS X, Microsoft Windows, Linux
Phần Core bên dưới của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử
lý và hiệu năng khá cao
Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực Nodejs áp dụng cho các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh, cần đổi mới công nghệ, hoặc tạo ra các dự án Startup nhanh nhất có thể
2.1.2 Tại sao nên sử dụng Nodejs
Các ứng dụng Nodejs được viết bằng javascript, ngôn ngữ này là một ngôn ngữ khá thông dụng Theo tác giả của ngôn ngữ Javascript, Ryan Dahl: “Javascript có những đặc tính mà làm cho nó rất khác biệt so với các ngôn ngữ lập trình động còn lại,
cụ thể là nó không có khái niệm về đa luồng, tất cả là đơn luồng và hướng sự kiện.”
Tốc độ xử lý nhanh Nhờ cơ chế xử lý bất đồng độ (non-blocking), NodeJS có thể xử lý hàng ngàn kết nối cùng lúc mà không gặp bất cứ khó khăn nào
Dễ dàng mở rộng Nếu bạn có nhu cầu phát triển website thì tính năng dễ dàng
mở rộng của NodeJS là một lợi thế cực kỳ quan trọng
Các ứng dụng NodeJS đáp ứng tốt thời gian thực và chạy đa nền tảng, đa thiết bị
Trang 28Node.js sử dụng một mô hình luồng duy nhất với sự kiện lặp cơ chế tổ chức sự kiện giúp các máy chủ để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để
xử lý yêu cầu Node.js sử dụng một chương trình đơn luồng và các chương trình tương
tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server
Hình 2.1 Blocking I/O (trái) và Non-Blocking I/O (phải)
2.1.3 Áp dụng Nodejs vào đề tài
Trong hệ thống ứng dụng của nhóm, Nodejs được áp dụng để làm phần backend cho hệ thống, vì những ưu điểm của Nodejs dành cho một ứng dụng nhỏ rất là tiện lợi đặc biệt là tốc độ xử lí
2.2 ExpressJS framework
2.2.1 Giới thiệu về ExpressJS
Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên không phải lo lắng khi làm việc với Framework này
Trang 29Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN,
Hình 2.2 Cấu trúc của ExpressJs
- App.js chứa các thông tin về cấu hình, khai báo, các định nghĩa, để ứng dụng của chúng ta chạy trơn tru
- Package.json chứa các package cho ứng dụng chạy, có chức năng tương tự như
composer.json hoặc Gemfile trong PHP hoặc RoR
- Folder routes: chứa các route có trong ứng dụng
- Folder view: chứa view/template cho ứng dụng
- Folder public chứa các file css, js, images, cho ứng dụng
Trang 302.2.2 Tại sao nên sử dụng ExpressJS
Framework giúp cho việc phát triển ứng dụng được rút ngắn đi rất nhiều Cũng như các framework dựa trên những ngôn ngữ khác như Rails (Ruby); Django (Python); Laravel, CakePHP (PHP)… Express được xây dựng dựa trên NodeJs Vậy
nó có ưu điểm gì để ta lựa chọn cho việc phát triển ứng dụng
Express hỗ trợ việc phát triển ứng dụng theo mô hình MVC, mô hình phổ biến cho việc lập trình web hiện nay
Cho phép định nghĩa Middleware hỗ trợ cho việc tổ chức và tái sử dụng code Định nghĩa routes và các request method đến server một cách dễ dàng
Hỗ trợ REST API
Và còn rất nhiều thứ mà framework này hỗ trợ
2.2.3 Áp dụng ExpressJS vào đề tài
Trong hệ thống ứng dụng của nhóm, ExpressJS được áp dụng để làm phần framework backend cho hệ thống, vì những ưu điểm của ExpressJS có dành cho một ứng dụng nhỏ rất là tiện lợi đặc biệt là tốc độ xử lí, hỗ trợ Rest API, cộng đồng lớn mạnh
2.3 Django – Python:
2.3.1 Tổng quan về Django:
Django là một framework bậc cao của Python có thể thúc đẩy việc phát triển phần mềm thần tốc và clean, thiết kế thực dụng Được xây dựng bởi nhiều lập trình viên kinh nghiệm, Django tập trung lớn những vấn đề phát triển Web, bạn có thể phát triển trang web của bạn mà không cần xây dựng từ những căn bản Đặc biệt
nó free và open source
Trang 312.3.2 Những lợi thế của Django:
Hoàn thiện: Django phát triển theo tư tưởng "Batteries included" (có thể hiểu ý
nghĩa là tích hợp toàn bộ, chỉ cần gọi ra mà dùng) Nó cung cấp mọi thứ cho developer không cần phải nghĩ phải dùng cái ngoài Chúng ta chỉ cần tập trung vào sản phẩm, tất
cả đều hoạt động liền mạch với nhau
Đa năng: Django có thể được dùng để xây dựng hầu hết các loại website, từ hệ
thống quản lý nội dung, cho đến các trang mạng xã hội hay web tin tức Nó có thể làm việc với framework client-side, và chuyển nội dung hầu hết các loại format (HTML, RESS, JSON, XML, )
Bảo mật: Django giúp các developer trang các lỗi bảo mật thông thường bằng
cách cung cấp framework rằng có những kĩ thuật "phải làm như vậy" để bảo vệ website Ví dụ: Django cung cấp bảo mật quản lý tên tài khoản và mật khẩu, tránh các lỗi cơ bản như để thông tin session lên cookie, mã hóa mật khẩu thay vì lưu thẳng
Dễ Scale: Django sử dụng kiến trúc shared-nothing dựa vào component (mỗi
phần của kiến trúc sẽ độc lập với nhau, và có thể thay thế hoặc sửa đổi nếu cần thiết)
Có sự chia tách rõ ràng giữa các phần nghĩa là nó có thể scale cho việc gia tăng traffic bằng cách thêm phần cứng ở mỗi cấp độ: caching, servers, database servers, hoặc application servers Nhiều web về kinh doanh đã thành công khi Django được scale đáp ứng yêu cầu của họ
Dễ maintain: code Django được viết theo nguyên tắc thiết kế và pattern có thể
khuyến khích ý tưởng bảo trì và tái sử dụng code Trên thực tế, nó sự theo khái niệm Don't Repeat Yourself làm cho không có sự lặp lại không cần thiết, giảm một lượng code
Tính linh động: Django được viết bằng Python, nó có thể chạy đa nền tảng Nó
có nghĩa rằng bạn không ràng buộc một platform server cụ thể Django được hỗ trợ tốt
Trang 32ở nhiều nhà cung cấp hosting, họ sẽ cung cấp hạ tầng và tài liệu cụ thể cho hosting web Django
2.3.3 Sự phổ biến của Django:
Thực sự chưa có một bài thống kê cụ thể về sự phố biến các framework Việc đánh gía hiện nay dựa vào số lượng các web phổ biến dùng Django, số lượng người đóng góp codebase, và số lượng người phát triển cả tình nguyện lẫn được trả công Thì
có thể cho rằng Django là framework phổ biến
Các trang web phổ biến sử dụng Django: Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest, and Open Stack
2.3.4 Áp dụng Django vào đề tài:
Trong ứng dụng của nhóm, Django được sử dụng để xây một micro service phụ trợ cho service chính Dựa trên thế mạnh về dữ liệu của ngôn ngữ Python, nhóm áp dụng Django để xây dựng thuật toán và xử lí dữ liệu nhanh chóng hơn
2.4 MongoDB
2.4.1 Giới thiệu về MongoDB
MongoDB là phần mềm cơ sở dữ liệu mã nguồn mở NoSQL hỗ trợ đa nền tảng được thiết kế theo hướng đối tượng Vì thế, nó có thể dùng để lưu trữ dữ liệu có cấu trúc phức tạp và đa dạng Dữ liệu được gọi là Big Data Đặc biệt, chương trình này lưu trữ dữ liệu vào collection theo hướng tài liệu kiểu JSON thay vì bảng nên có hiệu suất cao và tính khả dụng cao
Trong khái niệm của MongoDB có nhắc đến NoSQL, vậy NoSQL Relational SQL) là dạng cơ sở dữ liệu mã nguồn mở được ra đời như một mô hình tiến
(Non-bộ hơn về tốc độ, tính năng,… so với hệ quản trị cơ sở dữ liệu quan hệ RDBMS NoSQL có kiểu dữ liệu JSON Đây là dạng dữ liệu kiểu key và value cùng với hiệu
Trang 33suất nhanh và khả năng mở rộng không bị ràng buộc bởi việc tạo khóa ngoại, khóa chính,… nên được ưa chuộng và sử dụng rất phổ biến
Với NoSQL, có thể mở rộng dữ liệu một cách thoải mái mà không phải lo lắng
về khóa ngoại hay là khóa chính, hoặc các công việc như là kiểm tra ràng buộc như hệ quản trị cơ sở dữ liệu truyền thống
Ưu điểm: NoSQL giải quyết được các vấn đề dữ liệu lớn (big data) về các hệ
thống thông tin hoặc là phân tán dữ liệu
Nhược điểm: cũng từ ưu điểm trên, do không hạn chế việc mở rộng dữ liệu nên
nó tồn tại một số nhược điểm như là: sự phụ thuộc vào từng bản ghi, tính nhất quán hoặc là đặc tính toàn vẹn dữ liệu
2.4.2 Tại sao nên sử dụng hệ quản trị cơ sở dữ liệu MongoDB
Ưu điểm:
- Đầu tiên có thể nhắc đến là tính linh hoạt lưu trữ dữ liệu theo các kích cỡ khác nhau, dữ liệu dưới dạng hướng tài liệu JSON nên bạn có thể chèn vào thoải mái bất cứ thông tin gì bạn muốn
- Khác với RDBMS, dữ liệu trong đây không có sự ràng buộc và không có yêu
cầu tuân theo khuôn khổ nhất định, điều này giúp bạn tiết kiệm thời gian cho việc kiểm tra sự thỏa mãn về cấu trúc nếu muốn chèn, xóa, cập nhật hay thay đổi các dữ liệu trong bảng
- MongoDB dễ dàng mở rộng hệ thống bằng cách thêm node vào cluster – cụm các node chứa dữ liệu giao tiếp với nhau
- Ưu điểm thứ tư là tốc độ truy vấn nhanh hơn nhiều so với hệ quản trị cơ sở dữ
liệu quan hệ RDBMS do dữ liệu truy vấn được cached lên bộ nhớ RAM để lượt truy
vấn sau diễn ra nhanh hơn mà không cần đọc từ ổ cứng
Trang 34- Cũng là một ưu điểm về hiệu suất truy vấn của MongoDB, trường dữ liệu
“_id” luôn được tự động đánh chỉ mục để đạt hiệu suất cao nhất
Tại sao nên sử dụng MongoDB:
- Khi website có tính chất INSERT cao, bởi vì mặc định MongoDB có sẵn cơ chế ghi với tốc độ cao và an toàn
- Khi website ở dạng real-time nhiều, nghĩa là nhiều người cùng thao tác với ứng dụng trong thời gian thực Ví dụ như ứng dụng chat hay stream trực tuyến chẳng hạn
- Với website có nhiều dữ liệu, giả sử ứng dụng web có đến 10 triệu bản ghi thì khá khó khăn để query được với Mysql Chọn MongoDB vì MongoDB có khả năng tìm kiếm thông tin liên quan cũng khá nhanh nên trường hợp này nên dùng nó
2.4.3 Áp dụng MongoDB vào đề tài
Nhờ những tính năng nổi trội của MongoDB, nhóm đã sử dụng MongoDB dùng làm
hệ quản trị cơ sở dữ liệu chính Server sử dụng MongoDB để lưu trữ toàn bộ dữ liệu,
dữ liệu này sẽ được server sử dụng REST API để gọi lên
Trang 352.5 Reactjs
2.5.1 Giới thiệu về Reactjs
React.js là một thư viện Javascript đang nổi lên trong những năm gần đây với
xu hướng Single Page Application Trong khi những framework khác cố gắng hướng đến một mô hình MVC hoàn thiện thì React nổi bật với sự đơn giản và dễ dàng phối hợp với những thư viện Javascript khác Nếu như AngularJS là một Framework cho phép nhúng code javasscript trong code html thông qua các attribute như ng-model, ng-repeat thì với react là một library cho phép nhúng code html trong code javascript nhờ vào JSX, có thể dễ dàng lồng các đoạn HTML vào trong JS.Tích hợp giữa javascript và HTML vào trong JSX làm cho các component dễ hiểu hơn
React là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được React được sử dụng tại Facebook trong production, và Instagram được viết hoàn toàn trên React
Một trong những điểm hấp dẫn của React là thư viện này không chỉ hoạt động trên phía client, mà còn được render trên server và có thể kết nối với nhau React so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM
2.5.2 Tại sao nên sử dụng Reactjs
Dễ sử dụng:
- React là một thư viện GUI nguồn mở JavaScript tập trung vào một điều cụ thể; hoàn thành nhiệm vụ UI hiệu quả Nó được phân loại thành kiểu “V” trong mô hình MVC (Model-View-Controller)
- Là lập trình viên JavaScript, bạn sẽ dễ dàng hiểu được những điều cơ bản về React Bạn thậm chí có thể bắt đầu phát triển các ứng dụng dựa trên web bằng cách sử dụng react chỉ trong vài ngày
Trang 36- Để củng cố hiểu biết của mình, bạn hãy thử khám phá thêm nhiều hướng dẫn về React Chúng mang đến nhiều thông tin về cách sử dụng công cụ: videos, hướng dẫn và dữ liệu làm phong phú góc nhìn của bạn
Hỗ trợ Reusable Component trong Java:
- React cho phép bạn sử dụng lại components đã được phát triển thành các ứng dụng khác có cùng chức năng Tính năng tái sử dụng component là một lợi thế khác biệt cho các lập trình viên
Viết component dễ dàng hơn:
- React component dễ viết hơn vì nó sử dụng JSX, mở rộng cú pháp tùy chọn cho JavaScript cho phép kết hợp HTML với JavaScript
- JSX là một sự pha trộn tuyệt vời của JavaScript và HTML Nó làm rõ toàn bộ quá trình viết cấu trúc trang web Ngoài ra, phần mở rộng cũng giúp render nhiều lựa chọn dễ dàng hơn
- JSX có thể không là phần mở rộng cú pháp phổ biến nhất, nhưng nó được chứng minh là hiệu quả trong việc phát triển components đặc biệt hoặc các ứng dụng
có khối lượng lớn
Hiệu suất tốt hơn với Virtual DOM:
- React sẽ cập nhật hiệu quả quá trình DOM (Document Object Model – Mô hình đối tượng tài liệu) Như đã biết, quá trình này có thể gây ra nhiều thất vọng trong các dự án ứng dụng dựa trên web May mắn là React sử dụng virtual DOMs, vì vậy có thể tránh được vấn đề này
- Công cụ cho phép xây dựng các virtual DOMs và host chúng trong bộ nhớ Nhờ vậy, mỗi khi có sự thay đổi trong DOM thực tế, thì virtual sẽ thay đổi ngay lập tức
- Hệ thống này sẽ ngăn DOM thực tế để buộc các bản cập nhật được liên tục
Do đó, tốc độ của ứng dụng sẽ không bị gián đoạn
Trang 37Thân thiện với SEO:
- React cho phép tạo giao diện người dùng có thể được truy cập trên các công
cụ tìm kiếm khác nhau Tính năng này là một lợi thế rất lớn vì không phải tất cả các khung JavaScript đều thân thiện với SEO
- Ngoài ra, vì React có thể tăng tốc quá trình của ứng dụng nên có thể cải thiện kết quả SEO Cuối cùng tốc độ web đóng một vai trò quan trọng trong tối ưu hóa SEO
Hình 2.3 Lí do vì sao nên sử dụng Reactjs
Trang 38Postman hỗ trợ tất cả các phương thức HTTP (GET, POST, PUT, PATCH, DELETE, …) Bên cạnh đó, nó còn cho phép lưu lại lịch sử các lần request, rất tiện cho việc sử dụng lại khi cần
2.6.2 Tại sao sử dụng Postman?
Những lợi ích khi sử dụng Postman:
Sử dụng Collections – Postman cho phép người dùng tạo bộ sưu tập cho các lệnh gọi API của họ Mỗi bộ sưu tập có thể tạo các thư mục con và nhiều yêu cầu (request) Điều này giúp việc tổ chức các bộ thử nghiệm
Collaboration – Collections và environment có thể được import hoặc export giúp chia sẻ tệp dễ dàng
API Testing – Test trạng thái phản hồi HTTP
Gỡ lỗi – Bảng điều khiển Postman giúp kiểm tra dữ liệu nào đã được truy xuất giúp dễ dàng gỡ lỗi kiểm tra
2.6.3 Áp dụng Postman vào đồ án:
Trong đồ án, nhóm sử dụng postman để test và xây dựng các API
2.7 Thuật toán Hồi quy tuyến tính:
2.7.1 Tổng quan về thuật toán Hồi quy tuyến tính:
"Hồi quy tuyến tính" là một phương pháp thống kê để hồi quy dữ liệu với biến phụ thuộc có giá trị liên tục trong khi các biến độc lập có thể có một trong hai giá trị liên tục hoặc là giá trị phân loại Nói cách khác "Hồi quy tuyến tính" là một phương pháp để dự đoán biến phụ thuộc (y) dựa trên giá trị của biến độc lập (x) Nó có thể được sử dụng cho các trường hợp chúng ta muốn dự đoán một số lượng liên tục Ví dụ,
Trang 39dự đoán giao thông ở một cửa hàng bán lẻ, dự đoán thời gian người dùng dừng lại một trang nào đó hoặc số trang đã truy cập vào một website nào đó
2.7.2 Ví dụ về Hồi quy tuyến tính
Phương sai (σ2) - Đánh giá độ phân tán trong dữ liệu của bạn
Độ lệch chuẩn (σ) - Đánh giá độ phân tán trong dữ liệu của bạn (căn bậc hai của phương sai)
Phân phối chuẩn
Sai số (lỗi) - {giá trị thực tế - giá trị dự đoán}
2.7.2.2 Giả định
Không một kích thước nào phù hợp cho tất cả, điều này cũng đúng đối với Hồi quy tuyến tính Để thoả mãn hồi quy tuyến tính, dữ liệu nên thoả mãn một vài giả định quan trọng Nếu dữ liệu của bạn không làm theo các giả định, kết quả của bạn có thể sai cũng như gây hiểu nhầm
- Tuyến tính & Thêm vào : Nên có một mối quan hệ tuyến tính giữa biến độc lập
và biến không độc lập và ảnh hưởng của sự thay đổi trong giá trị của các biến độc lập nên ảnh hưởng thêm vào tới các biến phụ thuộc
- Tính bình thường của phân bổ các lỗi : Sự phân bổ sai khác giữa các giá trị thực
và giá trị dự đoán (sai số) nên được phân bổ một cách bình thường
- Sự tương đồng: Phương sai của các lỗi nên là một giá trị không đổi so với:
Thời gian
Trang 40 Dự đoán
Giá trị của các biến độc lập
Sự độc lập về thống kê của các lỗi: Các sai số (dư) không nên có bất kỳ mối tương quan nào giữa chúng Ví dụ: Trong trường hợp dữ liệu theo chuỗi thời gian, không nên có sự tương quan giữa các sai số liên tiếp nhau
2.7.2.3 Đường hồi quy tuyến tính
Trong khi sử dụng hồi quy tuyến tính, mục tiêu của chúng ta là để làm sao một đường thẳng có thể tạo được sự phân bố gần nhất với hầu hết các điểm Do đó làm giảm khoảng cách (sai số) của các điểm dữ liệu cho đến đường đó
Hình 2.4 Đường hồi quy tuyến tính
Ví dụ, ở các điểm ở hình trên (trái) biểu diễn các điểm dữ liệu khác nhau và đường thẳng (bên phải) đại diện cho một đường gần đúng có thể giải thích mối quan hệ giữa các trục x & y Thông qua, hồi quy tuyến tính chúng ta cố gắng tìm ra một đường như vậy Ví dụ, nếu chúng ta có một biến phụ thuộc Y và một biến độc lập X - mối quan hệ giữa X và Y có thể được biểu diễn dưới dạng phương trình sau:
Y = Β0 + Β1*X