# Câu 1
set.seed(123) # Đặt seed để kết quả tái lập
samples <- runif(500, min = 0, max = 5) # Sinh ngẫu nhiên 500 giá trị từ phân phối đều U(0,5)
# Tính kỳ vọng và phương sai của mẫu
mean_sample <- mean(samples)
var_sample <- var(samples)
# Vẽ biểu đồ histogram
hist(samples, breaks = 20, col = "lightblue", main = "Histogram of Uniform Distribution", xlab = "Values")

# In kết quả
print(paste("Kỳ vọng mẫu: ", mean_sample))
## [1] "Kỳ vọng mẫu: 2.47641844196944"
print(paste("Phương sai mẫu: ", var_sample))
## [1] "Phương sai mẫu: 2.02239572134314"
library(reticulate)
# Chỉ định đường dẫn Python
use_python("C:/Users/ADMIN/anaconda3/python.exe", required = TRUE)
# Kiểm tra lại Python có hoạt động không
py_config()
## python: C:/Users/ADMIN/anaconda3/python.exe
## libpython: C:/Users/ADMIN/anaconda3/python312.dll
## pythonhome: C:/Users/ADMIN/anaconda3
## version: 3.12.9 | packaged by Anaconda, Inc. | (main, Feb 6 2025, 18:49:16) [MSC v.1929 64 bit (AMD64)]
## Architecture: 64bit
## numpy: C:/Users/ADMIN/anaconda3/Lib/site-packages/numpy
## numpy_version: 1.26.4
##
## NOTE: Python version was forced by use_python() function
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Đọc tập dữ liệu Iris bằng thư viện Pandas
df = pd.read_csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv")
# Tính trung bình và phương sai của Sepal.Length theo từng loại hoa
summary_stats = df.groupby("species")["sepal_length"].agg(['mean', 'var'])
print(summary_stats)
## mean var
## species
## setosa 5.006 0.124249
## versicolor 5.936 0.266433
## virginica 6.588 0.404343
# Vẽ biểu đồ Boxplot cho từng loại hoa
plt.figure(figsize=(8, 6))
sns.boxplot(x="species", y="sepal_length", data=df)
plt.title("Boxplot of Sepal Length by Species")
plt.xlabel("Species")
plt.ylabel("Sepal Length")
plt.show()
