date: “17:20:06, 02 - 03 - 2024”

output: html_document: toc: true toc_float: true number_sections: true


1 BỘ DỮ LIỆU DIAMOND

Bộ dữ liệu “diamonds” là một tập dữ liệu phổ biến thường được sử dụng trong phân tích dữ liệu. Bộ dữ liệu này chứa thông tin về các mẫu kim cương, bao gồm các thuộc tính như trọng lượng (carat), giá (price), độ trong suốt (clarity), màu sắc (color), loại cắt (cut), độ sâu (depth), chiều rộng (table), và các kích thước khác (x, y, z).

Dưới đây là một phân tích chi tiết về bộ dữ liệu diamonds:

Giới thiệu về bộ dữ liệu

Bộ dữ liệu chứa thông tin về 53,940 mẫu kim cương. Mỗi mẫu được mô tả bởi 10 thuộc tính. Đây là một bộ dữ liệu thực tế được sử dụng rộng rãi trong cộng đồng dữ liệu và phân tích dữ liệu.

Cấu trúc dữ liệu

Bộ dữ liệu diamonds có 10 cột và 53,940 hàng.

Các biến bao gồm:

  • carat: Trọng lượng của kim cương.

  • cut: Loại cắt của kim cương (Fair, Good, Very Good, Premium, Ideal).

  • color: Màu sắc của kim cương, được mã hóa từ D (tốt nhất) đến J (kém nhất).

  • clarity: Độ trong suốt của kim cương (IF, VVS1, VVS2, VS1, VS2, SI1, SI2, I1).

  • depth: Độ sâu của kim cương, được đo từ mặt bên dưới đến mặt trên, chia cho chiều dài.

  • table: Chiều rộng của mặt bên trên của kim cương so với điểm cắt, chia cho chiều rộng lớn nhất.

  • price: Giá của kim cương (đơn vị: USD).

  • x: Chiều dài của kim cương (đơn vị: mm).

  • y: Chiều rộng của kim cương (đơn vị: mm).

  • z: Chiều sâu của kim cương (đơn vị: mm). ***

2 VẼ BIỂU CÁC BIỂU ĐỒ BARCHART

library(tidyverse)
## ── 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.0
## ✔ 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
install.packages("ggplot2")
## Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2)

2.1 Vẽ biểu đồ cho biến carat

ggplot(diamonds, aes(x = carat)) +
  geom_bar(fill = "pink", color = "black") +
  labs(title = "Distribution of Carat",
       x = "Carat",
       y = "Frequency") +
  theme_minimal()

  • Trọng lượng của các viên kim cương (carat): Biểu đồ này cho thấy phân phối của trọng lượng các viên kim cương trong bộ dữ liệu. Đa số các viên kim cương có trọng lượng tập trung ở mức dưới 1 carat, nhưng cũng có một số lượng ít các viên kim cương có trọng lượng lớn hơn.

2.2 Vẽ biểu đồ bar chart cho biến cut

ggplot(diamonds, aes(x = cut)) +
  geom_bar(fill = "#336666", color = "black") +
  labs(title = "Distribution of Cut Quality",
       x = "Cut Quality",
       y = "Frequency") +
  theme_minimal()

  • Chất lượng cắt của các viên kim cương (cut): Biểu đồ này cho thấy phân phối của chất lượng cắt của các viên kim cương trong bộ dữ liệu. Chất lượng cắt được chia thành 5 cấp độ từ kém nhất (Fair) đến tốt nhất (Ideal), với số lượng viên kim cương nhiều nhất nằm ở cấp độ Very Good và Premium

2.3 Vẽ biểu đồ bar chart cho biến color

ggplot(diamonds, aes(x = color)) +
  geom_bar(fill = "darkred", color = "black") +
  labs(title = "Distribution of Diamond Color",
       x = "Color",
       y = "Frequency") +
  theme_minimal()    

  • Màu sắc của các viên kim cương (color): Biểu đồ này cho thấy phân phối của màu sắc của các viên kim cương trong bộ dữ liệu. Màu sắc được đánh giá từ D (trong suốt nhất) đến J (màu vàng nhạt nhất). Đa số các viên kim cương có màu sắc tập trung ở mức G, F và H.

