1 GIỚI THIỆU VỀ DATASET

phone <- read.csv("C:/Users/Public/phone.csv")
str(phone)
## 'data.frame':    1000 obs. of  21 variables:
##  $ id           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ battery_power: int  1043 841 1807 1546 1434 1464 1718 833 1111 1520 ...
##  $ blue         : int  1 1 1 0 0 1 0 0 1 0 ...
##  $ clock_speed  : num  1.8 0.5 2.8 0.5 1.4 2.9 2.4 2.4 2.9 0.5 ...
##  $ dual_sim     : int  1 1 0 1 0 1 0 1 1 0 ...
##  $ fc           : int  14 4 1 18 11 5 1 0 9 1 ...
##  $ four_g       : int  0 1 0 1 1 1 0 0 1 0 ...
##  $ int_memory   : int  5 61 27 25 49 50 47 62 25 25 ...
##  $ m_dep        : num  0.1 0.8 0.9 0.5 0.5 0.8 1 0.8 0.6 0.5 ...
##  $ mobile_wt    : int  193 191 186 96 108 198 156 111 101 171 ...
##  $ n_cores      : int  3 5 3 8 6 8 2 1 5 3 ...
##  $ pc           : int  16 12 4 20 18 9 3 2 19 20 ...
##  $ px_height    : int  226 746 1270 295 749 569 1283 1312 556 52 ...
##  $ px_width     : int  1412 857 1366 1752 810 939 1374 1880 876 1009 ...
##  $ ram          : int  3476 3895 2396 3893 1773 3506 3873 1495 3485 651 ...
##  $ sc_h         : int  12 6 17 10 15 10 14 7 11 6 ...
##  $ sc_w         : int  7 0 10 0 8 7 2 2 9 0 ...
##  $ talk_time    : int  2 7 10 7 7 3 10 18 10 5 ...
##  $ three_g      : int  0 1 0 1 1 1 0 0 1 1 ...
##  $ touch_screen : int  1 0 1 1 0 1 0 1 1 0 ...
##  $ wifi         : int  0 0 1 0 1 1 0 1 0 1 ...

Đây là dữ liệu bán hàng của các điện thoại di động từ các công ty khác nhau với bộ dữ liệu có 21 biến và 1000 quan sát sác biến đươc thể hiện như sau

id:ID

battery_power:Tổng năng lượng mà một viên pin có thể lưu trữ trong một lần đo được tính bằng mAh (milliampere-hour).

blue: Đth có bluetooth hay không

clock_speed: Tốc độ mà bộ máy xử lý thực hiện các lệnh.

dual_sim: Có hỗ trợ SIM kép hay không

fc :Số điểm ảnh (megapixel) của camera trước.

four_g có 4G hay không

int_memory:Bộ nhớ trong tính bằng đơn vị Gigabyte.

m_dep: Độ dày của điện thoại di động tính bằng đơn vị centimet.

mobile_wt:Trọng lượng của điện thoại di động

n_cores:Số lõi của bộ xử lý

pc: Số điểm ảnh chính (megapixel) của camera

px_height:Độ phân giải theo chiều cao của pixel

px_width:Độ phân giải theo chiều rộng của pixel

ram:Bộ nhớ truy cập ngẫu nhiên (RAM) tính bằng đơn vị Megabyte

sc_h:Chiều cao màn hình của điện thoại di động tính bằng đơn vị centimet.

sc_w: Chiều rộng màn hình của điện thoại di động tính bằng đơn vị centimet.

talk_time: Thời gian dài nhất mà một lần sạc pin có thể kéo dài khi bạn sử dụng.

three_g: Cói 3G hay không

touch_screen :Có màn hình cảm ứng hay không

wifi:Có Wifi hay không


2 VẼ CÁC BIỂU ĐỒ

2.1 BIỂU ĐỒ HISTOGRAM THỂ HIỆN NĂNG LƯỢNG PIN CỦA CÁC ĐIỆN THOẠI ĐÃ ĐƯỢC THU THẬP TRONG BỘ DỮ LIỆU

library(tidyverse)
## Warning: package 'tidyverse' 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.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
phone %>% ggplot(aes(x = battery_power,)) +
  geom_histogram(binwidth = 50, fill = 'DARKGREEN', color = 'BLACK') #độ rộng của các khoảng

***

2.2 BIỂU ĐỒ HISTOGRAM THỂ HIỆN NĂNG LƯỢNG PIN CỦA CÁC ĐIỆN THOẠI CÓ HỖ TRỢ SIM KÉP HAY KHÔNG

phone %>% 
  ggplot(aes(x = battery_power)) +
  geom_histogram(binwidth = 50, fill = "#CCFFFF", color = '#006666') +
  facet_wrap(~ dual_sim) +
  labs(
    title = "BIỂU ĐỒ NĂNG LƯƠNG PIN CỦA ĐIỆN THOẠI CHIA THEO SIM",
    x = "Battery Power",
    y = "Frequency"
  )


