1 Giới thiệu bộ dữ liệu

  • Bộ dữ liệu apple_quality chứa thông tin về các thuộc tính khác nhau của một tập hợp các loại hoa quả, cung cấp thông tin về đặc điểm của chúng. Bộ dữ liệu bao gồm các chi tiết như ID của hoa quả, kích thước, trọng lượng, độ ngọt, độ giòn, độ sủi, độ chín, độ axit và chất lượng.

  • Bộ dữ liệu có 3999 quan sát với 9 biến lần lượt là:

    • A_id: Định danh duy nhất cho mỗi loại hoa quả
    • Size: Kích thước của loại hoa quả
    • Weight: Trọng lượng của loại hoa quả
    • Sweetness: Độ ngọt của loại hoa quả
    • Crunchiness: Độ giòn của loại hoa quả
    • Juiciness: Mức độ sủi của loại hoa quả
    • Ripeness: Tình trạng chín của loại hoa quả
    • Acidity: Mức độ axit của loại hoa quả
    • Quality: Chất lượng tổng thể của loại hoa quả
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
h<- read.csv('C:/Users/QUYNH HUONG/Downloads/apple_quality2.csv',header=T)
datatable(h)

2 Phân tích bộ dữ liệu bằng biểu đồ

library(dplyr)
install.packages("ggplot2",repos="https://cran.rstudio.com/")
library(ggplot2)

2.1 Biểu đồ cột:Số lượng hoa quả theo chất lượng

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
h%>% group_by(Quality)%>%summarise(n=n())%>% ggplot(aes(Quality,n))+
  geom_col(fill='pink')+
  geom_text(aes(label=n),vjust=0,color='black')+
  labs(x= 'Chất lượng',y='Số lượng',title='Số lượng hoa quả theo chất lượng')

  • library(tidyverse): Dòng này sử dụng hàm library() để nạp gói tidyverse, bao gồm nhiều gói phổ biến trong phân tích dữ liệu như ggplot2, dplyr, tidyr,…
  • library(scales): Tương tự, dòng này sử dụng hàm library() để nạp gói scales, một gói hữu ích trong việc tùy chỉnh định dạng trục và chia tỷ lệ.
  • group_by(Quality): Nhóm dữ liệu theo cột Quality.
  • summarise(n=n()): Tính tổng số lượng dữ liệu trong mỗi nhóm và lưu kết quả vào cột n.
  • aes(Quality, n): Định nghĩa mối quan hệ giữa các biến Quality và n.
  • geom_col(fill=‘pink’): Vẽ biểu đồ cột với màu nền hồng.
  • geom_text(aes(label=n), vjust=0, color=‘black’): Thêm nhãn số lượng lên mỗi cột với màu đen, và điều chỉnh vị trí dọc của nhãn với vjust=0.
  • labs(x= ‘Chất lượng’, y=‘Số lượng’, title=‘Số lượng hoa quả theo chất lượng’): Đặt tiêu đề cho trục x, trục y và tiêu đề chính của biểu đồ.

Kết quả:

Biểu đồ giúp trực quan hóa sự phân bố số lượng hoa quả theo chất lượng. Qua đó, ta có thể dễ dàng nhận thấy:

  • Mức chất lượng nào có số lượng hoa quả cao nhất/thấp nhất
  • Mức độ chênh lệch về số lượng giữa các mức chất lượng

vd: Ở trong bài này ta thấy ở cột đầu tiên là số lượng của hoa quả ở loại Bad là 1996

2.2 Biểu đồ Phân phối của độ ngọt

h%>%ggplot(aes(Sweetness)) +
  geom_histogram(binwidth = 1, fill = "skyblue",color="black") +
  labs(title = "Phân phối của độ ngọt")

- ggplot: Khởi tạo một ggplot object. - h: Dữ liệu được sử dụng để tạo biểu đồ. - aes(x = Sweetness): Ánh xạ thuộc tính Sweetness cho trục x. - geom_histogram: Thêm một layer histogram vào biểu đồ. - binwidth = 1: Chiều rộng của mỗi thanh histogram là 1 đơn vị. - fill = “skyblue”: Tô màu thanh histogram bằng màu “skyblue”. - color = “black”: Vẽ viền thanh histogram bằng màu đen. - labs: Thêm tiêu đề cho biểu đồ. - title = “Phân phối của độ ngọt”: Tiêu đề của biểu đồ là “Phân phối của độ ngọt”. Kết quả Biểu đồ thể hiện mức độ biến động của độ ngọt. Ví dụ: Nếu các cột có độ cao chênh lệch lớn, độ ngọt có mức độ biến động cao. Nếu các cột có độ cao tương đồng, độ ngọt có mức độ biến động thấp. vd: ngay vị trí -4 ta thấy cột nằm trong khoảng từ 100-200

2.3 Biểu đồ Phân bố của độ chua và giá trị trung bình của độ chua