2.4 Vẽ biểu đồ cho biến clarity

ggplot(diamonds, aes(x = clarity)) +
  geom_bar(fill = "beige", color = "black") +
  labs(title = "Distribution of Diamond Clarity",
       x = "Clarity",
       y = "Frequency") +
  theme_minimal()

  • Độ trong suốt của các viên kim cương (clarity): Biểu đồ này cho thấy phân phối của độ trong suốt của các viên kim cương trong bộ dữ liệu. Độ trong suốt được đánh giá từ I1 (nhiều khuyết điểm) đến IF (hoàn toàn trong suốt). Đa số các viên kim cương có độ trong suốt ở mức SI1 và SI2.

2.5 Vẽ biểu đồ cho biến depth

ggplot(diamonds, aes(x = depth)) +
  geom_bar(fill = "lightpink", color = "black") +
  labs(title = "Distribution of Depth",
       x = "Depth",
       y = "Frequency") +
  theme_minimal()

  • Tỷ lệ chiều sâu của các viên kim cương (depth): Biểu đồ này cho thấy phân phối của tỷ lệ chiều sâu của các viên kim cương trong bộ dữ liệu. Tỷ lệ chiều sâu thường tập trung ở mức 60% đến 65%, với một số lượng nhỏ các viên kim cương có tỷ lệ chiều sâu cao hơn.

2.6 Biểu đồ cho biến table

ggplot(diamonds, aes(x = table)) +
  geom_bar(fill = "lightyellow", color = "black") +
  labs(title = "Distribution of Table",
       x = "Table",
       y = "Frequency") +
  theme_minimal()

  • Tỷ lệ chiều rộng của các viên kim cương (table): Biểu đồ này cho thấy phân phối của tỷ lệ chiều rộng của đỉnh của các viên kim cương so với chiều rộng của toàn bộ viên kim cương trong bộ dữ liệu. Tỷ lệ chiều rộng thường tập trung ở mức 55% đến 60%, nhưng cũng có một số lượng ít các viên kim cương có tỷ lệ chiều rộng cao hơn.

2.7 Biểu đồ cho biến price

ggplot(diamonds, aes(x = price)) +
  geom_bar(fill = "lightgray", color = "black") +
  labs(title = "Distribution of Price",
       x = "Price",
       y = "Frequency") +
  theme_minimal()

  • Giá của các viên kim cương (price):

Biểu đồ này cho thấy phân phối của giá của các viên kim cương trong bộ dữ liệu. Giá của các viên kim cương phân bố rộng rãi, từ các giá trị thấp đến các giá trị cao, nhưng có một số lượng lớn các viên kim cương có giá trị tập trung ở mức thấp.


2.8 Biểu đồ cho biến ‘x’

ggplot(diamonds, aes(x = x)) +
  geom_bar(fill = "lightsalmon", color = "black") +
  labs(title = "Distribution of Length (x)",
       x = "Length (x)",
       y = "Frequency") +
  theme_minimal()

  • Chiều dài của các viên kim cương (x):

Biểu đồ này cho thấy phân phối của chiều dài của các viên kim cương trong bộ dữ liệu. Chiều dài của các viên kim cương phân bố rộng rãi, từ các giá trị thấp đến các giá trị cao.


2.9 Biểu đồ cho biến ‘y’

ggplot(diamonds, aes(x = y)) +
  geom_bar(fill = "#336666", color = "black") +
  labs(title = "Distribution of Width (y)",
       x = "Width (y)",
       y = "Frequency") +
  theme_minimal()

  • Chiều rộng của các viên kim cương (y):