2.3 Biểu đồ bart chart xoay ngang thể hiện số lượng chiếc điện thoại có sim kep hay không

phone %>%
  ggplot(aes(x = factor(four_g), fill = factor(dual_sim))) +
  geom_bar() +
  coord_flip()

***

2.4 Biểu đồ mật độ thể hiện tốc độ mà điện thoại xử lí và thực hiện dữ liệu

phone %>% 
  ggplot(aes(x = clock_speed)) +
  geom_density(fill = "#FFCCCC", color = '#4575B4') +
  # Đánh số thứ tự cho mỗi câu lệnh khi xuống dòng
  labs(
    title = "Density Plot of Clock Speed",
    x = "Clock Speed",
    y = "Density"
  )


2.5 Biểu đồ mật độ thể hiện tốc độ mà điện thoại xử lí và thực hiện dữ liệu chia theo sim kép hay không

library(tidyverse)
phone %>% 
  ggplot(aes(x = clock_speed)) +
  geom_density(fill = "#EED5B7", color = '#8B7D6B') +
  facet_wrap(~ dual_sim) +
  # Đánh số thứ tự cho mỗi câu lệnh khi xuống dòng
  labs(
    title = "Density Plot of Clock Speed",
    x = "Clock Speed",
    y = "Density"
  )

2.6 BIẾU ĐỒ TÍNH TỔNG SỐ CHIẾC ĐIỆN THOẠI CÓ ĐỘ DÀY KHÁC NHAU

phone %>% group_by(m_dep) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill = m_dep)) +
    geom_col() +
    geom_text(aes(label = n),position = position_stack(vjust = 1))

  • label = n có nghĩa là bạn đang sử dụng giá trị n (tương ứng với số lượng hoặc một giá trị được tính toán khác) để làm nhãn cho mỗi điểm.

  • position = position_stack(vjust = 1): Điều này xác định vị trí của văn bản trên biểu đồ. Trong trường hợp này, position_stack được sử dụng để xếp chồng văn bản trên nhau theo chiều dọc. Điều chỉnh vjust = 1 đặt văn bản ở phía trên của mỗi “stack” (xếp chồng). Trong một số trường hợp, nó có thể được điều chỉnh để đảo ngược vị trí, đặt văn bản ở phía dưới (vjust = 0), hoặc căn giữa (vjust = 0.5)


2.7 BIỂU ĐỒ TRÒN THỂ HIỆN TỶ LỆ SỐ NHÂN CỦA CÁC BỘ VI XỬ LÍ CÓ TRONG ĐIỆN THOẠI

phone %>% group_by(n_cores) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill = n_cores)) +
    geom_col() +
    coord_polar('y') 


2.8 BIỂU ĐỒ SCATTER THỂ HIỆN ĐỘ DÀY CẢU ĐIỆN THOẠI DI ĐỘNG PHÂN THEO TỐC ĐỘ XỬ LÍ VÀ THỰC HIỆN CỦA BỘ VI XỬ LÍ

phone %>% ggplot(aes(x = clock_speed, y = m_dep)) +
  geom_point()

***

2.9

phone %>% ggplot(aes(x = clock_speed, y = m_dep
)) +
  geom_violin()

* Đây là một layer (lớp) trong ggplot2 để vẽ biểu đồ violin. Biểu đồ violin thường được sử dụng để biểu diễn phân phối của một biến liên tục hoặc hai biến liên tục dưới dạng một biểu đồ violin. Mỗi violin biểu diễn phân phối của dữ liệu


2.10 Biểu đồ sẽ hiển thị các khoảng phân phối (boxplot) cho mỗi nhóm, giúp ta so sánh độ dày giữa những điện thoại có wifi và không có wifi

phone %>%
  ggplot(aes(x = wifi, y = m_dep, fill = factor(wifi))) + 
  geom_boxplot()+
labs(
    x = "CÓ WIFI HAY KHÔNG",
    y = "ĐỘ DÀY CỦA ĐIỆN THOẠI"
)

  • fill = factor(wifi) có nghĩa là chúng ta đang sử dụng biến wifi từ dữ liệu để xác định màu sắc của các phần tử trên biểu đồ.

2.11 Biểu đồ sẽ hiển thị phân phối của các giá trị tốc độ vi xử lý cho các điện thoại có sim kép và không có sim kép

phone %>%
  ggplot(aes(x = factor(dual_sim), y = clock_speed, fill = factor(dual_sim))) +
  geom_violin()

***

2.12 Biểu đồ thể hiện Tốc độ vi xử lý (clock_speed) và độ dày của điện thoại (m_dep)

phone %>%
  ggplot(aes(x = clock_speed, y = m_dep, color = factor(m_dep))) +
  geom_line() +
labs(
    title = "BIỂU ĐỒ ĐƯỜNG THỂ HIỆN TỐC ĐỘ XỬ LÍ THEO ĐỘ DÀY CỦA ĐIỆN THOẠI",
    x = "TỐC ĐỘ XỬ LÍ",
    y = "ĐỘ DÀY CỦA ĐIỆN THOẠI"
)


