2.1. Building Web Application with Shiny in R 2.1.1. Get Started with Shiny
Shiny là một gói phần mềm R cho phép tạo các ứng đụng web tương tác. Nó sử dung m6 hinh lập trình phản ứng, nghĩa la giao diện người dùng sẽ tự động cập nhật khi dữ liệu thay đổi. Điều này làm cho Shiny trở thành một công cụ mạnh mẽ để tạo các bảng điều khiến, biểu đồ và các hình ảnh trực quan khác. Shiny có thể được sử dụng để tạo nhiều loại ứng dụng web khác nhau, bao gồm: Bảng điều khiến: Bảng điều khiến là các ứng dụng web cung cấp cho người dùng cái nhìn tổng quan về dữ liệu. Chúng thường bao gồm các biêu đồ, đỗ thị và các chỉ báo khác. Biếu đỗ: Biểu đề là các biểu diễn trực quan của đữ liệu. Shiny có thê được sử dụng để tạo nhiều loại biểu đồ khác nhau, bao gồm biểu đồ đường, biểu đồ thanh, biểu đồ pie và biểu đồ phân tán. Hình ảnh trực quan khác: Shiny cũng có thể được sử dụng để tạo các hình ảnh trực quan khác, chắng hạn như bản đồ và mạng lưới. Shiny là một công cụ mạnh mẽ và linh hoạt có thể được sử dụng để tạo nhiều loại ứng dụng web khác nhau. Nó tương đối dé học và sử dụng, ngay cả đối với những người mới bắt đầu sử dụng R.
* Ưu điểm của việc sử dụng Shiny:
- - Tương tác: Shiny cho phép người dùng tương tác với dữ liệu của họ theo thời
gian thực, giúp họ khám phá và hiệu đữ liệu tốt hơn.
- Linh hoat: Shiny co thể được sử dụng để tạo nhiều loại ứng dụng web khác nhau, từ bảng điều khiến đơn giản đến các ứng dụng phức tạp với nhiều tính năng.
- _ Dễ sử dụng: Shiny tương đối dễ học và sử dụng, ngay cả đối với những người mới bắt đầu sử dụng R.
- _ Mã nguồn mở: Shiny là mã nguồn mở, có nghĩa là nó miễn phí để sử đụng và sửa đối. Cộng đồng lớn: Shiny có một cộng đồng người dùng lớn và tích cực, những người có thể cung cấp hỗ trợ và hướng dẫn.
* Nhược điểm của Shiny: Mặc dù Shiny có nhiều ưu điểm, nó cũng có một số nhược điểm cần lưu ý:
- _ Khả năng tương thích: Shiny có thế không tương thích với một số gói R nhất định.
- Hiệu suất: Mặc dù Shiny duoc tối ưu hóa để chạy nhanh và hiểu quả, nhưng hiệu suất của ứng dụng Shiny có thê bị ảnh hưởng bởi một số yếu tố, bao gồm kích thước của tập dữ liệu và độ phức tạp của ứng dụng.
Hinh 1. Shiny in R
2.1.2. Inputs, Outputs, and Layouts
> Inputs: La cdc thành phần tương tác mà người đùng có thế sử dụng để cung cấp dữ liệu hoặc điều khiến hành vi của ứng dụng.
s* Ví dụ:
- Thanh trượt (sliderInput()) dé chọn giá trị số trong một phạm vi.
-- Hộp kiểm (checkboxInput()) cho các tùy chọn đúng/sai.
- Menu thả xuống (selectlnput()) để chọn từ một tập hợp các tùy chọn được xác định trước.
- Trường nhập văn bản (textlInput()) để nhập văn bản tự do.
- Nút tải lên tệp (fileInput()) cho phép người dùng tải lên tệp đề xử lý.
> Outputs: Là các thành phần động hiển thị kết quả của tương tác người dùng hoặc tính toán của ứng dụng. Tự động cập nhật dựa trên các thay đổi trong giá trị đầu vào.
s* Ví dụ:
- _ Biểu đồ (plotOutput()) để trực quan hóa đữ liệu.
- Bang (tableOutput) dé trình bảy dữ liệu ở dạng bảng.
- _ Hộp văn bản (verbatimTextOutput()) đề hiển thị văn bản hoặc mã.
- Hinh anh (imageOutput()) dé hiển thị hình ảnh dựa trên tính toán.
> Layouts: Là cấu trúc tô chức sắp xếp các đầu vào và đầu ra trên trang web.
Cung cấp giao diện trực quan và thân thiện với người dùng.
s* Các chức năng bố cục phổ biến:
-_ fuidPage(): Bố cục cơ bản cho ứng dụng Shiny một trang.
-_ sidebarLayout(): Tạo bố cục hai bảng điều khiến với thanh bên cho đầu vào và bảng điều khiến chính cho đầu ra.
- _ tabsetPanel(): Sắp xếp nội dung thành nhiều tab.
- fluidRow() va column(): Xac dinh các hàng và cột trong một bố cục đề định vị linh hoạt.
s* Cách hoạt động:
-_ Tương tác người dùng: Người dùng tương tác với một phần tử đầu vảo (ví dụ:
thay đôi gia trị thanh trượt).
- Lap trình phản ứng: Shiny phát hiện thay đổi và kích hoạt tính toán phản ứng trên máy chủ.
- Xu ly phía máy chủ: Mã máy chủ cập nhật dữ liệu hoặc thực hiện tính toán dựa trờn ứ1ỏ trị đầu vào mới.
- Cap nhat đầu ra: Dữ liệu hoặc kết quả cập nhật được gửi trở lại phía máy khách.
-_ Cập nhật UI: Shiny cập nhật động phân tử đầu ra tương ứng trên trang web.
2.1.3. Reactive Programming
Lập trình phan tng (reactive programming) la nén tang cét lõi của Shiny R, giup ban xay dwng cac ứng dụng web tương tác và Lĩnh hoạt.
Khái niệm: Lập trình phản ứng tập trung vảo việc quản lý các giá trị thay đổi theo thời gian và thực hiện các hành động dựa trên những thay đổi đó. Trong Shiny, lập trình phản ứng cho phép bạn tạo ra các mối liên kết giữa các thành phần của ứng dụng, đảm bảo đầu ra tự động cập nhật khi đầu vào thay đổi.
s% Các thành phân chính:
- _ Reactive Expressions (Biểu thức phản ứng): Là những đoạn mã R tính toán một giá trị dựa trên các đầu vào hoặc các biểu thức phản ứng khác. Chúng chỉ tính toán lại khi các giá trị đầu vào của chúng thay đổi. Sử dụng hàm reactive() dé tao biếu thức phản ứng.
- Reactive Values (Gia trị phản ứng): Là những biến lưu trữ các giá trị được tính toán bởi các biểu thức phản ứng. G1á trị này cũng chỉ được cập nhật khi biếu thức phản ứng phụ thuộc vào nó tính toán lại Sử dụng hàm reactiveVal() dé tao giá trị phản ứng.
- Observers (Người quan sát): Là các hàm được kích hoạt khi một giá trị phản ứngthay đổi. Chúng thường được sử dụng để cập nhật giao diện người dùng (UI) của ứng dụng. Sử dụng hàm observe() để tạo observer.
¢ Uu diém:
- Tinh linh hoạt: Cho phép bạn dễ dàng xây dựng các ứng dụng phức tạp với nhiều đầu vào và đầu ra.
- Hiệu suất: Chỉ tính toán lại các phần cần thiết khi có thay đổi, giúp cải
thiện hiệu suất.
-_ Dễ gỡ lỗi: Logic ứng dụng được tách biệt rõ ràng, giúp việc theo dõi và sửa lỗi dễ dàng hơn.
2.1.4. Build Shiny Apps
Xây dựng bốn ứng dụng khác nhau bằng cách sử dụng những gì học được trong suốt khóa học cùng với một số khái niệm mới. Bao gồm một ứng dụng cho phép bạn thu thập thông tin chi tiết từ Khảo sát về sức khỏe tâm thần trong công nghệ và một ứng dụng khác sử dụng các thành phần công thức làm đầu vào đề phân loại chính xác các món ăn khác nhau trên thế giới. Đồng thời, bạn cũng sẽ tìm hiểu về các tiện ích đầu vào và đầu ra nâng cao hơn, chẳng hạn như xác thực đầu vào, đám mây từ và bản đồ tương tác.
% Xây dựng trang Dashhoard cho Alien Sightings
Ứng dụng sẽ cho phép người dùng chọn một tiêu bang của Hoa Kỳ, sử dụng bộ chọn thả xuống, sau đó là một khoảng thời gian được triển khai bằng dateRangelnput.
Trang tông quan sử dụng bố cục tab. Tab đầu tiên là biếu đồ thanh về số lượng người ngoài hành tỉnh được nhìn thấy theo hình dạng ở trạng thái và khoảng thời gian đã chọn.
Tab thứ hai của bảng điều khiến là một bảng tóm tắt, theo hình dạng, về thời lượng trung bình, trung bình, tối thiểu và tối đa của việc quan sát đối với các đầu vào đã chọn. Nó cũng bao gồm số lượng từng hình dạng được nhìn thấy, đây là cách thực hành tốt khi bạn báo cáo số liệu thống kê tóm tắt như thế này. Có rất nhiều dữ liệu khác mà bạn có thể sử dụng để tự mình mở rộng ứng dụng, chẳng hạn như vĩ độ và kinh đệ của các lân nhìn thây
UFO Sightings
Choose a U.S. state: res | ee
TX bá
Choose a date range:
1820-01-01 to 1950-01-01
# Sighted
'
cylindei disk othe sphere
Shape
Hinh 2. Ung dung UFO Sightings- Plot
UFO Sightings
Choose a U.S. state: Plot | Table
™ . shape nb sighted avg duration min median duration min min duration min max đuration min
cyliner 1 4500 4500 4500 4500
choose. cate 08: disk 3 022 017 017 033
1920-01-01 to 1950-01-01 other 1 007 007 007 007
sphere 1 12000 120.00 12000 12000
Hinh 3. Ung dung UFO Sightings — Table
% Xây dựng ứng dụng khảo xdt vé Mental Health
Khảo sát Sức khỏe Tâm thần trong Công nghệ năm 2014 được thực hiện bởi Sức khỏe Tâm thần Nguồn mở, một tổ chức phi lợi nhuận nhằm mục đích bắt đầu cuộc trò chuyện về sức khỏe tâm thần trone nghề công nghệ thông qua các cuộc tọa đàm, hội thảo tại hội nghị và bằng cách cung cấp dữ liệu về chủ đề nay. Ban co thé lay phiên bản cập nhật của cuộc khảo sát trên trang web của họ. Phiên bản dữ liệu chúng tôi sẽ sử dụng hôm nay được lọc theo độ tuôi không âm. Dữ liệu đầu vào của ứng dụng sẽ là các câu hỏi xoay quanh hậu quả về sức khỏe tâm thần và sức khỏe thể chất so với tỉnh thần, sau đó sử dụng những dữ liệu đầu vào đó để hiến thị biểu đề về độ tuôi của người trả lời.
2014 Mental Health in Tech Survey
If you have a mental health "
condition, do you feel that it interferes with your work?
Never Offen
ba poy 15-
Never Reavely Sometimes Often
Do you think that discussing a mental health issue with your ,
35 40
Loe employer would have negative consequences?
Maybe
C) Yes a
1) No
Do you feel that your employer
25 30
count
takes mental health as seriously
as physical health? Age
Yes -
Hinh 4. Ung dung 2014 Mental Health in Tech Survey
s* Xây dựng ứng dụng Mass shootings
Ứng dụng sẽ cho phép người dùng khám phá các vụ xả súng trên bản đồ, được lọc theo số người thiệt mạng tối thiểu và phạm vi ngày. Các vòng tròn có kích thước dựa trên sô người tử vone và nhập vào vòng tròn sẽ hiện thị bản tóm tắt về vụ việc.
+
—
Las vegas
Ciudad judre
aflet | ® OpenStreetMap contributors, CC-BY-SA
Hinh 5. Ung dung Mass shootings
2.2. Joining Data with pandas 2.2.1. Data Merging Basics
Inner join 1a mét loai lién két đữ liệu phổ biến trong pandas, được sử dung dé két hợp hai DataFrames dựa trên một hoặc nhiều cột chung. Loại liên kết này chi giit lại các hàng có trong cả hai DataFrames, dựa trên giá trị khớp của các cột được chon.
10
Inner join
Inner Join
Left Right
DataFrame DataFrame
Results
Hinh 6. Vi du Inner Join
Quan hệ 1- 1 là mỗi quan hệ giữa hai DataFrame, trong đó mỗi bản ghi trong DataFrame thứ nhất chỉ liên quan đến một bản ghi duy nhất trong DataFrame thứ hai và ngược lại
One-to-one
Al B1 C1 cs D1
c—
A2 B2 G? c2 D2
A3 B3 C3 C3 D3
Hình 7. Vĩ dụ quan hệ 1-1
Quan hệ 1 - Nhiều là một mô hình dữ liệu phổ biến trong khoa học dữ liệu, mô
tả mối quan hệ giữa hai tập dữ liệu, trong đó một bản phi trong tập dữ liệu đầu tiên (bảng cha) có thể liên quan đến nhiều bản ghi trong tập dữ liệu thứ hai (bảng con).
11
One-to-manu
A1 B1 C1 C1 D1 A2 B2 C2 = Ca D2
A3 B3 c3 C1 D3 c2 D4
Hình Š. Vĩ dụ quan hệ 1 — Nhiéu
Hợp nhất nhiều Dataframes là thao tác phổ biến trong pandas để kết hợp dữ liệu từ nhiều nguồn khác nhau, có nhiều cách thực hiện như: Hợp nhất theo cột, theo nhiều cột, bằng cach sử dụng hàm, với hàm concat.
Merging multiple tables
Se Oe
A1 B1 C1 C1 D1
c—
A2 B2 G2 c2 D2
A3 B3 Gs cs D3
A1 B1 ci C1 E1 E1 F1 G1
— c—
A2 B2 c2 c2 E2 E2 F2 G2
A3 B3 C3 C3 = E3 F3 G3
Hình 9. Ví dụ hợp nhất nhiều bảng
2.2.2. Merging Tables With Different Join Types
Phép nối trái (Left join): Giữ lại tất cả các hàng từ bảng bên trái và các hàng
khớp từ bảng bên phải dựa trên cột liên kết. Phép nối này hữu ích khi bạn muốn truy
cập tất cả thông tin từ bảng bên trái, ngay cả khi không có đữ liệu liên quan trong bảng bên phải.
12
Left join
Left Join
Right DataFrame
Results
Hinh 10. Vi du Left join
Phép nối phải (Ripht join): Tương tự như phép nối trái, phép nối phải giữ lại tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái dựa trên cột liên kết.
Phép nối này hữu ích khi bạn muốn truy cập tat ca thông tin từ bảng bên phải.
Right join
Left DataFrame
Results
Hình 11. Vi du Right Join
13
Về hợp nhất bảng: Có thể hợp nhất bảng với chính nó để tạo ra các tập dữ liệu mới. Ví dụ: bạn có thế hợp nhất bảng khách hàng với chính nó để tìm các khách hàng sống củng khu vực. Hay có thé hop nhat bảng dựa trên các chỉ mục của chúng. Ví dụ:
bạn có thế hợp nhất bảng giá cô phiếu với bảng dữ liệu kinh tế để xem mỗi tương quan gitra p1á cô phiêu và các chỉ sô kinh tê.
Merging a table to itself
Left Table Right Table Result Table
19995 Avatar 19995 Avatar 862 Toy Story 863 863 a ear 2 10193
862 Toy Story 863 M 862 Toy Story 863 = 863 Toy Story2 10193 10193 Toy Story 3 863 Toy Story2 10193 863 Toy Story2 10193
597 Titanic 597 Titanic
24428 The Ave... 24428 The Ave...
`⁄Z
Merge Columns
Hình 12. Ví dụ hợp nhất bảng 2.2.3. Advanced Merging and Concatenating
Filtering joins trong pandas là kĩ thuật kết hợp hai hoặc nhiều DataFrames dựa trên các điều kiện cụ thể, sau đó lọc kết quả để chỉ bao gồm các bảng ghi đáp ứng các tiêu chí mong muốn.
Semi joins là một phép nối trong Pandas trả về tất cả các dòng từ DataFrame bên trải (left table) mà có giá trị khớp trong một cột nhất định với DataFrame bên phai (right table).
Left Table Right Table Result Table
ne iO eee
A2 B2 C2 _ B2 C2
— —
A3 B3 c3 c2 D2 A4 B4 C4
A4 B4 C4 C4 D4
C5 D5
Hình 13. Vi du Semi joins
14
Anti Join còn được gọi 1a left anti join, 1a m6t phép néi trong Pandas tra về tất cả các dòng từ DataFrame bên trái (left table) không có giá trị khớp trong một cột nhất định với DataFrame bên phải (right table).
Left Table Right Table Result Table
^ › ‹ ẹ- › 6ẹ : -. -
A2 B2 C2 C1 D1 — A3 B3 c3
= =
A3 B3 C3 C2 D2
A4 B4 C4 C4 D4
C5 D5
Hình 14. Ví du Anti Join
s%* Có hai cách chính để ghép các DataFrames lại với nhau theo chiều dọc trong pandas:
-_ Sử dụng pandas.concat: Hàm concat cho phép bạn nối các DataFrames theo chiều dọc (axis=0) hoặc chiều ngang (axis=1). Bạn có thể sử dụng tham số ignore ¡index để chỉ định xem có giữ nguyên index của các DataFrames hay không.
- Sử dụng dfjo¡n: Phương thức join cho phép bạn nỗi một DataFrame với một DataFrame khác dựa trên một cột chung. Bạn có thể sử dụng tham số how dé chi định loại kết hop (inner, left, nght, outer).
% Có nhiều cách để xác minh tính toản vẹn của dữ liệu trong pandas:
- _ Kiểm tra các giá tri null: Str dung df.isnull().sum() để đếm số lượng giá trị null trong mỗi cột. Sử dụng dfdropna() để xóa các bản phí có chứa giá trị null.
- Kiém tra cac giá trị trùng lặp: Sử dụng df duplicated() để xác định các bản phi trùng lặp. Sử dụng đf.drop_ duplicates() để xóa các bản phi trùng lặp.
- Kiểm tra tính hợp lệ của dữ liệu: Sử dụng các hàm kiểm tra đữ liệu được tích
15
hợp sẵn trong pandas, chẳng hạn như pd.to_numeric để kiếm tra xem dữ liệu có phải là số hay không. Viết các hàm kiểm tra tùy chỉnh để xác minh các quy tắc kinh doanh cụ thẻ.
-_ So sánh đữ liệu với nguồn gốc: So sánh DataFrame với nguồn gốc dữ
liệu (tệp CSV, cơ sở đữ liệu, v.v.) để đảm bảo rằng dữ liệu đã được tải chính
xác.
- Su dụng các thư viện bên thứ ba: Sử dụng các thư viện bên thứ ba như pandas-profiling dé tạo báo cáo chi tiết về tính toàn vẹn của dữ liệu.
16
2.2.4. Merging Ordered and Time-Series Data
Trong thư viện pandas của Python, meree_ordered() là một hàm được sử dụng để thực hiện một loại merge giữa hai DataFrame, nhưng giữ lại thứ tự của các hang như đã được sắp xếp trong các cột chính định sẵn (đặc biệt là trone trường hợp dữ liệu chuối thời gian)
merge_ordered()
Left Table Right Table Result Table
Pe Oe Oe
AB B3 C3 CC D4 = Ai B1 C1 D1
— —
A2 B2 c2 C2 D2 A2 B2 C2 D2
A1 B1 C1 C1 D1 A3 B3 C3
C4 D4
Hình 15. Vi dụ phương thức merge _orderd()
Phương thức merge_asof{) trong pandas được sử dụng để thực hiện một loại merge goi là "asof merge" hoặc "asof join". Asof là viết tắt của "as of", và phương thức này được sử dụng khi bạn muốn kết hợp các dòng từ hai DataFrame dựa trên p1á trỊ gan nhất trước (as of) trong một cột chung. Khi bạn có hai DataFrame chứa đữ liệu theo thời gian và muốn kết hợp chúng dựa trên thời gian gần nhất trước đó, bạn có thé sử dung merge_asof() để thực hiện việc này.
17
merge_asof()
Left Table Right Table Result Table
Ce CGC
B2 1 1 D1 —= 1 D1
=ằ -
B3 5 2 D2 B3 5 D3
B4 10 3 D3 B4 10 D7
6 D6
7 D7
Hình 16. Vi dụ phương thức merge asof\)
Phương thức .query() trong pandas được sử dụng để lọc dữ liệu từ một DataFrame bằng cách sử dụng một biểu thức điều kiện. Điều này giúp làm cho mã của bạn trở nên ngắn gon va dé đọc hơn so với việc sử dụng các phương thức lọc đữ liệu truyền thống như .Ioc[] hoặc .iloc[].
Querying on a single condition
This table is stocks
~ stocks. queny('nike >= 98"
fet ha disney nike
2819-87-81 145.9889995 86.629999 2819-88-81 157.259995 84.5 2819-89-81 158.5288067 95.919998 2019-16-81 129.919998 89.558865 2819-11-01 151.5886882 95.489998 2819-12-81 144.6588985 181.5989998 2826-81-81 158.5899998 9ó.588885 2828-82-81 117.6588682 89.579997 2828-85-01 96.599998 82.759998 2828-84-81 99.588882 84.629997
date disney nike
2 2819-89-81 156.5288987 95.919998 4 2819-11-81 151.5888082 95.489998 5 2019-12-81 144.6588985 1081.589998 6 2828-81-81 158.5989998 96.588865 8
1 rs k) á 5 6 7 te)
°
Hình 17. Ví dụ phương thức .queryQ
Phương thức .melt() trong pandas được sử dụng để "định hình lại" (reshape) đữ liệu từ dạng rộng sane dạng dài. Điều nay lam cho dữ liệu trở nên dễ quản ly hon khi bạn muốn thực hiện các phân tích hoặc trực quan hóa. Khi bạn áp dụng .melt() lên một DataFrame, nó sẽ biến đôi các cột của DataFrame thành hai cột mới: một cột 18