# 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()