h %>%
  ggplot(aes(x = Acidity)) +
  geom_density(fill = 'brown') +
  geom_vline(xintercept = mean(h$Acidity), color = 'black', linetype = 'dashed')+ labs(title='Biểu đồ Phân bố của độ chua và giá trị trung bình của độ chua')

  • h %>%: Sử dụng toán tử pipe %>% để truyền dữ liệu h vào hàm ggplot.
  • ggplot: Khởi tạo một ggplot object mới.
  • aes(x = Acidity): Ánh xạ thuộc tính Acidity của dữ liệu h vào trục x của biểu đồ.
  • geom_density: Thêm một đường mật độ vào biểu đồ để hiển thị phân bố của dữ liệu Acidity.
  • fill = ‘brown’: Tô màu cho đường mật độ bằng màu nâu.
  • geom_vline(xintercept = mean(h$Acidity), color = ‘black’, linetype = ‘dashed’): Thêm một - geom_vline: Thêm một đường thẳng đứng vào biểu đồ.
  • xintercept = mean(h$Acidity): Vị trí của đường thẳng đứng được xác định bởi giá trị trung bình (mean) của thuộc tính Acidity trong dữ liệu h. Ký hiệu $ được sử dụng để truy cập vào thuộc tính của một data frame.
  • color = ‘black’: Đường thẳng đứng có màu đen.
  • linetype = ‘dashed’: Đường thẳng đứng có kiểu nét đứt đoạn.

Câu lệnh này tạo ra một biểu đồ mật độ (density plot) hiển thị phân bố của độ chua (Acidity) trong dữ liệu h với đường mật độ màu nâu. Ngoài ra, còn có một đường thẳng đứng màu đen, nét đứt đoạn được vẽ ở vị trí trung bình của độ chua, giúp dễ dàng so sánh phân bố dữ liệu với giá trị trung bình.

2.4 Biểu đồ geom_point phân bố theo biến Size, Ripeness,Quality

f<- head(h,1000)
f%>% ggplot(aes(x =Size, y =Ripeness, color= Quality ))+ geom_point()+
  labs(title='Biểu đồ geom_point phân bố theo biến Size, Ripeness,,Quality' )

  • f <- head(h, 1000):
  • Gán 1000 hàng đầu tiên của dữ liệu h cho một biến mới f.
  • f %>% ggplot(aes(x = Size, y = Ripeness, color = Quality)):
  • Tạo một ggplot object mới dựa trên dữ liệu f.
  • aes(x = Size, y = Ripeness, color = Quality): Ánh xạ các thuộc tính Size, Ripeness, và Quality của dữ liệu f vào các yếu tố thẩm mỹ (aesthetic) của biểu đồ:(x Kích thước (Size) được biểu thị trên trục x,y Độ chín (Ripeness) được biểu thị trên trục y)
  • color: Chất lượng (Quality) được biểu thị bằng màu sắc của các điểm dữ liệu.
  • geom_point(): Thêm một layer geom_point vào biểu đồ:Hiển thị dữ liệu dưới dạng các điểm.

Nhìn vào biểu đồ ta thấy màu xanh tương ứng với chất lượng Good, màu hồng tương ứng với chất lượng là Bad phân bố theo Size và Ripeness .

Vd:

Mối liên hệ giữa kích thước và độ chín: Nhìn chung, các sản phẩm có kích thước lớn hơn có xu hướng chín hơn (màu xanh tập trung ở phần trên bên phải của biểu đồ). Tuy nhiên, cũng có một số trường hợp ngoại lệ (màu xanh lá cây xuất hiện ở phần dưới bên trái). Mối liên hệ giữa kích thước và chất lượng: Không có mối liên hệ rõ ràng giữa kích thước và chất lượng. Có những sản phẩm lớn nhưng chất lượng xấu (màu đỏ xuất hiện ở phần trên bên phải), và ngược lại. Mối liên hệ giữa độ chín và chất lượng: Có một số xu hướng cho thấy sản phẩm chín hơn có thể có chất lượng tốt hơn (màu xanh lá cây tập trung ở phần trên bên phải). Tuy nhiên, cũng có nhiều trường hợp ngoại lệ (màu đỏ xuất hiện ở phần trên bên phải).

2.5 Biểu đồ trên là biểu đồ tán xạ thể hiện mối quan hệ giữa kích thước (Size) và độ chín (Ripeness)

f %>% ggplot(aes(x = Size, y = Ripeness)) +
  geom_point(color = 'red') +
  geom_smooth(method = 'lm', color = 'green')+
  labs(title='Biểu đồ trên là biểu đồ tán xạ thể hiện mối quan hệ giữa kích thước (Size) và độ chín (Ripeness)')