2.13 BIỂU ĐỒ HEATMAP THỂ HIỆN TỐC ĐỘC VI XỬ LÍ THEO ĐỘ DÀY

 phone %>%
    ggplot(aes(x = clock_speed, y = m_dep)) +
    geom_tile(aes(fill = ram)) +labs(
    x = "TỐC ĐỘ VI XỬ LÍ ",
    y = "ĐỘ DÀY CỦA ĐIỆN THOẠI"
)

Các ô có màu sắc khác nhau trên biểu đồ heatmap có thể chỉ ra mối liên hệ giữa tốc độ vi xử lý, độ dày của điện thoại và dung lượng RAM. Ví dụ, nếu có một khu vực trên biểu đồ có màu sắc tương đối đậm, điều này có thể ngụ ý rằng có một tập hợp các điện thoại có tốc độ vi xử lý cao, độ dày lớn và dung lượng RAM lớn.


2.14 Biểu đồ phân tán (scatter plot) với thanh lỗi (error bars).

phone %>%
  ggplot(aes(x = factor(dual_sim), y = clock_speed)) +
  geom_point() +
  geom_errorbar(aes(ymin = clock_speed - 0.1, ymax = clock_speed + 0.1), width = 0.2)

  • ymin và ymax là độ cao tối thiểu và tối đa của dấu gạch ngang trên đỉnh của cột bar. Dùng clock_speed - 0.1 và clock_speed + 0.1 để xác định khoảng cách từ giá trị trung bình clock_speed xuống và lên một khoảng nhất định.

  • width = 0.2: Đây là độ rộng của dấu gạch ngang. Trong trường hợp này, nó chỉ ra rằng dấu gạch ngang sẽ có chiều rộng là 0.2 đơn vị.

  • Mỗi điểm trên biểu đồ đại diện cho một quan sát trong dữ liệu phone. Vị trí của mỗi điểm trên trục x phụ thuộc vào trạng thái của tính năng sim kép, và vị trí trên trục y tương ứng với tốc độ xử lý.


2.15 BBiểu đồ phân tán (scatter plot)

phone %>%
  ggplot(aes(x = factor(m_dep), y = clock_speed)) +
  geom_point(position = position_jitter(width = 0.2))

geom_point(position = position_jitter(width = 0.2)): Đây là layer thêm vào biểu đồ để vẽ các điểm dữ liệu. Tuy nhiên, với tham số position_jitter, các điểm trên trục x được thêm sự biến động ngẫu nhiên với chiều rộng là 0.2, giúp tránh trùng lắp giữa các điểm dữ liệu và làm cho biểu đồ dễ đọc hơn.

Biểu đồ này sẽ hiển thị mối quan hệ giữa dày độ của điện thoại và tốc độ xử lý, trong đó sâu độ được chuyển đổi thành factor trên trục x và tốc độ xử lý trên trục y. Sự biến động ngẫu nhiên được thêm vào trục x để tránh các điểm dữ liệu trùng lắp.


2.16 Biểu đồ Area Plot với Màu Gradient.

ggplot(phone, aes(x = m_dep, y = touch_screen, fill = ram)) +
  geom_area() +
  scale_fill_gradient(low = "green", high = "yellow") +
  labs(title = "Biểu đồ Area Plot với Màu Gradient", x = "Mobile Depth", y = "Touch Screen", fill = "RAM")

  • Hiện thị mối quan hệ giữa độ dày của điện thoại di động (Mobile Depth), trạng thái có màn hình cảm ứng hay không (Touch Screen), và giá trị của RAM

2.17 Biểu đồ Scatter Plot với Trọng lượng di động (Mobile Weight) theo Tốc độ xử lý (Clock Speed) có Wi-Fi hay không:

ggplot(phone, aes(x = clock_speed, y = mobile_wt, color = wifi)) +
  geom_point() +
  labs(title = "Trọng lượng di động theo Tốc độ xử lý với Wi-Fi", x = "Tốc độ xử lý", y = "Trọng lượng di động", color = "Wi-Fi")


2.18 Biểu đồ Density Plot với Tốc độ xử lý (Clock Speed) theo Trạng thái có màn hình cảm ứng hay không:

ggplot(phone, aes(x = clock_speed, fill = touch_screen)) +
  geom_density(alpha = 0.5) +
  labs(title = "Tốc độ xử lý theo Trạng thái màn hình cảm ứng", x = "Tốc độ xử lý", fill = "Màn hình cảm ứng")
## Warning: The following aesthetics were dropped during statistical transformation: fill.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

***

2.19

2.20 Biểu đồ này biểu thị số lượng điện thoại di động có hoặc không có kết nối Wifi

library(tidyverse)
phone %>% ggplot(aes(x = wifi,)) +
  geom_bar(binwidth = 50, fill = 'pink', color = 'yellow')
## Warning in geom_bar(binwidth = 50, fill = "pink", color = "yellow"): Ignoring
## unknown parameters: `binwidth`

***