library(ggplot2)
  library(tidyverse)
  library(DT)
  library(scales)
  library(dplyr)
  library(cowplot)

1 Mô tả dữ liệu

Anime là một hình thức giải trí phổ biến xuất phát từ Nhật Bản. Nó bao gồm một loạt các loạt phim hoạt hình truyền hình, phim, và OVAs (original video animations - phim hoạt hình ban đầu) phục vụ cho các thể loại và đối tượng khán giả đa dạng. Anime nổi tiếng với phong cách nghệ thuật đặc trưng, cốt truyện hấp dẫn và các chủ đề đa dạng.

Anime bao gồm rất nhiều thể loại, bao gồm hành động, phiêu lưu, hài hước, drama, tình yêu, thần thoại, khoa học viễn tưởng và nhiều hơn thế nữa. Mỗi thể loại mang đến những yếu tố cốt truyện độc đáo và thu hút sự quan tâm từ những người yêu thích anime có sở thích và quan điểm khác nhau. Anime đã nhận được sự phổ biến đáng kể trên toàn cầu và đã phát triển một cộng đồng người hâm mộ tận tâm và say mê. Người hâm mộ anime thường tham gia vào các cuộc thảo luận, đánh giá và xếp hạng, góp phần tạo nên cộng đồng sống động xung quanh hình thức giải trí này.

Do số lượng anime có sẵn rất lớn nên việc đề xuất giúp người hâm mộ tìm hiểu những bộ phim mới phù hợp với sở thích của họ. Hệ thống đề xuất sử dụng đánh giá của người dùng, thể loại và các yếu tố khác để đề xuất các loạt anime mà người dùng có thể thích dựa trên sở thích của họ.

Ta có thể tìm hiểu kỹ hơn về dữ liệu thông qua trang web được gắn link ở đây: Anime

Sau khi lấy dữ liệu về máy ta sẽ chỉnh sủa các thứ cần thiết trong excel trước khi đưa nó vào R.

# Nhập bộ dữ liệu vào R 
library(readr)
anime <- read_csv("~/2121001544_Ngoen/E/anime .csv", 
    col_types = cols(anime_id = col_integer(), 
        my_score = col_integer(), user_id = col_integer(), 
        score = col_number(), scored_by = col_integer(), 
        rank = col_integer(), popularity = col_integer()))
View(anime)

# Tạo bản sao cho bộ dữ liệu 
ani <- anime
print(ani)
## # A tibble: 1,048,575 × 13
##    username anime_id my_score user_id gender title  type  source score scored_by
##    <chr>       <int>    <int>   <int> <chr>  <chr>  <chr> <chr>  <dbl>     <int>
##  1 karthiga       21        9 2255153 Female One P… TV    Manga   8.54    423868
##  2 karthiga       59        7 2255153 Female Chobi… TV    Manga   7.53    175388
##  3 karthiga       74        7 2255153 Female Gakue… TV    Manga   7.77     33244
##  4 karthiga      120        7 2255153 Female Fruit… TV    Manga   7.77    167968
##  5 karthiga      178        7 2255153 Female Ultra… TV    Manga   7.26      9663
##  6 karthiga      210        7 2255153 Female Ranma… TV    Manga   7.85     59911
##  7 karthiga      232        6 2255153 Female Cardc… TV    Manga   8.21    121898
##  8 karthiga      233        6 2255153 Female Daa! … TV    Manga   7.78      6598
##  9 karthiga      249        8 2255153 Female InuYa… TV    Manga   7.9     181978
## 10 karthiga      269       10 2255153 Female Bleach TV    Manga   7.9     433097
## # ℹ 1,048,565 more rows
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>

Giải thích dữ liệu

Dựa trên dữ liệu năm 2018. Nó bao gồm các cột sau:

Username: Tên người dùng cung cấp đánh giá.

Anime ID: Mã định danh duy nhất cho từng tên anime.

My Score: Điểm đánh giá do người dùng đưa ra cho anime trên thang điểm từ 1 đến 10.

User ID: Mã định danh duy nhất cho mỗi người dùng.

Gender: Giới tính của người dùng.

Title: Tên của anime.

Type: Loại của anime (ví dụ: loạt phim truyền hình, phim, OVA, v.v.).

Source: Nguyên tác của anime (ví dụ: manga, tiểu thuyết nhẹ, ban đầu, v.v.).

Score: Điểm trung bình của anime dựa trên tất cả các đánh giá của người dùng.

Scored By: Số người dùng đã đánh giá cho anime.

Rank: Xếp hạng của anime.

Popularity: Xếp hạng độ phổ biến của anime.

Genre: Thể loại của anime.