## `geom_smooth()` using formula = 'y ~ x'

  • Tạo một ggplot object mới dựa trên dữ liệu f.
  • aes(x = Size, y = Ripeness): Ánh xạ các thuộc tính Size và Ripeness của dữ liệu f vào các yếu tố :(x Kích thước (Size) được biểu thị trên trục x,y Độ chín (Ripeness) được biểu thị trên trục y.
  • geom_point: Hiển thị dữ liệu dưới dạng các điểm.
  • color = ‘red’: Tô màu đỏ cho các điểm dữ liệu.
  • geom_smooth: Thêm một đường mịn vào biểu đồ để tóm tắt xu hướng của dữ liệu.
  • method = ‘lm’: Sử dụng phương pháp hồi quy tuyến tính (linear regression) để tính toán đường mịn.
  • color = ‘green’: Tô màu xanh lá cây cho đường mịn

Giải thích chi tiết:

  • geom_point(color = ‘red’): Vẽ các điểm dữ liệu trên biểu đồ với màu đỏ. Mỗi điểm đại diện cho một giá trị kích thước và độ chín của một đối tượng trong tập dữ liệu.
  • geom_smooth(method = ‘lm’, color = ‘green’): Vẽ đường hồi quy tuyến tính (màu xanh lá) để mô tả mối quan hệ xu hướng giữa kích thước và độ chín. Đường này được tính toán bằng phương pháp hồi quy tuyến tính (lm).

Cách thức biểu đồ thể hiện thông tin:

  • Độ dốc của đường hồi quy: Cho biết mối quan hệ tương quan giữa kích thước và độ chín.
  • Độ dốc dương: Kích thước và độ chín có mối quan hệ tương quan dương. Khi kích thước tăng, độ chín cũng có xu hướng tăng.
  • Độ dốc âm: Kích thước và độ chín có mối quan hệ tương quan âm. Khi kích thước tăng, độ chín có xu hướng giảm.
  • Mức độ phân tán của các điểm dữ liệu: Cho biết mức độ phù hợp của dữ liệu với đường hồi quy.
  • Các điểm dữ liệu nằm gần đường hồi quy: Dữ liệu có độ phù hợp cao với mô hình hồi quy.
  • Các điểm dữ liệu phân tán rộng: Dữ liệu có độ phù hợp thấp với mô hình hồi quy.
install.packages("plotly",repos = "http://cran.us.r-project.org")
## Installing package into 'C:/Users/QUYNH HUONG/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'plotly' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\QUYNH HUONG\AppData\Local\Temp\RtmpOGKnz2\downloaded_packages

2.6 Biểu đồ này là biểu đồ đường thể hiện mối tương quan giữa “Khối lượng quả (g)” và “Tình trạng chín” của 100 quả đầu tiên trong tập dữ liệu h.

library(ggplot2)
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
q <- head(h,100)
q%>%ggplot(aes_string(x = "Weight", y = "Ripeness")) +
  
  geom_line() +
  labs(x = "Khối lượng quả (g)", y = "Tình trạng chín", title='Biểu đồ này là biểu đồ đường thể hiện mối tương quan giữa "Khối lượng quả (g)" và "Tình trạng chín" của 100 quả đầu tiên trong tập dữ liệu h')
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

  • q <- head(h, 100): Lấy 100 hàng đầu tiên của dữ liệu h và lưu vào biến q. ggplot(q, aes_string(x = “Weight”, y = “Ripeness”)): Khởi tạo một ggplot object mới dựa trên dữ liệu q.
  • aes_string(x = “Weight”, y = “Ripeness”): Ánh xạ các cột “Weight” và “Ripeness” của dữ liệu q vào các yếu tố thẩm mỹ của biểu đồ:x: Khối lượng quả (Weight) được biểu thị trên trục x,y: Tình trạng chín (Ripeness) được biểu thị trên trục y.
  • geom_line(): Thêm một layer geom_line vào biểu đồ:
  • geom_line: Hiển thị dữ liệu dưới dạng đường nối các điểm.
  • labs(x = “Khối lượng quả (g)”, y = “Tình trạng chín”): Thêm nhãn cho trục x và y x: “Khối lượng quả (g)”, y: “Tình trạng chín”

Kết quả

Nhìn vào biểu đồ ta thấy biểu đồ lên xuống theo khối lượng và tình trạng chín

2.7 Biểu đồ mật độ 2D thể hiện sự phân bố của các điểm dữ liệu trong các biến Sweetness và Crunchiness

r <- ggplot(
    data = h,mapping
     = aes(x =Sweetness, y = Crunchiness ))+
  stat_density2d(
    geom = "raster",
    mapping = aes(fill = after_stat(density)),
    contour = FALSE)+
  theme_minimal()
r

r + scale_fill_viridis_c(option = "plasma") + labs(title='biểu đồ mật độ 2D thể hiện sự phân bố của các điểm dữ liệu trong các biến Sweetness và Crunchiness')

  • r <- ggplot(…): Dòng này tạo một đối tượng ggplot mới và gán nó cho biến r.
  • data = h: Xác định khung dữ liệu h là nguồn dữ liệu cho biểu đồ.
  • mapping = aes(x = Sweetness, y = Crunchiness): Xác định ánh xạ thẩm mỹ cho biểu đồ. Nó ánh xạ các cột Sweetness và Crunchiness của h sang trục x và trục y tương ứng.
  • stat_density2d(…): Lớp này thêm một biểu đồ mật độ 2D vào ggplot. Hàm stat_density2d ước tính phân phối mật độ chung của hai biến được ánh xạ sang trục x và trục y.
  • geom = “raster”: Thiết lập dạng hình học của ước tính mật độ thành “raster”, là một lưới các ô vuông hoặc hình chữ nhật nhỏ.
  • mapping = aes(fill = after_stat(density)): Xác định ánh xạ thẩm mỹ cho màu tô của các ô vuông. Nó sử dụng hàm after_stat(density) để truy cập giá trị mật độ được tính toán cho mỗi điểm dữ liệu và sử dụng nó để xác định màu sắc.
  • contour = FALSE: Tắt việc vẽ các đường đồng mức, chỉ để lại các ô vuông được tô.
  • theme_minimal(): Áp dụng chủ đề “minimal” cho biểu đồ, loại bỏ hầu hết các yếu tố không cần thiết (ví dụ: đường lưới nền, tiêu đề trục) để có giao diện đẹp hơn.
  • “+”: Trong ngữ cảnh này, dấu “+” thường được sử dụng để kết hợp các yếu tố trong một biểu diễn dữ liệu, chẳng hạn như kết hợp các biểu đồ, cột, hoặc lựa chọn màu sắc.
  • “scale_fill_viridis_c()”: Đây là một hàm trong gói ggplot2 của R, được sử dụng để điều chỉnh màu sắc của các khu vực hoặc dữ liệu trong biểu đồ. Trong trường hợp này, scale_fill_viridis_c() được sử dụng để áp dụng một màu sắc gradient từ gói Viridis cho biểu đồ.
  • “option = ‘plasma’”: Đây là một đối số của hàm scale_fill_viridis_c(), cho phép bạn chọn một trong các loại màu sắc gradient từ bảng màu Viridis. Trong trường hợp này, ‘plasma’ là một loại màu sắc gradient cụ thể từ bảng màu Viridis.

Giải thích

Mật độ tập trung của các điểm dữ liệu: Màu sắc trên biểu đồ thể hiện mật độ tập trung của các điểm dữ liệu. Vùng màu càng đậm, mật độ tập trung càng cao. Mối tương quan giữa Sweetness và Crunchiness: Hình dạng của biểu đồ mật độ 2D cho ta biết mối tương quan giữa hai biến Sweetness và Crunchiness. Hình dạng elip: Biểu thị mối tương quan dương, nghĩa là khi Sweetness tăng, Crunchiness cũng có xu hướng tăng. Hình dạng tròn: Biểu thị không có mối tương quan đáng kể giữa hai biến. Hình dạng khác: Biểu thị mối tương quan không tuyến tính giữa hai biến.

Ví dụ:

Hình elip: Biểu đồ mật độ 2D có hình dạng elip, với mật độ tập trung cao ở khu vực trung tâm. Điều này cho thấy Sweetness và Crunchiness có mối tương quan dương, nghĩa là khi Sweetness tăng, Crunchiness cũng có xu hướng tăng. Vùng màu đậm: Vùng màu đậm ở khu vực Sweetness cao và Crunchiness trung bình cho thấy nhiều điểm dữ liệu tập trung ở khu vực này. Vùng màu nhạt: Vùng màu nhạt ở khu vực Sweetness thấp và Crunchiness cao cho thấy ít điểm dữ liệu tập trung ở khu vực này.

2.8 Biểu đồ cột thể hiện mối quan hệ giữa chất lượng và tình trạng chín

k <- h %>% group_by(Quality,Ripeness ) %>% summarise(n = n())
## `summarise()` has grouped output by 'Quality'. You can override using the
## `.groups` argument.
k %>% ggplot(aes(x = Quality, y = n)) +
  geom_col(data = k %>% filter( Ripeness>(-0.5)), fill = 'black') +
  geom_col(data = k %>% filter(Ripeness<(-0.5)), fill = 'pink')+ labs(title='Biểu đồ cột thể hiện mối quan hệ giữa chất lượng và tình trạng chín')

Qua biểu đồ trên ta nhìn thấy tổng số lượng của chiếm ưu thế hơn so với trong tất các loại. Qua đó ta có cái nhìn tổng quan hơn về phân phối của chúng trong các loại của cột Cut. Giúp cho chúng ta trong việc phân tích và hiểu rõ hơn về màu sắc của các loại kim cương.

2.9 Biểu đồ hình cột (histogram) thể hiện sự phân phối của biến “Weight” (trọng lượng)

h %>% ggplot(aes(x = Weight)) +
  geom_histogram(binwidth = 0.1,fill='lightblue',color='black') +
  labs(title='Biểu đồ hình cột (histogram) thể hiện sự phân phối của biến "Weight" (trọng lượng)' )

h: Biến chứa dữ liệu mà bạn muốn biểu đồ hóa. ggplot(aes(x = Weight)): Khởi tạo một ggplot với aes (thẩm mỹ) được thiết lập. aes(x = Weight): x: Trục hoành của biểu đồ sẽ thể hiện biến Weight. Weight: Tên cột trong dữ liệu h chứa giá trị cho trục hoành. geom_histogram: Thêm một lớp hình histogram vào biểu đồ. binwidth = 0.1: Chiều rộng của mỗi cột là 0.1 đơn vị. fill=‘lightblue’: Tô màu bên trong các cột bằng màu xanh nhạt. color=‘black’: Viền ngoài của các cột có màu đen.

2.10 Biểu đồ tròn thể hiện về sự phân bố của Quality theo số lượng đã lọc theo biến Weight

y <- h %>% filter(Weight<(-0.5))
y %>% group_by(Quality) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill= Quality)) +
    geom_col(color = 'black', width = 6) +
    coord_polar('y') +
    geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5)) + 
  labs(title='Biểu đồ tròn thể hiện về sự phân bố của Quality theo số lượng đã lọc theo biến Weight' )+
    theme_void()

  • y <- h %>% filter(Weight < -0.5): Lọc tập dữ liệu h chỉ lấy các hàng có giá trị cột “Weight” nhỏ hơn -0.5. Chọn các quan sát có trọng lượng âm hoặc thấp.
  • y %>% group_by(Quality) %>% summarise(n = n()): Nhóm dữ liệu đã lọc theo cột “Quality” và tính số lượng quan sát (số đếm) cho mỗi nhóm, lưu kết quả trong cột mới “n”.
  • ggplot(aes(x = ’’, y = n, fill = Quality)): Cài đặt biểu đồ bằng thư viện ggplot2. Xác định thẩm mỹ (ánh xạ) cho biểu đồ:
    • x = ’’: Trục x được để trống vì nó không đại diện cho bất kỳ dữ liệu cụ thể nào trong hệ thống tọa độ cực này.
    • y = n: Trục y thể hiện số lượng quan sát (“n”) cho mỗi nhóm chất lượng.
  • fill = Quality: Màu của mỗi thanh sẽ được xác định bởi mức “Chất lượng” tương ứng.
  • geom_col(color = ‘black’, width = 6): Thêm thanh màu vào biểu đồ.
  • width = 6: Chiều rộng của mỗi thanh được đặt thành 6 đơn vị.
  • coord_polar(‘y’): Xác định việc sử dụng tọa độ cực, trong đó biến “y” xác định bán kính (khoảng cách từ gốc) và góc được cố định cho tất cả các thanh. Tạo bố cục hình tròn
  • geom_text(aes(x = 1.3, label = n), position = position_stack(vjust = .5)): Thêm nhãn văn bản vào đầu mỗi thanh, hiển thị giá trị số đếm tương ứng.
  • x = 1.3: Nhãn văn bản được đặt hơi sang bên phải các thanh (trên trục x tại x = 1.3).
  • label = n: Nhãn văn bản hiển thị giá trị số đếm từ cột “n”.
  • position_stack(vjust = .5): Vị trí các nhãn văn bản được căn giữa theo chiều dọc trên đầu các thanh.
  • theme_void(): Áp dụng chủ đề tối giản cho biểu đồ, loại bỏ hầu hết các yếu tố trực quan như nền, đường lưới và nhãn trục để trình bày rõ ràng hơn. biểu đồ hiển thị các điểm dữ liệu (Độ chín so với Kích thước) và phân phối riêng lẻ của chúng dọc theo các cạnh (biểu đồ hình chữ nhật)

