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à:
## Warning: package 'DT' was built under R version 4.3.3
library(dplyr)
install.packages("ggplot2",repos="https://cran.rstudio.com/")
library(ggplot2)
## 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
##
## 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')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:
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
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
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')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.
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' )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).
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'
Giải thích chi tiết:
Cách thức biểu đồ thể hiện thông tin:
## 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
## 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.
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
r <- ggplot(
data = h,mapping
= aes(x =Sweetness, y = Crunchiness ))+
stat_density2d(
geom = "raster",
mapping = aes(fill = after_stat(density)),
contour = FALSE)+
theme_minimal()
rr + 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')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.
## `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.
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.
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()## 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
## 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)) Biểu đồ hình chữ nhật bên lề:
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.
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.
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")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.
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`.
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ó).
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()`).
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 đỏ.
t%>%ggplot(aes(x = Weight, y = Quality)) +
geom_jitter() +
labs(title = "Biểu đồ jitter plot của chất lượng táo")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.
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.
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)t %>%
ggplot(aes(x = Size, y = Weight))+
stat_density2d()+
geom_point()+
theme_minimal()+
labs(title = "stat_density2d() + geom_point()")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
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)')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.
## Warning: package 'revealjs' was built under R version 4.3.3
## Warning: package 'gganimate' was built under R version 4.3.3
## 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.