Biểu đồ này cho thấy phân phối của chiều rộng của các viên kim cương trong bộ dữ liệu. Chiều rộng của các viên kim cương cũng phân bố rộng rãi, với một số lượng lớn các viên kim cương có chiều rộng tập trung ở mức thấp.


2.10 Biểu đồ cho biến ‘z’

ggplot(diamonds, aes(x = z)) +
  geom_bar(fill = "lightgreen", color = "black") +
  labs(title = "Distribution of Depth (z)",
       x = "Depth (z)",
       y = "Frequency") +
  theme_minimal()

  • Chiều sâu của các viên kim cương (z): Biểu đồ này cho thấy phân phối của chiều sâu của các viên kim cương trong bộ dữ liệu. Tương tự như chiều dài và chiều rộng, chiều sâu của các viên kim cương cũng phân bố rộng rãi.

2.11 Sử dụng facet_wrap để tạo các biểu đồ con dựa trên giá trị của biến color.

diamonds %>%
  group_by(cut, color) %>%
  summarise(n = n()) %>%
  ggplot(aes(x = cut, y = n, fill = cut)) +  # Thay đổi fill thành biến cut
  geom_col(position = 'dodge') +
  facet_wrap(~color) +
  scale_fill_manual(values = c("Fair" = "beige", "Good" = "navyblue", "Very Good" = "beige", "Premium" = "navyblue", "Ideal" = "beige")) +  # Thay đổi màu sắc cho từng giá trị của biến cut
  labs(x = 'Loại', y = 'Số lượng')
## `summarise()` has grouped output by 'cut'. You can override using the `.groups`
## argument.

  • Biểu đồ giúp hiểu được phân phối của các loại kim cương (cut) trong từng mức độ màu sắc khác nhau. Mỗi cột trong biểu đồ thể hiện số lượng các loại kim cương (cut) cho mỗi mức độ màu sắc. Đối với mỗi mức độ màu sắc, chúng ta có thể quan sát được sự phân bố của các loại kim cương (cut) là như thế nào. Sự sắp xếp theo màu sắc giúp ta so sánh phân phối của các loại kim cương trong từng mức độ màu sắc, từ đó đánh giá được mức độ ảnh hưởng của màu sắc đối với chất lượng cắt của viên kim cương

  • Ví dụ: Trong một số màu sắc nhất định, có thể thấy rằng các loại kim cương Ideal thường chiếm tỷ lệ cao, cho thấy rằng trong một số trường hợp, các viên kim cương có chất lượng cắt Ideal thường được ưa chuộng hơn. Một số màu sắc có sự phân bố đồng đều giữa các loại kim cương, trong khi ở các màu sắc khác, có sự ưu tiên cho một số loại cắt cụ thể hơn.


2.12 Số lượng các viên kim cương theo từng loại cắt (cut) và màu sắc (color)

diamonds %>%
  group_by(cut, color) %>%
  summarise(n = n()) %>%
  ggplot(aes(x = cut, y = n, fill = cut)) +
  geom_col(position = 'dodge') +
  facet_wrap(~color) +
  geom_text(aes(label = n), vjust = 2, color = 'black') +
  scale_fill_manual(values = c("#FF99CC", "#cc99cc", "#9999cc", "#6699cc", "#3399cc")) +  # Thay đổi màu sắc cho biểu đồ
  labs(x = 'Loại', y = 'Số lượng')
## `summarise()` has grouped output by 'cut'. You can override using the `.groups`
## argument.

  • Biểu đồ này giúp hiểu được sự phân bố của các loại cắt (cut) kim cương trong từng mức độ màu sắc khác nhau. Bằng cách so sánh số lượng các loại cắt trong từng mức độ màu sắc, chúng ta có thể nhận biết xu hướng ưa chuộng của loại cắt nào trong các mức độ màu sắc khác nhau.