2.11 Biểu đồ hiển thị các điểm dữ liệu (Độ chín so với Kích thước) và phân phối riêng lẻ của chúng dọc theo các cạnh (biểu đồ hình chữ nhật)

t<-head(h,100)
install.packages("ggExtra",repos="https://cran.rstudio.com/")
## Installing package into 'C:/Users/QUYNH HUONG/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'ggExtra' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\QUYNH HUONG\AppData\Local\Temp\RtmpOGKnz2\downloaded_packages
library(ggExtra)
## Warning: package 'ggExtra' was built under R version 4.3.3
o <- ggplot(data = t)+
  geom_point(mapping = aes(y =Ripeness , x = Size)) +
  labs(title = "Scatter plot of Ripeness and Size")
ggMarginal(
  o,                     
  type = "histogram",               
  fill = "lightblue",               
  xparams = list(binwidth = 1),    
  yparams = list(binwidth = 1)) 

  • Hàm ggplot tạo cấu trúc cơ bản cho biểu đồ.
  • geom_point thêm các điểm vào biểu đồ, và đối số mapping chỉ định rằng trục y biểu thị Độ chín và trục x biểu thị Kích thước.
  • labs(title = “Biểu đồ phân tán của độ chín và kích thước”) đặt tiêu đề cho biểu đồ.

