# Sinh ngẫu nhiên 500 giá trị từ phân phối đều trên [0,5]
set.seed(123)  # Đặt seed để kết quả có thể lặp lại
data <- runif(500, min = 0, max = 5)

# Tính kỳ vọng (trung bình mẫu) và phương sai mẫu
mean_value <- mean(data)
variance_value <- var(data)

# In kết quả ra màn hình
cat("Kỳ vọng mẫu (Mean):", mean_value, "\n")
## Kỳ vọng mẫu (Mean): 2.476418
cat("Phương sai mẫu (Variance):", variance_value, "\n")
## Phương sai mẫu (Variance): 2.022396
# Vẽ biểu đồ histogram
hist(data, breaks = 20, col = "skyblue", main = "Histogram của phân phối Uniform(0,5)",
     xlab = "Giá trị", ylab = "Tần suất", border = "black")

#install.packages("reticulate")  # Chỉ cần chạy một lần nếu chưa cài đặt
library(reticulate)  # Gọi thư viện reticulate
use_python("C:/Users/vuong/anaconda3/python.exe", required = TRUE)
py_config()
## python:         C:/Users/vuong/anaconda3/python.exe
## libpython:      C:/Users/vuong/anaconda3/python312.dll
## pythonhome:     C:/Users/vuong/anaconda3
## version:        3.12.7 | packaged by Anaconda, Inc. | (main, Oct  4 2024, 13:17:27) [MSC v.1929 64 bit (AMD64)]
## Architecture:   64bit
## numpy:          C:/Users/vuong/anaconda3/Lib/site-packages/numpy
## numpy_version:  1.26.4
## 
## NOTE: Python version was forced by use_python() function
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Đọc tập dữ liệu từ URL
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv"
df = pd.read_csv(url)

# Kiểm tra dữ liệu
print(df.head())
##    sepal_length  sepal_width  petal_length  petal_width species
## 0           5.1          3.5           1.4          0.2  setosa
## 1           4.9          3.0           1.4          0.2  setosa
## 2           4.7          3.2           1.3          0.2  setosa
## 3           4.6          3.1           1.5          0.2  setosa
## 4           5.0          3.6           1.4          0.2  setosa
# 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("Trung bình và phương sai của Sepal.Length theo từng loại hoa:")
## Trung bình và phương sai của Sepal.Length theo từng loại hoa:
print(summary_stats)
##              mean       var
## species                    
## setosa      5.006  0.124249
## versicolor  5.936  0.266433
## virginica   6.588  0.404343
# Định nghĩa màu sắc cho từng loại hoa
species_colors = {"setosa": "#FF9999", "versicolor": "#66B2FF", "virginica": "#99FF99"}

# Vẽ biểu đồ Boxplot với màu tùy chỉnh
plt.figure(figsize=(8, 6))
sns.boxplot(x="species", y="sepal_length", data=df, palette=species_colors)
plt.title("Boxplot của Sepal.Length theo từng loại hoa")
plt.xlabel("Loài hoa")
plt.ylabel("Chiều dài đài hoa (Sepal.Length)")
plt.grid(axis="y", linestyle="--", alpha=0.7)
plt.show()