Bộ dữ liệu này cho phép bạn phân tích sở thích của người dùng, khám phá xu hướng thể loại và có cái nhìn sâu sắc về sự phổ biến và xếp hạng của các tên anime khác nhau. Bạn có thể thực hiện các phân tích khác nhau như tìm anime có điểm cao nhất, xác định thể loại phổ biến nhất, kiểm tra phân phối đánh giá và nghiên cứu sở thích người dùng dựa trên giới tính.

Xem cấu trúc bộ dữ liệu

# Xem cấu trúc dữ liệu
str(ani)
## spc_tbl_ [1,048,575 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ username  : chr [1:1048575] "karthiga" "karthiga" "karthiga" "karthiga" ...
##  $ anime_id  : int [1:1048575] 21 59 74 120 178 210 232 233 249 269 ...
##  $ my_score  : int [1:1048575] 9 7 7 7 7 7 6 6 8 10 ...
##  $ user_id   : int [1:1048575] 2255153 2255153 2255153 2255153 2255153 2255153 2255153 2255153 2255153 2255153 ...
##  $ gender    : chr [1:1048575] "Female" "Female" "Female" "Female" ...
##  $ title     : chr [1:1048575] "One Piece" "Chobits" "Gakuen Alice" "Fruits Basket" ...
##  $ type      : chr [1:1048575] "TV" "TV" "TV" "TV" ...
##  $ source    : chr [1:1048575] "Manga" "Manga" "Manga" "Manga" ...
##  $ score     : num [1:1048575] 8.54 7.53 7.77 7.77 7.26 7.85 8.21 7.78 7.9 7.9 ...
##  $ scored_by : int [1:1048575] 423868 175388 33244 167968 9663 59911 121898 6598 181978 433097 ...
##  $ rank      : int [1:1048575] 91 1546 941 939 2594 802 297 919 697 693 ...
##  $ popularity: int [1:1048575] 35 188 1291 222 2490 623 292 3045 141 18 ...
##  $ genre     : chr [1:1048575] "Action, Adventure, Comedy, Super Power, Drama, Fantasy, Shounen" "Sci-Fi, Comedy, Drama, Romance, Ecchi, Seinen" "Comedy, School, Shoujo, Super Power" "Slice of Life, Comedy, Drama, Romance, Fantasy, Shoujo" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   username = col_character(),
##   ..   anime_id = col_integer(),
##   ..   my_score = col_integer(),
##   ..   user_id = col_integer(),
##   ..   gender = col_character(),
##   ..   title = col_character(),
##   ..   type = col_character(),
##   ..   source = col_character(),
##   ..   score = col_number(),
##   ..   scored_by = col_integer(),
##   ..   rank = col_integer(),
##   ..   popularity = col_integer(),
##   ..   genre = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Hiển thị 6 dòng đầu   tiên 
head(ani)
## # A tibble: 6 × 13
##   username anime_id my_score user_id gender title   type  source score scored_by
##   <chr>       <int>    <int>   <int> <chr>  <chr>   <chr> <chr>  <dbl>     <int>
## 1 karthiga       21        9 2255153 Female One Pi… TV    Manga   8.54    423868
## 2 karthiga       59        7 2255153 Female Chobits TV    Manga   7.53    175388
## 3 karthiga       74        7 2255153 Female Gakuen… TV    Manga   7.77     33244
## 4 karthiga      120        7 2255153 Female Fruits… TV    Manga   7.77    167968
## 5 karthiga      178        7 2255153 Female Ultra … TV    Manga   7.26      9663
## 6 karthiga      210        7 2255153 Female Ranma ½ TV    Manga   7.85     59911
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>
# Hiển thị 6 dòng cuối 
tail(ani)
## # A tibble: 6 × 13
##   username   anime_id my_score user_id gender title type  source score scored_by
##   <chr>         <int>    <int>   <int> <chr>  <chr> <chr> <chr>  <dbl>     <int>
## 1 Necronomi…     4866        6  118680 Non-B… Pico… OVA   Origi…  5.02     22528
## 2 Necronomi…     4872        9  118680 Non-B… Goku… OVA   Manga   7.92     22997
## 3 Necronomi…     4879        8  118680 Non-B… Mour… TV    Novel   7.28     11053
## 4 Necronomi…     4896        6  118680 Non-B… Umin… TV    Visua…  7.28     66053
## 5 Necronomi…     4898        0  118680 Non-B… Kuro… TV    Manga   7.99    297047
## 6 Necronomi…     4975        7  118680 Non-B… Chäo… TV    Visua…  6.52    116277
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>

2 Thực hiện các thao tác trên bộ dữ liệu

2.1 Lọc dữ liệu