Biểu đồ hình chữ nhật bên lề:

  • Hàm ggMarginal từ gói ggExtra thêm biểu đồ hình chữ nhật vào lề của biểu đồ phân tán.
  • type = “histogram” chỉ định rằng các biểu đồ lề nên là biểu đồ hình chữ nhật.
  • fill = “lightblue” đặt màu tô cho các thanh biểu đồ hình chữ nhật thành màu xanh lam nhạt.
  • xparams = list(binwidth = 1) và yparams = list(binwidth = 1) định nghĩa độ rộng của thùng cho biểu đồ hình chữ nhật trên trục x và y tương ứng. Ở đây, mỗi thùng rộng một đơn vị.

Ví dụ:

Nếu các điểm trong biểu đồ phân tán tập trung thành một đường thẳng đi lên, có thể kết luận rằng độ chín và kích thước có mối tương quan dương mạnh. Nếu biểu đồ hình thanh cho thấy kích thước có phân bố lệch trái, nghĩa là có nhiều điểm dữ liệu có kích thước nhỏ hơn giá trị trung bình.

2.12 Biểu đồ diện tích (area chart) thể hiện mối quan hệ giữa kích thước táo (Size) và điểm chất lượng (Quality)

h%>%ggplot(aes(x =Size , y = Quality)) +
  geom_area(fill = "lightblue") +  
  labs(x = "Kích thước", y = "Điểm chất lượng",title='Biểu đồ diện tích (area chart) thể hiện mối quan hệ giữa kích thước táo (Size) và điểm chất lượng (Quality)')