2.13 Màu sắc theo giá trị trung bình

  • Nhóm các quan sát theo loại cắt (cut) của kim cương, sau đó tính giá trị trung bình của trọng lượng (carat) cho mỗi nhóm.Vẽ biểu đồ cột (bar chart), với trục x là loại cắt (cut), trục y là giá trị trung bình của trọng lượng (mean), và sử dụng geom_text để hiển thị giá trị trung bình trên mỗi cột.
diamonds %>%
  group_by(cut) %>%
  summarise(m = mean(carat)) %>%
  ggplot(aes(x = cut, y = m, fill = cut)) +
  geom_col(position = 'dodge', fill = c("#ffffff", "#ccffff", "#99ffff", "#ccccff", "#99ccff")) +
  geom_text(aes(label = round(m, 2)), vjust = 2, color = 'black') +
  labs(x = 'Màu', y = 'Mean')

  • Biểu đồ này giúp so sánh giá trị trung bình của trọng lượng (carat) giữa các loại cắt khác nhau. Có thể quan sát rằng, mức độ trung bình của trọng lượng thường tăng dần từ các loại cắt có chất lượng thấp (ví dụ: “Fair”) đến các loại cắt có chất lượng cao (ví dụ: “Ideal”).

2.14 Phân loại kim cuong theo màu sắc và cut

tn <- diamonds
tn <- tn %>% group_by(cut, color) %>% summarise(n = n())
## `summarise()` has grouped output by 'cut'. You can override using the `.groups`
## argument.
tn %>% ggplot(aes(x = cut, y = n)) +
  geom_col(data = tn %>% filter(color == 'D'), fill = '#00676B') +
  geom_col(data = tn %>% filter(color == 'J'), fill = '#99D1D3')

  • Biểu đồ trên hiển thị số lượng các mẫu kim cương được phân loại theo loại (cut) và màu sắc (color). Mỗi cột biểu đồ đại diện cho một loại kim cương, được phân tách thành các nhóm màu sắc khác nhau. Các cột có thể so sánh với nhau dễ dàng và cho phép ta nhìn thấy phân bố của các mẫu kim cương theo loại và màu sắc.

2.15 Tạo biến mới và vẽ biểu đồ

tn1 <- diamonds 
tn1 <- tn1 %>% mutate(caratC = cut(carat,5, label = c('rất nhỏ', 'nhỏ','vừa','lớn','rất lớn')))
tn1 %>% ggplot(aes(x = caratC)) +
  geom_bar(fill = '#98D0B9')

2.16 Mẫu kim cương theo mức độ trong suốt (clarity) và màu sắc (color)

diamonds %>% group_by(clarity,color) %>% summarise(n=n()) %>%
  ggplot(aes(x = clarity,y = n)) +
    geom_col(position = 'dodge') +
    facet_wrap(~color) +
    geom_text(aes(label = n),vjust = 2, color = 'white') +
    labs(x = 'Loại', y = 'Số lượng')
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.

  • Biểu đồ này sẽ hiển thị số lượng các mẫu kim cương được tổng hợp theo mức độ trong suốt và màu sắc, và mỗi panel sẽ so sánh phân phối của clarity trong các nhóm màu sắc khác nhau. Các con số trắng trên mỗi cột sẽ cung cấp thông tin về số lượng mẫu tương ứng

2.17 Thêm màu sắc cho từng loại

diamonds %>% 
  group_by(clarity, cut) %>% 
  summarise(n = n()) %>%
  ggplot(aes(x = clarity, y = n, fill = cut)) +
  geom_col(position = 'dodge') +
  facet_wrap(~cut) +
  geom_text(aes(label = n), vjust = 2, color = 'white') +
  labs(x = 'Loại', y = 'Số lượng') +
  scale_fill_manual(values = c("#191970", "#6495ED", "#0000CD", "#B0E0E6", "#4682B4"))
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.

2.18 Mẫu kim cương được tổng hợp theo mức độ trong suốt (clarity) và loại (cut)