Bộ dữ liệu chứa nhiều bộ anime của Nhật bản được người dùng đánh giá. Ta có thể lọc theo tên của bộ anime, lọc theo đánh giá, lọc theo loại anime và cuối cùng là lọc theo thể loại của anime.

Lọc theo tên

# Lấy ra  bộ  anime  có tên  là  One  Piece 
ani1 <- ani %>% filter(title == 'One Piece')
ani1
## # A tibble: 2,319 × 13
##    username  anime_id my_score user_id gender title type  source score scored_by
##    <chr>        <int>    <int>   <int> <chr>  <chr> <chr> <chr>  <dbl>     <int>
##  1 karthiga        21        9 2255153 Female One … TV    Manga   8.54    423868
##  2 Redvelve…       21        0 1897606 Female One … TV    Manga   8.54    423868
##  3 Damonashu       21       10   37326 Male   One … TV    Manga   8.54    423868
##  4 bskai           21        8  228342 Male   One … TV    Manga   8.54    423868
##  5 Slimak          21       10   61677 Male   One … TV    Manga   8.54    423868
##  6 MistButt…       21        0 2485327 Female One … TV    Manga   8.54    423868
##  7 kioniel         21        9  144049 Male   One … TV    Manga   8.54    423868
##  8 Xinil           21        9       1 Male   One … TV    Manga   8.54    423868
##  9 ihasabuc…       21        9   18867 Male   One … TV    Manga   8.54    423868
## 10 xTheFall…       21        7  340873 Male   One … TV    Manga   8.54    423868
## # ℹ 2,309 more rows
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>
# Lấy ra bộ  anoime có tên là  Ultra Maniac
ani2 <-  ani %>% filter(title == 'Ultra Maniac')
ani2 
## # A tibble: 134 × 13
##    username  anime_id my_score user_id gender title type  source score scored_by
##    <chr>        <int>    <int>   <int> <chr>  <chr> <chr> <chr>  <dbl>     <int>
##  1 karthiga       178        7 2255153 Female Ultr… TV    Manga   7.26      9663
##  2 MistButt…      178        5 2485327 Female Ultr… TV    Manga   7.26      9663
##  3 Xinil          178        0       1 Male   Ultr… TV    Manga   7.26      9663
##  4 abdul18        178        0  606789 Male   Ultr… TV    Manga   7.26      9663
##  5 otakumuch      178       10    9767 Female Ultr… TV    Manga   7.26      9663
##  6 Acidblood      178        0  360834 Male   Ultr… TV    Manga   7.26      9663
##  7 ecoute         178        0  288152 Male   Ultr… TV    Manga   7.26      9663
##  8 rzaevorh…      178        0  239016 Male   Ultr… TV    Manga   7.26      9663
##  9 Yzui           178        0 3343571 Male   Ultr… TV    Manga   7.26      9663
## 10 zombie_p…      178        6 4218491 Male   Ultr… TV    Manga   7.26      9663
## # ℹ 124 more rows
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>
# Lấy ra bộ anime  có tên là Naruto: Shippuuden
ani3 <- ani %>% filter(title == 'Naruto: Shippuuden')
ani3 
## # A tibble: 1,667 × 13
##    username  anime_id my_score user_id gender title type  source score scored_by
##    <chr>        <int>    <int>   <int> <chr>  <chr> <chr> <chr>  <dbl>     <int>
##  1 karthiga      1735        9 2255153 Female Naru… TV    Manga   8.18    385179
##  2 Redvelve…     1735        9 1897606 Female Naru… TV    Manga   8.18    385179
##  3 bskai         1735        9  228342 Male   Naru… TV    Manga   8.18    385179
##  4 Slimak        1735       10   61677 Male   Naru… TV    Manga   8.18    385179
##  5 MistButt…     1735        0 2485327 Female Naru… TV    Manga   8.18    385179
##  6 kioniel       1735        0  144049 Male   Naru… TV    Manga   8.18    385179
##  7 Xinil         1735        7       1 Male   Naru… TV    Manga   8.18    385179
##  8 xTheFall…     1735        6  340873 Male   Naru… TV    Manga   8.18    385179
##  9 scootars…     1735        0   19539 Male   Naru… TV    Manga   8.18    385179
## 10 Akihara       1735        9   82964 Female Naru… TV    Manga   8.18    385179
## # ℹ 1,657 more rows
## # ℹ 3 more variables: rank <int>, popularity <int>, genre <chr>

Lọc theo đánh giá

# Lọc ra các bộ anime theo điểm trung bình  đánh giá 
ani4 <- ani %>% filter(title == 'One Piece' & score > 8 )
dim(ani4) 
## [1] 2319   13
ani5 <- ani %>% filter(title == 'Ultra Maniac' & score > 7 )
dim(ani5)
## [1] 134  13