Khởi tạo một biểu đồ ggplot2 với hai trục: Trục x: Biến Size (Kích thước) Trục y: Biến Quality (Điểm chất lượng) Thêm hình dạng geom_area để vẽ biểu đồ diện tích. Diện tích được tô màu “lightblue”. Thêm nhãn cho các trục và tiêu đề cho biểu đồ: Trục x: “Kích thước” Trục y: “Điểm chất lượng” Tiêu đề: “Biểu đồ diện tích (area chart) thể hiện mối quan hệ giữa kích thước táo (Size) và điểm chất lượng (Quality)”

Ví dụ:

Giả sử bạn có dữ liệu về kích thước và điểm chất lượng của 100 quả táo. Biểu đồ diện tích cho thấy điểm chất lượng có xu hướng tăng khi kích thước táo tăng. Tuy nhiên, để khẳng định mối quan hệ này là đáng tin cậy, bạn cần thực hiện các phân tích thống kê bổ sung.

Bạn có thể sử dụng hệ số tương quan Pearson để đánh giá mức độ tương quan giữa hai biến. Hệ số tương quan có giá trị từ -1 đến 1. Giá trị 0 cho thấy không có tương quan, giá trị 1 cho thấy tương quan hoàn toàn dương, và giá trị -1 cho thấy tương quan hoàn toàn âm.

2.13 Biểu đồ histogram 2D (hay còn gọi là biểu đồ mật độ 2D) thể hiện mối tương quan giữa hai biến: Tình trạng chín (Ripeness) và Điểm chất lượng (Quality) của táo

h%>%ggplot( aes(x = Ripeness, y = Quality)) +
  geom_bin_2d() +  
  labs(title = "Biểu đồ histogram 2D chất lượng táo", 
       x = "Tình trạng chín", y = "Điểm chất lượng")

  • h: Biến dữ liệu chứa thông tin về Tình trạng chín và Điểm chất lượng. ggplot(aes()): Khởi tạo một biểu đồ ggplot2 với aes() để thiết lập các biến x và y cho biểu đồ.
  • geom_bin_2d(): Thêm lớp hình học geom_bin_2d() để tạo biểu đồ histogram 2D.
  • labs(): Hàm dùng để thêm tiêu đề và nhãn cho các trục.

Kết quả:

Biểu đồ hiển thị mật độ phân bố của các điểm dữ liệu dựa trên hai biến Tình trạng chín và Điểm chất lượng. Màu sắc thể hiện mật độ cao (tối) và thấp (sáng). Biểu đồ giúp ta hình dung mối tương quan giữa hai biến

Ví dụ:

Phân tích và giải thích kết quả biểu đồ histogram 2D chất lượng táo:

Biểu đồ cho thấy mối liên hệ tích cực giữa Tình trạng chín và Điểm chất lượng. Ví dụ: Táo chín (Ripeness = 6) có điểm chất lượng trung bình cao hơn táo chưa chín (Ripeness = 3). Táo chín muồi (Ripeness = 8) có điểm chất lượng cao nhất. Táo chín hơn có xu hướng có điểm chất lượng cao hơn. Có thể có một số điểm dữ liệu ngoại lai có điểm chất lượng cao nhưng chưa chín hoặc điểm chất lượng thấp nhưng đã chín.

2.14 Biểu đồ dot plot (biểu đồ chấm) thể hiện chất lượng táo

h%>%ggplot(aes(x =Quality)) +
  geom_dotplot( fill = "skyblue") +
  labs(title = "Biểu đồ dot plot chất lượng táo",
       x = "Điểm chất lượng")
## Bin width defaults to 1/30 of the range of the data. Pick better value with
## `binwidth`.

  • h%>%ggplot(aes(x =Quality)): Khởi tạo một biểu đồ ggplot2 với trục x thể hiện “Điểm chất lượng” (Quality).
  • geom_dotplot( fill = “skyblue”): Thêm các chấm vào biểu đồ, mỗi chấm đại diện cho một giá trị “Điểm chất lượng”. Màu của các chấm được tô bằng màu “skyblue”.

Kết luận:

Biểu đồ dot plot này giúp trực quan hóa dữ liệu về “Điểm chất lượng” của táo. Mỗi chấm trên biểu đồ đại diện cho một giá trị cụ thể của “Điểm chất lượng”. Việc sử dụng màu sắc giúp phân biệt các giá trị khác nhau. Biểu đồ này giúp người xem dễ dàng nắm bắt được phân bố dữ liệu và các giá trị ngoại lệ (nếu có).

2.15 Biểu đồ phân tán (scatter plot) với đường ngang thể hiện mối quan hệ giữa hai biến số Size và Quality

