## Warning: package 'ggplot2' was built under R version 4.4.1
## spc_tbl_ [705 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Age : num [1:705] 19 22 20 18 21 19 23 20 18 21 ...
## $ Gender : chr [1:705] "Female" "Male" "Female" "Male" ...
## $ Country : chr [1:705] "Bangladesh" "India" "USA" "UK" ...
## $ Avg_Daily_Usage_Hours: num [1:705] 5.2 2.1 6 3 4.5 7.2 1.5 5.8 4 3.3 ...
## $ Most_Used_Platform : chr [1:705] "Instagram" "Twitter" "TikTok" "YouTube" ...
## $ Sleep_Hours_Per_Night: num [1:705] 6.5 7.5 5 7 6 4.5 8 6 6.5 7 ...
## - attr(*, "spec")=
## .. cols(
## .. Age = col_double(),
## .. Gender = col_character(),
## .. Country = col_character(),
## .. Avg_Daily_Usage_Hours = col_double(),
## .. Most_Used_Platform = col_character(),
## .. Sleep_Hours_Per_Night = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
STUDENTS SOCIAL MEDIA ADDICTION
Đây là dữ liệu được tổng hợp từ các cuộc khảo sát thực tế (survey-based dataset). Dữ liệu ghi lại thông tin của các học sinh/sinh viên ở nhiều quốc gia khác nhau (cross-country survey) về thói quen sử dụng mạng xã hội của họ. Theo mô tả của tác giả trên Kaggle, tập dữ liệu được “lấy cảm hứng từ các cuộc khảo sát tâm lý học và giáo dục trong thế giới thực”. Mục tiêu của các cuộc khảo sát này nhằm thấu hiểu:
Xu hướng nghiện kỹ thuật số (Digital addiction trends).
Sức khoẻ tinh thần của sinh viên (Student mental well-being).
Tác động của công nghệ đến kết quả học tập, giấc ngủ và các mối quan hệ (Conflicts over social media, Affects academic performance…).
| Biến | Loại | Mô.tả |
|---|---|---|
| Age | Định lượng | Tuổi của đối tượng khảo sát |
| Gender | Định tính (nhị phân) | Giới tính (Nam/Nữ) |
| Country | Định tính (danh mục) | Quốc gia của đối tượng khảo sát |
| Avg_Daily_Usage_Hours | Định lượng | Số giờ sử dụng MXH trung bình mỗi ngày |
| Most_Used_Platform | Định tính (danh mục) | Nền tảng MXH được sử dụng nhiều nhất |
| Sleep_Hours_Per_Night | Định lượng | Số giờ ngủ trung bình mỗi đêm |
##
## Facebook Instagram KakaoTalk LINE LinkedIn Snapchat TikTok Twitter
## 123 249 12 12 21 13 154 30
## VKontakte WeChat WhatsApp YouTube
## 12 15 54 10
barplot(Bang1.1,
col = my_col,
las = 2,
cex.names = 0.8,
main = "Biểu đồ nền tảng mạng xã hội được sử dụng nhiều nhất",
ylab = "Số lượng đối tượng khảo sát")
title(xlab = "Nền tảng mạng xã hội", line = 6)Nhận xét:
Biểu đồ cho thấy số lượng người tham gia sử dụng các nền tảng mạng xã hội có sự chênh lệch rõ rệt. Trong đó, Instagram, TikTok và Facebook có số lượng người dùng cao nhất với các cột cao vượt trội so với các nền tảng còn lại.
Ngược lại, một số ứng dụng khác có số lượng người sử dụng thấp hơn đáng kể, thể hiện qua chiều cao cột thấp hơn trên biểu đồ. Điều này phản ánh mức độ phổ biến của các mạng xã hội trong mẫu khảo sát là không đồng đều.
##
## Female Male
## 353 352
Biểu đồ tròn
#Biểu đồ tròn
pie(table(DuLieu$Gender),
main="Cơ cấu giới tính của đối tượng khảo sát",
col = my_col[c(1,4)])Phân tổ dữ liệu theo thời gian sử dụng mạng xã hội 1 ngày
Sau khi thực hiện thống kê mô tả đối với các biến định tính, nghiên
cứu tiếp tục phân tích biến định lượng
Avg_Daily_Usage_Hours nhằm đánh giá mức độ sử dụng mạng xã
hội của đối tượng khảo sát. Để thuận tiện cho việc quan sát và phân tích
sự phân bố dữ liệu, biến này được tiến hành phân tổ theo các khoảng thời
gian sử dụng trong một ngày.
Xác định khoảng biến thiên của thời gian sử dụng
## [1] 1.5 8.5
Phân các nhóm thời gian của đối tượng khảo sát
Biến Avg_Daily_Usage_Hours (thời gian sử dụng mạng xã
hội trung bình mỗi ngày) được phân nhóm bằng hàm cut(). Các
khoảng được chia từ 1.5 giờ đến 8.5 giờ với độ rộng mỗi khoảng là 1 giờ,
tạo thành các nhóm như: [1.5,2.5),[2.5,3.5),…,[7.5,8.5)
cut_TGSD <- cut(DuLieu$Avg_Daily_Usage_Hours, breaks = seq(1.5,8.5,1), right = F, include.lowest = F)Kết hợp vào data.frame & Đặt lại tên cho các cột
table_TGSD <- table(cut_TGSD)
cst_TGSD <- cumsum(table_TGSD)
proptable_TGSD <- round(prop.table(table_TGSD),3)*100
csp_TGSD <- cumsum(proptable_TGSD)
Bang2.1 <- data.frame(
Khoang_T = names(table_TGSD),
Tan_So = as.numeric(table_TGSD),
Tan_Suat = as.numeric(proptable_TGSD),
Tan_So_TL = as.numeric(cst_TGSD),
Tan_Suat_TL = as.numeric(csp_TGSD))
names(Bang2.1) <- c('Khoảng thời gian',
'Tần số', 'Tần suất (%)',
'Tần số tích lũy',
'Tần suất tích lũy (%)')Hiển thị
| Khoảng thời gian | Tần số | Tần suất (%) | Tần số tích lũy | Tần suất tích lũy (%) |
|---|---|---|---|---|
| [1.5,2.5) | 13 | 1.8 | 13 | 1.8 |
| [2.5,3.5) | 69 | 9.8 | 82 | 11.6 |
| [3.5,4.5) | 177 | 25.1 | 259 | 36.7 |
| [4.5,5.5) | 208 | 29.5 | 467 | 66.2 |
| [5.5,6.5) | 142 | 20.2 | 609 | 86.4 |
| [6.5,7.5) | 84 | 11.9 | 693 | 98.3 |
| [7.5,8.5) | 11 | 1.6 | 704 | 99.9 |
## Khoảng thời gian Tần số Tần suất (%) Tần số tích lũy Tần suất tích lũy (%)
## 1 [1.5,2.5) 13 1.8 13 1.8
## 2 [2.5,3.5) 69 9.8 82 11.6
## 3 [3.5,4.5) 177 25.1 259 36.7
## 4 [4.5,5.5) 208 29.5 467 66.2
## 5 [5.5,6.5) 142 20.2 609 86.4
## 6 [6.5,7.5) 84 11.9 693 98.3
## 7 [7.5,8.5) 11 1.6 704 99.9
Nhận xét:
## [1] 18 24
hist(DuLieu$Age,
breaks = seq(18,24,1),
main = "Phân bố độ tuổi của đối tượng khảo sát",
xlab = "Tuổi",
ylab = "Tần số",
col = "lightblue",
border = 'white')##
## Facebook Instagram KakaoTalk LINE LinkedIn Snapchat TikTok Twitter
## Female 24 172 12 12 8 8 86 16
## Male 99 77 0 0 13 5 68 14
##
## VKontakte WeChat WhatsApp YouTube
## Female 0 4 11 0
## Male 12 11 43 10
Bang_GT_NenTang <- table(DuLieu$Gender,
DuLieu$Most_Used_Platform)
barplot(Bang_GT_NenTang,
beside = TRUE,
col = my_col[c(1,4)],
las = 2,
cex.names = 0.8,
main = "Biểu đồ giới tính và nền tảng mạng xã hội",
ylab = "Số lượng đối tượng khảo sát")
legend("topright",
legend = rownames(Bang_GT_NenTang),
fill = my_col[c(1,4)])
title(xlab = 'Nền tảng mạng xã hội', line = 6)Nhận xét:
Biểu đồ cho thấy số lượng người sử dụng các nền tảng mạng xã hội có sự chênh lệch khá rõ giữa nam và nữ. Các cột của Instagram và TikTok ở nhóm nữ cao hơn đáng kể, trong khi cột Facebook ở nhóm nam nổi bật hơn.
Sự khác biệt về chiều cao giữa các cột phản ánh xu hướng sử dụng mạng xã hội không đồng đều giữa hai giới tính.
Ngoài ra, một số cột có chiều cao vượt trội so với các cột còn lại, cho thấy đây là những nền tảng được sử dụng phổ biến hơn trong mẫu khảo sát.
plot(table_TGSD,
type = "o",
pch = 19,
lwd = 2,
col = my_col[1],
main = "Đa giác tần số",
xlab = "Khoảng thời gian",
ylab = "Tần số")Nhận xét:
Đa giác tần số có dạng tăng dần đến vùng trung tâm rồi giảm dần về hai phía. Đỉnh của đa giác nằm trong khoảng 4–6 giờ, cho thấy đây là khoảng thời gian sử dụng mạng xã hội phổ biến nhất trong mẫu khảo sát.
Các khoảng thời gian quá thấp hoặc quá cao có tần số nhỏ hơn đáng kể, thể hiện qua các điểm nằm thấp ở hai đầu đồ thị.
par(mfrow = c(1,2))
boxplot(DuLieu$Avg_Daily_Usage_Hours,
main ="Phân bố thời gian sử dụng mạng xã hội",
xlab = "Số giờ sử dụng",
col = my_col[1],
horizontal = T)
boxplot(DuLieu$Sleep_Hours_Per_Night,
main = "Phân bố thời gian ngủ của đối tượng khảo sát",
col = my_col[3],
xlab = 'Thời gian ngủ',
horizontal = T)Nhận xét:
Thời gian sử dụng mạng xã hội có độ phân tán lớn, với trung vị khoảng 5 giờ/ngày. Đa số người tham gia sử dụng từ 4–6 giờ mỗi ngày và xuất hiện nhiều giá trị ngoại lai phía trên, cho thấy một số cá nhân sử dụng mạng xã hội với thời lượng rất cao.
Trong khi đó, thời gian ngủ tập trung chủ yếu trong khoảng 6–8 giờ mỗi đêm, với trung vị khoảng 7 giờ. Khoảng biến thiên không quá lớn, cho thấy thời gian ngủ giữa các đối tượng khảo sát tương đối ổn định và ít chênh lệch đáng kể.
Nhìn chung, thời gian sử dụng mạng xã hội biến động mạnh hơn thời gian ngủ.
plot(DuLieu$Avg_Daily_Usage_Hours,
DuLieu$Sleep_Hours_Per_Night,
main = "Mối quan hệ giữa thời gian sử dụng mạng xã hội và thời gian ngủ",
xlab = "Thời gian sử dụng",
ylab = "Thời gian ngủ",
col = my_col[c(1,4)],
pch = 19)Nhận xét:
Biểu đồ tán xạ cho thấy xu hướng nghịch giữa thời gian sử dụng mạng xã hội và thời gian ngủ.
# Cài đặt gói ggplot2 nếu bạn chưa cài đặt
# install.packages("ggplot2")
# Khai báo sử dụng thư viện
library(ggplot2)
# 1. Đọc dữ liệu từ file CSV
df <- read.csv("DuLieu.csv")
# Xem nhanh cấu trúc dữ liệu
str(df)## 'data.frame': 705 obs. of 6 variables:
## $ Age : int 19 22 20 18 21 19 23 20 18 21 ...
## $ Gender : chr "Female" "Male" "Female" "Male" ...
## $ Country : chr "Bangladesh" "India" "USA" "UK" ...
## $ Avg_Daily_Usage_Hours: num 5.2 2.1 6 3 4.5 7.2 1.5 5.8 4 3.3 ...
## $ Most_Used_Platform : chr "Instagram" "Twitter" "TikTok" "YouTube" ...
## $ Sleep_Hours_Per_Night: num 6.5 7.5 5 7 6 4.5 8 6 6.5 7 ...
Mục đích: Thống kê xem nền tảng nào được ưa chuộng nhất, và tỷ lệ Nam/Nữ trên từng nền tảng đó ra sao.
mau_gioi_tinh <- c("Male" = '#FFB703', "Female" = '#023E8A') # Nam màu Cam, Nữ màu Xanh nước biển
ggplot(df, aes(x = Most_Used_Platform, fill = Gender)) +
geom_bar(position = "dodge") + # position = "dodge" để tách cột Nam/Nữ đứng cạnh nhau
labs(
title = "Số lượng người dùng từng nền tảng",
x = "Nền tảng",
y = "Số lượng người dùng",
fill = "Giới tính"
) +
theme_classic() +
theme(axis.text.x = element_text(angle = 40, hjust = 1)) +
#scale_fill_brewer(palette = "Set2") # Sử dụng bộ màu đẹp có sẵn của R
scale_fill_manual(values=mau_gioi_tinh) # tô đúng màu mà mình chọnSở thích sử dụng nền tảng phân theo Giới tính
mau_gioi_tinh <- c("Male" = '#FFB703', "Female" = '#023E8A') # Nữ màu Cam, Nam màu Xanh biển
ggplot(df, aes(x = Most_Used_Platform, fill = Gender)) +
geom_bar(position = "stack") +
theme_minimal() +
labs(title = "Lựa chọn Nền tảng mạng xã hội theo Giới tính",
x = "Nền tảng mạng xã hội",
y = "Số lượng người dùng",
fill = "Giới tính") +
scale_fill_manual(values = mau_gioi_tinh) + # Thêm dòng này vào để đổi màu theo ý mình muốn
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Xoay chữ ở trục x 45 độ cho dễ nhìn
- Biểu đồ cột chồng (Platform vs Gender): Cung cấp thông tin chi tiết về
cơ cấu giới tính trong mỗi nền tảng. Ví dụ: Bạn sẽ thấy Instagram có tỷ
lệ Nữ cao hơn hay Nam cao hơn. Hàm theme(axis.text.x =
element_text(angle = 45)) được dùng để làm đẹp chữ dưới trục x.
ggplot(df, aes(x = Gender, y = Avg_Daily_Usage_Hours, fill = Gender)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Phân bố Thời gian sử dụng MXH theo Giới tính",
x = "Giới tính",
y = "Thời gian dùng MXH trung bình (giờ/ngày)") +
scale_fill_manual(values = mau_gioi_tinh) +# Thêm dòng này vào để đổi màu theo ý mình muốn
theme(legend.position = "none")ggplot(df, aes(x = reorder(Most_Used_Platform, Sleep_Hours_Per_Night, FUN = median),
y = Sleep_Hours_Per_Night, fill = Most_Used_Platform)) +
geom_boxplot(alpha = 0.8) +
labs(
title = "Phân bố Thời gian ngủ theo Nền tảng sử dụng nhiều nhất",
x = "Nền tảng mạng xã hội",
y = "Giờ ngủ (giờ/đêm)"
) +
theme_light() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), # Xoay chữ ở trục X cho dễ đọc
legend.position = "none") # Ẩn chú thích vì trục X đã có tên nền tảngBiểu đồ hộp (Boxplot) kết hợp lật trục Thời gian ngủ theo từng Nền tảng sử dụng nhiều nhất
ggplot(df, aes(x = Most_Used_Platform, y = Sleep_Hours_Per_Night, fill = Most_Used_Platform)) +
geom_boxplot(alpha = 0.8) +
coord_flip() + # Lật trục để tên nền tảng (dài) dễ đọc hơn
theme_minimal() +
labs(title = "Thời gian ngủ mỗi đêm theo Nền tảng ưa thích",
x = "Nền tảng mạng xã hội",
y = "Thời gian ngủ (giờ/đêm)") +
theme(legend.position = "none")Dùng as.factor(Age) để ggplot2 hiểu đây là các nhóm tuổi riêng biệt
plot_age_usage_box <- ggplot(df, aes(x = as.factor(Age), y = Avg_Daily_Usage_Hours, fill = as.factor(Age))) +
geom_boxplot(alpha = 0.7) +
theme_minimal() +
labs(title = "Phân bố Thời gian dùng MXH theo từng Độ tuổi (Học sinh/Sinh viên)",
x = "Độ tuổi",
y = "Thời gian dùng MXH (giờ/ngày)") +
theme(legend.position = "none") # Ẩn chú thích màu vì trục x đã rõ ràng
print(plot_age_usage_box)Phân bố độ tuổi
ggplot(df, aes(x = Age)) +
geom_histogram(binwidth = 1, fill = "steelblue", color = "white") +
theme_minimal() +
labs(title = "Phân bố Độ tuổi của người dùng",
x = "Độ tuổi",
y = "Số lượng người dùng")ggplot(df, aes(x = Age, fill = Gender)) +
geom_histogram(binwidth = 1, color = "white", alpha = 0.8, position = "identity") +
facet_wrap(~ Gender, ncol = 1) + # Tách thành 2 biểu đồ trên/dưới cho Nam và Nữ
labs(
title = "Phân bố Độ tuổi của người tham gia",
x = "Tuổi",
y = "Số lượng"
) +
theme_bw() +
scale_fill_manual(values = mau_gioi_tinh)ggplot(df, aes(x = Avg_Daily_Usage_Hours, y = Sleep_Hours_Per_Night, color = Gender)) +
geom_point(size = 3, alpha = 0.7) +
theme_minimal() +
# THÊM DÒNG NÀY ĐỂ CAN THIỆP MÀU:
scale_color_manual(values = mau_gioi_tinh) +
labs(title = "Mối quan hệ giữa Thời gian dùng MXH và Thời gian ngủ",
x = "Thời gian dùng MXH trung bình (giờ/ngày)",
y = "Thời gian ngủ (giờ/đêm)",
color = "Giới tính")Biểu đồ phân tán (Scatter plot): Xem xét liệu có sự tương quan nào (ví dụ: dùng mạng xã hội càng nhiều thì ngủ càng ít) giữa số giờ online trung bình và thời lượng giấc ngủ không, đồng thời phân biệt bằng màu sắc giữa Nam và Nữ.
Tương quan giữa Độ tuổi và Thời gian sử dụng MXH
ggplot(df, aes(x = Age, y = Avg_Daily_Usage_Hours)) +
geom_point(color = "darkorange", size = 2, alpha = 0.7) +
geom_smooth(method = "lm", color = "blue", se = TRUE) + # Thêm đường xu hướng tuyến tính (Linear model)
theme_minimal() +
labs(title = "Mối liên hệ giữa Độ tuổi và Thời gian sử dụng MXH",
x = "Độ tuổi",
y = "Thời gian dùng MXH (giờ/ngày)")
- Biểu đồ phân tán + Đường xu hướng (Age vs Usage): Thêm hàm
geom_smooth(method = “lm”) để vẽ một đường xu hướng tuyến tính. Biểu đồ
này trả lời câu hỏi: “Liệu người càng lớn tuổi thì thời gian sử dụng
mạng xã hội có càng giảm đi hay không?”. Vùng mờ xung quanh đường kẻ
xanh là khoảng tin cậy (Confidence Interval).
So sánh phân bố Thời gian sử dụng MXH giữa Nam và Nữ
plot_density <- ggplot(df, aes(x = Avg_Daily_Usage_Hours, fill = Gender)) +
geom_density(alpha = 0.5) + # alpha để làm trong suốt, dễ nhìn khi bị chồng lấp
theme_minimal() +
scale_fill_manual(values = mau_gioi_tinh) +
labs(title = "Biểu đồ Mật độ: Thời gian sử dụng MXH theo Giới tính",
x = "Thời gian dùng MXH trung bình (giờ/ngày)",
y = "Mật độ (Density)",
fill = "Giới tính")
print(plot_density)Mối liên hệ Giờ dùng MXH và Giờ ngủ, chia theo từng Nền tảng
plot_facet <- ggplot(df, aes(x = Avg_Daily_Usage_Hours, y = Sleep_Hours_Per_Night, color = Gender)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE, color = "black") + # Đường xu hướng cho từng nhóm
facet_wrap(~ Most_Used_Platform) + # Chia nhỏ biểu đồ theo từng nền tảng
scale_color_manual(values = mau_gioi_tinh) + # THÊM DÒNG NÀY VÀO ĐỂ CAN THIỆP MÀU CỦA CÁC CHẤM
theme_minimal() +
labs(title = "Tương quan Giờ dùng MXH và Giờ ngủ (Phân theo Nền tảng)",
x = "Giờ dùng MXH",
y = "Giờ ngủ",
color = "Giới tính")
print(plot_facet)Phân bố thời gian ngủ theo Giới tính (hiển thị hình dáng phân bố thực tế)
plot_violin <- ggplot(df, aes(x = Gender, y = Sleep_Hours_Per_Night, fill = Gender, color = Gender)) + # Thêm color = Gender ở đây
geom_violin(trim = FALSE, alpha = 0.6) +
geom_jitter(width = 0.15, size = 1, alpha = 0.7) + # Tăng alpha của jitter lên một chút cho chấm rõ hơn
# THÊM 2 DÒNG NÀY ĐỂ ĐỔI MÀU:
scale_fill_manual(values = mau_gioi_tinh) + # Đổi màu phần thân vĩ cầm
scale_color_manual(values = mau_gioi_tinh) + # Đổi màu các chấm jitter
theme_minimal() +
labs(title = "Biểu đồ Vĩ cầm: Phân bố Thời gian ngủ theo Giới tính",
x = "Giới tính",
y = "Thời gian ngủ (giờ/đêm)") +
theme(legend.position = "none") # Đã ẩn chú thích vì trục x đã hiện giới tính
print(plot_violin)
- Biểu đồ vĩ cầm (Violin Plot) kết hợp Jitter: Boxplot (ở phần trước)
chỉ cho thấy các mức tứ phân vị (25%, 50%, 75%). Trong khi đó, Violin
plot sẽ phình to ra ở những nơi tập trung nhiều người dùng nhất (hiển
thị được cả hình dáng của phân phối dữ liệu). Việc thêm geom_jitter() sẽ
chấm thêm các điểm dữ liệu thực tế rải rác bên trong giúp ta thấy rõ mật
độ thực của từng cá nhân.
plot_age_sleep_mean <- ggplot(df, aes(x = as.factor(Age), y = Sleep_Hours_Per_Night)) +
# Dùng stat_summary để tự động tính trung bình (mean) và vẽ cột
stat_summary(fun = mean, geom = "bar", fill = "lightseagreen", width = 0.6) +
# Thêm số liệu trung bình lên đầu cột cho dễ đọc
stat_summary(fun = mean, geom = "text", aes(label = round(after_stat(y), 1)), vjust = -0.5, size = 4) +
theme_minimal() +
labs(title = "Thời gian ngủ trung bình mỗi đêm theo Độ tuổi",
x = "Độ tuổi",
y = "Thời gian ngủ trung bình (giờ/đêm)") +
# Mở rộng trục y một chút để số không bị cắt
scale_y_continuous(expand = expansion(mult = c(0, 0.15)))
print(plot_age_sleep_mean)# XỬ LÝ DỮ LIỆU: Lọc ra Top 5 nền tảng có nhiều người dùng nhất để khớp với bộ 5 màu
df_top5 <- df %>%
filter(Most_Used_Platform %in% c("Instagram", "TikTok", "Twitter", "Facebook", "YouTube"))Đẹp và tinh tế hơn Biểu đồ cột (Bar chart) khi so sánh giá trị
# Tính trung bình giờ dùng của Top 5
df_mean <- df_top5 %>%
group_by(Most_Used_Platform) %>%
summarise(Mean_Usage = mean(Avg_Daily_Usage_Hours, na.rm = TRUE)) %>%
arrange(Mean_Usage) # Sắp xếp từ thấp đến cao# Ép kiểu factor để ggplot2 giữ nguyên thứ tự sắp xếp
df_mean$Most_Used_Platform <- factor(df_mean$Most_Used_Platform, levels = df_mean$Most_Used_Platform)
plot_lollipop <- ggplot(df_mean, aes(x = Most_Used_Platform, y = Mean_Usage, color = Most_Used_Platform)) +
geom_segment(aes(x = Most_Used_Platform, xend = Most_Used_Platform, y = 0, yend = Mean_Usage), size = 1.5) + # Vẽ que
geom_point(size = 6) + # Vẽ kẹo (chấm tròn)
geom_text(aes(label = round(Mean_Usage, 1)), color = "white", size = 2.5) + # Chèn số vào giữa chấm tròn
scale_color_manual(values = my_col) +
coord_flip() + # Lật ngang
theme_minimal() +
labs(title = "Trung bình giờ sử dụng của Top 5 Nền tảng",
x = "",
y = "Số giờ sử dụng (giờ/ngày)") +
theme(legend.position = "none")
print(plot_lollipop)Trục X: Giờ dùng MXH | Trục Y: Giờ ngủ | Màu sắc: Nền tảng | Kích thước: Độ tuổi
plot_bubble <- ggplot(df_top5, aes(x = Avg_Daily_Usage_Hours, y = Sleep_Hours_Per_Night,
color = Most_Used_Platform, size = Age)) +
geom_point(alpha = 0.6) +
scale_color_manual(values = my_col) +
scale_size_continuous(range = c(2, 8)) + # Chỉnh độ to/nhỏ của bong bóng
theme_minimal() +
labs(title = "Phân tích Đa chiều: Thời gian dùng, Giấc ngủ, Tuổi và Nền tảng",
x = "Giờ dùng MXH",
y = "Giờ ngủ",
color = "Nền tảng",
size = "Độ tuổi") +
theme(legend.position = "right")
print(plot_bubble)plot_pro_theme <- ggplot(df_top5, aes(x = Most_Used_Platform, y = Avg_Daily_Usage_Hours, fill = Most_Used_Platform)) +
geom_violin(alpha = 0.8, color = NA) + # color = NA để bỏ viền đen
scale_fill_manual(values = my_col) +
theme_classic() + # Dùng theme_classic thay vì theme_minimal để có trục tọa độ sắc nét
labs(
title = "Phân bố Thời gian sử dụng MXH (Top 5 Nền tảng)",
subtitle = "Sự chênh lệch về mức độ tương tác giữa các mạng xã hội",
caption = "Nguồn dữ liệu: DuLieu.csv | Trực quan hoá bằng ggplot2", # Thêm chú thích nguồn
x = "Nền tảng",
y = "Số giờ (h/ngày)"
) +
theme(
plot.title = element_text(face = "bold", size = 16, color = "#023E8A"), # Đổi màu, in đậm tiêu đề chính
plot.subtitle = element_text(size = 11, color = "#555555", margin = margin(b = 15)), # Chỉnh tiêu đề phụ và tạo khoảng cách
plot.caption = element_text(face = "italic", color = "gray", hjust = 1), # Chú thích in nghiêng, căn phải
axis.text.x = element_text(face = "bold", size = 11, color = "#333333"),
axis.line = element_line(color = "#CCCCCC"), # Làm mờ đường trục tung/hoành
legend.position = "none"
)
print(plot_pro_theme)Mô phỏng một số phân phối rồi quan sát phân phối qua biểu đồ histogram
curve(dchisq(x, 1), xlim=c(0,10), ylim=c(0,0.6), col="red", lwd=3)
curve(dchisq(x, 2), add=T, col="green", lwd=3)
curve(dchisq(x, 3), add=T, col="blue", lwd=3)
curve(dchisq(x, 5), add=T, col="orange", lwd=3)
abline(h=0, lty=3)
legend(par("usr")[2], par("usr")[4],
xjust=1,
c("df=1", "df=2", "df=3", "df=5"), lwd=3, lty=1,
col=c("red", "green", "blue", "orange"))curve(dt(x, 1), xlim=c(-3,3), ylim=c(0,0.4), col="red", lwd=3)
curve(dt(x, 2), add=T, col="blue", lwd=3)
curve(dt(x, 5), add=T, col="green", lwd=3)
curve(dt(x, 10), add=T, col="orange", lwd=3)
curve(dnorm(x), add=T, lwd=4, lty=3)
title(main="Student T distributions")
legend(par("usr")[2], par("usr")[4],xjust=0.9,
c("df=1", "df=2", "df=5", "df=10", "Std.norm."),
lwd=c(2,2,2,2,2),
lty=c(1,1,1,1,3),
col=c("red", "blue", "green", "orange", par("fg")))curve(df(x,1,1), xlim=c(0,2), ylim=c(0,0.8), lwd=3)
curve(df(x,3,1), add=T)
curve(df(x,6,1), add=T, lwd=3)
curve(df(x,3,3), add=T, col="red")
curve(df(x,6,3), add=T, col="red", lwd=3)
curve(df(x,3,6), add=T, col="blue")
curve(df(x,6,6), add=T, col="blue", lwd=3)
title(main="Fisher F distributions")
legend(par("usr")[2], par("usr")[4],
xjust=1,
c("df=1,1", "df=3,1", "df=6,1", "df=3,3", "df=6,3",
"df=3,6", "df=6,6"),
lwd=c(1,1,3,1,3,1,3),
lty=c(2,1,1,1,1,1,1),
col=c(par("fg"), par("fg"), par("fg"), "red", "blue", "blue"))