diamonds %>% group_by(clarity,cut) %>% summarise(n=n()) %>%
  ggplot(aes(x = clarity,y = n)) +
    geom_col(position = 'dodge') +
    facet_wrap(~cut) +
    geom_text(aes(label = n),vjust = 2, color = 'white') +
    labs(x = 'Loại', y = 'Số lượng')
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.

  • Biểu đồ này sẽ hiển thị số lượng các mẫu kim cương được tổng hợp theo mức độ trong suốt và loại, với mỗi panel so sánh phân phối của clarity trong các loại kim cương khác nhau. Các con số trắng trên mỗi cột sẽ cung cấp thông tin về số lượng mẫu tương ứng.

2.19 Thêm màu sắc cho biểu đồ trên

diamonds %>% 
  group_by(clarity, cut) %>% 
  summarise(n = n()) %>%
  ggplot(aes(x = clarity, y = n, fill = cut)) +
  geom_col(position = 'dodge') +
  facet_wrap(~cut) +
  geom_text(aes(label = n), vjust = 2, color = 'white') +
  labs(x = 'Loại', y = 'Số lượng') +
  scale_fill_manual(values = c("#7FFFD4", "#66CDAA", "#458B74", "#698B69", "#556B2F"))
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.

2.20 Biểu đồ thống kê trung bình carat theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_carat = mean(carat)) %>%
  ggplot(aes(x = cut, y = mean_carat, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình carat theo loại", x = "Loại", y = "Trung bình carat") +
  scale_fill_brewer(palette = "Accent")

  • Biểu đồ này hiển thị giá trị trung bình của carat (trọng lượng) cho từng loại kim cương. Cho biết sự biến động của trọng lượng trung bình của kim cương theo loại cắt.

2.21 Biểu đồ thống kê trung bình giá theo loại cut

diamonds %>%
  group_by(cut) %>%
  summarise(mean_price = mean(price)) %>%
  ggplot(aes(x = cut, y = mean_price, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình giá theo loại", x = "Loại", y = "Trung bình giá") +
  scale_fill_brewer(palette = "Dark2")

  • Biểu đồ này thể hiện giá trị trung bình của kim cương cho từng loại cắt. Cung cấp thông tin về sự khác biệt về giá của kim cương dựa trên loại cắt.

2.22 Biểu đồ thống kê trung bình độ sâu (depth) theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_depth = mean(depth)) %>%
  ggplot(aes(x = cut, y = mean_depth, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình độ sâu theo loại", x = "Loại", y = "Trung bình độ sâu") +
  scale_fill_brewer(palette = "Pastel1")

  • Biểu đồ này cho biết giá trị trung bình của độ sâu của kim cương cho từng loại cắt. Cung cấp thông tin về độ sâu trung bình của kim cương dựa trên loại cắt.

2.23 Biểu đồ thống kê trung bình chiều rộng (table) theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_table = mean(table)) %>%
  ggplot(aes(x = cut, y = mean_table, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình chiều rộng theo loại", x = "Loại", y = "Trung bình chiều rộng") +
  scale_fill_brewer(palette = "Pastel4")
## Warning: Unknown palette: "Pastel4"

*Biểu đồ này hiển thị giá trị trung bình của chiều rộng của kim cương cho từng loại cắt. Cho biết sự biến động của chiều rộng trung bình của kim cương dựa trên loại cắt.

2.24 Biểu đồ thống kê trung bình chiều dài (x) theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_x = mean(x)) %>%
  ggplot(aes(x = cut, y = mean_x, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình chiều dài theo loại", x = "Loại", y = "Trung bình chiều dài") +
  scale_fill_brewer(palette = "Dark2")

  • Biểu đồ này thể hiện giá trị trung bình của chiều dài của kim cương cho từng loại cắt. Cung cấp thông tin về chiều dài trung bình của kim cương dựa trên loại cắt.

2.25 Biểu đồ thống kê trung bình chiều rộng (y) theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_y = mean(y)) %>%
  ggplot(aes(x = cut, y = mean_y, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình chiều rộng theo loại", x = "Loại", y = "Trung bình chiều rộng") +
  scale_fill_brewer(palette = "Pastel2")

  • Biểu đồ này so sánh chiều rộng trung bình của kim cương giữa các loại cắt. Cho thấy sự biến động về kích thước ngang của kim cương giữa các loại cắt.

2.26 Trung bình chiều cao (z) theo loại (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(mean_z = mean(z)) %>%
  ggplot(aes(x = cut, y = mean_z, fill = cut)) +
  geom_col() +
  labs(title = "Trung bình chiều cao theo loại", x = "Loại", y = "Trung bình chiều cao") +
  scale_fill_brewer(palette = "Set2")

  • Biểu đồ này thể hiện chiều cao trung bình của kim cương cho từng loại cắt. Cho thấy sự khác biệt về chiều cao của kim cương giữa các loại cắt.

2.27 Trung bình giá theo màu sắc (color)

diamonds %>%
  group_by(color) %>%
  summarise(mean_price = mean(price)) %>%
  ggplot(aes(x = color, y = mean_price, fill = color)) +
  geom_col() +
  labs(title = "Trung bình giá theo màu sắc", x = "Màu sắc", y = "Trung bình giá") +
  scale_fill_brewer(palette = "Set1")

  • Biểu đồ này thể hiện giá trị trung bình của các kim cương dựa trên màu sắc của chúng. Ta có thể quan sát sự biến động của giá trị trung bình theo từng màu sắc khác nhau, điều này cho thấy sự ảnh hưởng của màu sắc đối với giá trị của kim cương.

2.28 Trung bình giá theo độ trong suốt (clarity)

diamonds %>%
  group_by(clarity) %>%
  summarise(mean_price = mean(price)) %>%
  ggplot(aes(x = clarity, y = mean_price, fill = clarity)) +
  geom_col() +
  labs(title = "Trung bình giá theo độ trong suốt", x = "Độ trong suốt", y = "Trung bình giá") +
  scale_fill_brewer(palette = "Set2")

  • Biểu đồ này thể hiện giá trị trung bình của các kim cương dựa trên độ trong suốt của chúng. Ta có thể quan sát sự tăng giảm của giá trị trung bình theo các mức độ độ trong suốt khác nhau, điều này cho thấy sự ảnh hưởng của độ trong suốt đối với giá của kim cương.

2.29 Số lượng mẫu theo độ trong suốt và loại cắt (clarity và cut)

diamonds %>%
  group_by(clarity, cut) %>%
  summarise(count = n()) %>%
  ggplot(aes(x = clarity, y = count, fill = cut)) +
  geom_col(position = "dodge") +
  labs(title = "Số lượng mẫu theo độ trong suốt và loại cắt", x = "Độ trong suốt", y = "Số lượng") +
  scale_fill_brewer(palette = "Set3")
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.

  • Biểu đồ này thể hiện số lượng mẫu kim cương được phân loại theo độ trong suốt và loại cắt. Sử dụng biểu đồ này, chúng ta có thể nhận thấy phân phối của các mẫu kim cương dựa trên độ trong suốt và loại cắt, giúp hiểu rõ hơn về đa dạng của dữ liệu.

2.30 Phương sai của giá theo loại cắt (cut)

diamonds %>%
  group_by(cut) %>%
  summarise(var_price = var(price)) %>%
  ggplot(aes(x = cut, y = var_price, fill = cut)) +
  geom_col() +
  labs(title = "Phương sai của giá theo loại cắt", x = "Loại cắt", y = "Phương sai giá") +
  scale_fill_brewer(palette = "Set3")  

  • Biểu đồ này thể hiện giá trị phương sai của giá của các kim cương dựa trên loại cắt. Sử dụng biểu đồ này, chúng ta có thể so sánh sự biến động của giá giữa các loại cắt khác nhau, giúp hiểu rõ hơn về sự đa dạng của giá trị trong mỗi loại cắt.