h%>%ggplot( aes(x = Size, y = Quality)) +
  geom_point() +
  geom_hline(yintercept = mean(h$Quality), color = "red", linetype = "dashed") +
  labs(title = "Biểu đồ scatter plot với đường ngang") +
  theme_minimal()
## Warning in mean.default(h$Quality): argument is not numeric or logical:
## returning NA
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_hline()`).

  • ggplot(aes(x = Size, y = Quality)): Khởi tạo biểu đồ ggplot2 với hai biến số Size và Quality.
  • geom_point(): Thêm các điểm dữ liệu vào biểu đồ. Mỗi điểm đại diện cho một giá trị của Size và Quality.
  • geom_hline(yintercept = mean(h\(Quality), color = "red", linetype = "dashed"): Thêm một đường ngang vào biểu đồ. Đường ngang này được vẽ tại giá trị trung bình của Quality (tính toán bằng mean(h\)Quality)). Màu sắc của đường là đỏ và kiểu đường là đứt nét.
  • labs(title = “Biểu đồ scatter plot với đường ngang”): Thêm tiêu đề cho biểu đồ.
  • theme_minimal(): Áp dụng chủ đề “minimal” cho biểu đồ, giúp đơn giản hóa giao diện và làm nổi bật dữ liệu.

Giả sử bạn có dữ liệu về kích thước và chất lượng của các sản phẩm. Biểu đồ phân tán có thể giúp bạn xem liệu có mối liên hệ nào giữa hai yếu tố này hay không. Ví dụ, nếu các sản phẩm lớn hơn có xu hướng có chất lượng cao hơn, thì các điểm dữ liệu sẽ nằm trên đường ngang đỏ.

2.16 Biểu đồ jitter plot của chất lượng táo

t%>%ggplot(aes(x = Weight, y = Quality)) +
  geom_jitter() +
  labs(title = "Biểu đồ jitter plot của chất lượng táo")

  • ggplot: Hàm khởi tạo một biểu đồ ggplot2.
  • aes: Hàm xác định các biến được sử dụng trong biểu đồ.
    • x = Weight: Biến Weight được sử dụng cho trục X.
    • y = Quality: Biến Quality được sử dụng cho trục Y.
  • Hàm vẽ các điểm jitter trên biểu đồ.

Phân tích:

Câu lệnh này thêm một lớp geom_jitter vào biểu đồ. Lớp này sẽ vẽ các điểm jitter cho mỗi dữ liệu trong tập dữ liệu. Các điểm jitter được thêm nhiễu nhỏ theo chiều ngang để tránh chồng chéo. title: “Biểu đồ jitter plot của chất lượng táo”.

Biểu đồ jitter plot sẽ hiển thị các điểm dữ liệu đại diện cho trọng lượng và chất lượng của mỗi quả táo. Mỗi điểm dữ liệu sẽ được di chuyển một chút ngẫu nhiên theo chiều ngang để tránh chồng chéo. Biểu đồ này giúp bạn visualize mối quan hệ giữa trọng lượng và chất lượng táo, cũng như sự phân bố của dữ liệu.

2.17 Biểu đồ Violin Plot cho apple_quality

h%>%ggplot(aes(x = Weight, y = Quality)) +
  geom_violin(fill = "skyblue") +
  labs(title = "Biểu đồ Violin Plot cho apple_quality",
       x = "Độ giòn",
       y = "Chất lượng")

Biểu đồ geom_violin là một dạng biểu đồ trong ggplot2 dùng để thể hiện sự phân bố của dữ liệu theo từng nhóm. Biểu đồ này kết hợp giữa biểu đồ hộp và biểu đồ mật độ để cung cấp thông tin chi tiết hơn về dữ liệu so với các dạng biểu đồ khác. Hình dạng violin: thể hiện mật độ của dữ liệu. Nơi violin dày nhất là nơi có nhiều dữ liệu tập trung nhất. Điểm trung vị: được đánh dấu bằng một đường dọc bên trong violin. Rìa violin: thể hiện độ lệch của dữ liệu. Rìa violin càng dài, dữ liệu càng phân tán. Vùng màu: thể hiện nhóm dữ liệu

VD

Biểu đồ violin cho thấy mối quan hệ giữa “Weight” và “Quality” của táo. Mỗi violin thể hiện phân bố của “Quality” cho một mức “Weight” cụ thể. Hình dạng của violin cho biết sự tập trung của dữ liệu. Violin rộng hơn cho thấy sự phân tán dữ liệu lớn hơn. Vị trí trung bình của violin thể hiện giá trị trung bình của “Quality” cho từng mức “Weight”. Dải màu bên trong violin thể hiện mật độ của dữ liệu.

2.18 Biểu đồ điểm chất lượng của các loại táo

h%>%ggplot( aes(x = Sweetness, y = Quality)) +
  geom_col(fill = "skyblue") +
  labs(title = "Biểu đồ điểm chất lượng của các loại táo",
       x = "Độ ngọt",
       y = "Loại táo") +
  geom_text(aes(label = Quality), vjust = -1, size = 7)

  • h: Tên của tập dữ liệu chứa thông tin về độ ngọt (“Sweetness”) và điểm chất lượng (“Quality”) của các loại táo.
  • geom_col: Hàm để tạo biểu đồ cột.
  • aes(label = Quality):
  • label: Thuộc tính để xác định nội dung của nhãn. Quality: Giá trị của biến “Quality” được sử dụng làm nội dung của nhãn. vjust = -0.5: Vị trí của nhãn được điều chỉnh xuống 0.5 đơn vị so với vị trí mặc định. size = 4: Kích thước phông chữ của nhãn được đặt thành 4.

2.19 Biểu đồ mật độ 2 chiều với điểm dữ liệu thể hiện mối tương quan giữa hai biến: “Size” (Kích thước) và “Weight” (Trọng lượng)

t %>% 
  ggplot(aes(x = Size, y = Weight))+
  stat_density2d()+
  geom_point()+
  theme_minimal()+
  labs(title = "stat_density2d() + geom_point()")

  • t%>% ggplot(aes(x = Size, y = Weight)): Khởi tạo ggplot2 với dữ liệu từ t. Gán “Size” cho trục x và “Weight” cho trục y.
  • stat_density2d(): Thêm lớp “stat_density2d” để tạo biểu đồ mật độ 2 chiều. Biểu đồ này cho thấy mật độ phân bố của các điểm dữ liệu trên mặt phẳng. Mật độ cao hơn được biểu thị bằng màu sắc đậm hơn.
  • geom_point(): Thêm lớp “geom_point” để hiển thị các điểm dữ liệu riêng lẻ trên biểu đồ.
  • theme_minimal(): Áp dụng chủ đề “minimal” để đơn giản hóa giao diện biểu đồ.
  • labs(title = “stat_density2d() + geom_point()”): Thêm tiêu đề cho biểu đồ.

vd Biểu đồ này cho thấy mối tương quan dương giữa Size và Weight. Vùng có màu đậm hơn cho thấy sự tập trung cao hơn của các điểm dữ liệu, nghĩa là có nhiều dữ liệu hơn ở các giá trị size và weight cao hơn

2.20 Biểu đồ mật độ thể hiện mối quan hệ giữa trọng lượng (Weight) và chất lượng (Quality)

h%>% ggplot(aes(x = Weight, fill = Quality)) +
  geom_density() +labs(title='Biểu đồ mật độ thể hiện mối quan hệ giữa trọng lượng (Weight) và chất lượng (Quality)')

  • h%>% ggplot(aes(x = Weight, fill = Quality)): Khởi tạo biểu đồ ggplot2 với dữ liệu h.
  • aes(x = Weight, fill = Quality): Xác định trục hoành x là Weight và tô màu theo biến Quality.
  • geom_density(): Thêm lớp hình học geom_density() để vẽ biểu đồ mật độ.

Biểu đồ thể hiện phân bố mật độ của Weight cho từng mức Quality. Hình dạng và vị trí của các đường cong mật độ cho biết sự khác biệt về phân bố Weight giữa các mức Quality.

Ví dụ:

Nếu đường cong mật độ của một mức Quality cao hơn và dồn về một giá trị cụ thể, điều đó cho biết phần lớn các dữ liệu trong mức Quality đó tập trung quanh giá trị đó. Nếu đường cong mật độ trải rộng, điều đó cho biết dữ liệu trong mức Quality đó có nhiều biến động hơn.

2.21 Biểu đồ động theo Size và Weight

library(revealjs)
## Warning: package 'revealjs' was built under R version 4.3.3
library(gganimate)
## Warning: package 'gganimate' was built under R version 4.3.3
library(magick)
## Warning: package 'magick' was built under R version 4.3.3
## Linking to ImageMagick 6.9.12.98
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
t %>% ggplot(aes(x = Size, y =Weight, color = Quality)) +
  geom_line() +
  geom_point(size=2) +
  transition_reveal(Size, keep_last = F)
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

Biểu đồ động này được tạo bởi đoạn mã R sử dụng gói ggplot2 và hiệu ứng chuyển tiếp transition_reveal để thể hiện mối quan hệ giữa Size, Weight, Quality

Các yếu tố:

+Trục hoành (x): là kích thước (Size).

Trục tung (y): Là trọng lượng (Weight).

Đường kẻ (geom_line()): Thể hiện xu hướng thay đổi kích thước theo trọng lượng phân biệt theo Quality(chất lượng)

Điểm (geom_point(size=2)): Biểu thị từng cặp dữ liệu (Size và Weight ) với kích thước 2.

Màu sắc (color = Quantily): Các đường kẻ và điểm được tô màu Quality(chất lượng)

Hiệu ứng chuyển tiếp (transition_reveal(Size, keep_last = F)): Dữ liệu được tiết lộ dần dần theo thứ tự tăng dần của lích thước

Nhận xét:

Biểu đồ giúp phân tích mối quan hệ giữa kích thước theo trọng lượng phân biệt theo Quality(chất lượng)

Bạn có thể phân tích xu hướng của size theo weight , so sánh size giữa các loại chất lượng , và xác định chất lượng cao nhất/thấp nhất.