1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Xây dựng ứng dụng web với Shiny trong R

Connected

Bài tập

Khám phá ẩm thực: top nguyên liệu (bản nâng cao)

Mỗi nền ẩm thực trở nên khác biệt nhờ một nhóm nhỏ các nguyên liệu đặc trưng. Ta không thể tìm ra chúng chỉ bằng cách xem các nguyên liệu phổ biến nhất, vì đó thường là những nguyên liệu cơ bản như muối hoặc đường.

Một thước đo khác có thể hỗ trợ mục tiêu này là term frequency–inverse document frequency (TFIDF), một thống kê số học phản ánh mức độ quan trọng của một từ (nguyên liệu) đối với một tài liệu (nền ẩm thực) trong một tập hợp hay corpus (các công thức nấu ăn).

Chúng tôi đã tính sẵn tf_idf cho bạn và tạo một tập dữ liệu mở rộng tên là recipes_enriched. Mục tiêu của bạn là tạo một ứng dụng Shiny hiển thị biểu đồ cột ngang về các nguyên liệu khác biệt hàng đầu trong một nền ẩm thực, được đo bằng tf_idf.

An app displaying an interactive horizontal bar plot of top ingredients by chosen cuisine

Bạn sẽ dùng một biểu thức reactive để đóng gói phần tính toán và để mã vẽ chỉ tập trung vào việc tạo biểu đồ. Đây là một thực hành lập trình tốt và giúp tạo các ứng dụng Shiny có tính mô-đun và hiệu năng cao.

Chúng tôi đã nạp các gói shiny, dplyr, ggplot2 và plotly. Dưới đây là hai đoạn mã tiện lợi để lọc top nguyên liệu theo nền ẩm thực và tạo biểu đồ cột ngang. Bạn có thể chỉnh sửa phù hợp.

top_ingredients <- recipes_enriched %>% 
  filter(cuisine == 'greek') %>% 
  arrange(desc(tf_idf)) %>% 
  head(5) 

ggplot(top_ingredients, aes(x = ingredient, y = tf_idf)) +
  geom_col() +
  coord_flip()

Hướng dẫn

100 XP
  • UI:

    • Thêm một phần hiển thị biểu đồ tương tác plotly tên plot_top_ingredients và bọc trong tabPanel() với nhãn phù hợp.
  • Server:

    • Thêm một biểu thức reactive tên rval_top_ingredients để lọc recipes_enriched theo nền ẩm thực đã chọn và các nguyên liệu khác biệt hàng đầu dựa trên giá trị tf_idf.
    • Vẽ (render) một biểu đồ cột tương tác của các nguyên liệu hàng đầu và giá trị tf_idf, gán vào output tên plot_top_ingredients. Thử thách thêm: hãy sắp xếp các cột hiển thị theo thứ tự giảm dần của tf_idf.