feat: add exploratory data analysis and visualizations for the iris dataset

This commit is contained in:
2025-03-12 08:49:22 +01:00
parent 6d46cd4892
commit 4a2c4357ba
3 changed files with 214 additions and 1 deletions

194
Big Data/TP1/Exercice1.R Normal file
View File

@@ -0,0 +1,194 @@
data(iris)
# 1. Quelle est la nature de iris ? (matrix, vector, data.frame....)
cat("Iris est une matrice ?", is.matrix(iris), "\n")
cat("Iris est un vecteur ?", is.vector(iris), "\n")
cat("Iris est une data frame ?", is.data.frame(iris), "\n")
# 2. Les données. Combien d'individus ? de variables ? Pour chacune des variables donner
# leur nature (quantitative, qualitative, ...).
# Nombre d'individus et de variables
cat("Nombre d'individus:", nrow(iris), "\n")
cat("Nombre de variables:", ncol(iris), "\n\n")
# Nature de chaque variable
cat("Nature de chaque variable:\n")
for (i in 1:ncol(iris)) {
var_name <- names(iris)[i]
var_type <- if (is.factor(iris[, i])) {
"qualitative nominale"
} else if (is.numeric(iris[, i])) {
"quantitative continue"
} else {
"autre"
}
cat("- ", var_name, ": ", var_type, "\n", sep="")
}
# 3. Calculer pour chaque variable lorsque cela a un sens, la moyenne et la variance
# empirique. Même question en divisant la population selon le niveau de la variable
# Species.
# Calculer la moyenne et la variance pour chaque variable numérique
cat("Statistiques pour toutes les données:\n")
for (i in 1:4) { # Les 4 premières variables sont numériques
var_name <- names(iris)[i]
var_mean <- mean(iris[, i])
var_var <- var(iris[, i])
cat("- ", var_name, ":\n", sep="")
cat(" Moyenne: ", round(var_mean, 2), "\n", sep="")
cat(" Variance: ", round(var_var, 2), "\n", sep="")
}
# Calculer la moyenne et la variance par niveau de Species
cat("\nStatistiques par espèce:\n")
species_levels <- levels(iris$Species)
for (species in species_levels) {
cat("\nEspèce: ", species, "\n", sep="")
# Filtrer les données pour l'espèce actuelle
species_data <- iris[iris$Species == species, ]
for (i in 1:4) { # Les 4 premières variables sont numériques
var_name <- names(iris)[i]
var_mean <- mean(species_data[, i])
var_var <- var(species_data[, i])
cat("- ", var_name, ":\n", sep="")
cat(" Moyenne: ", round(var_mean, 2), "\n", sep="")
cat(" Variance: ", round(var_var, 2), "\n", sep="")
}
}
# 4. On s'intéresse au 4 premières variables. Standardiser les données (retirer la moyenne
# et diviser par l'écart-type).
# Création d'un nouveau dataframe pour les données standardisées
iris_standardized <- iris
# Standardisation des 4 premières variables
for (i in 1:4) {
var_name <- names(iris)[i]
iris_standardized[, i] <- scale(iris[, i])
}
# Afficher un résumé des données standardisées
cat("Résumé des données standardisées:\n")
summary(iris_standardized[, 1:4])
# Vérifier que la moyenne est proche de 0 et l'écart-type est proche de 1
cat("\nVérification des moyennes (doivent être proches de 0):\n")
for (i in 1:4) {
var_name <- names(iris_standardized)[i]
var_mean <- mean(iris_standardized[, i])
cat("- ", var_name, ": ", round(var_mean, 4), "\n", sep="")
}
cat("\nVérification des écarts-types (doivent être proches de 1):\n")
for (i in 1:4) {
var_name <- names(iris_standardized)[i]
var_sd <- sd(iris_standardized[, i])
cat("- ", var_name, ": ", round(var_sd, 4), "\n", sep="")
}
# 5. Tracer le graphique variable Petal.Length versus Petal.Width en utilisant des couleurs
# différentes selon le niveau de la variable Species. Essayer tous les "croisements"
# possibles et commentez ces graphiques.
# Définir une palette de couleurs distincte
iris_colors <- c("red", "blue", "green")
# 1. Graphique Petal.Length vs Petal.Width
plot(iris$Petal.Length, iris$Petal.Width,
main="Petal.Length vs Petal.Width",
xlab="Petal.Length",
ylab="Petal.Width",
pch=19,
col=iris_colors[as.numeric(iris$Species)])
# Ajouter une légende
legend("topleft",
legend=levels(iris$Species),
col=iris_colors,
pch=19)
# 2. Matrice de nuages de points pour toutes les combinaisons
pairs(iris[, 1:4],
main="Matrices de nuages de points",
pch=19,
col=iris_colors[as.numeric(iris$Species)])
# Ajouter une légende
legend("bottomright",
legend=levels(iris$Species),
col=iris_colors,
pch=19,
cex=0.8)
# 3. Graphiques individuels pour chaque combinaison
par(mfrow=c(2, 3))
# Toutes les combinaisons de variables
plot(iris$Sepal.Length, iris$Sepal.Width, main="Sepal.Length vs Sepal.Width",
xlab="Sepal.Length", ylab="Sepal.Width", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topright", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
plot(iris$Sepal.Length, iris$Petal.Length, main="Sepal.Length vs Petal.Length",
xlab="Sepal.Length", ylab="Petal.Length", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topleft", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
plot(iris$Sepal.Length, iris$Petal.Width, main="Sepal.Length vs Petal.Width",
xlab="Sepal.Length", ylab="Petal.Width", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topleft", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
plot(iris$Sepal.Width, iris$Petal.Length, main="Sepal.Width vs Petal.Length",
xlab="Sepal.Width", ylab="Petal.Length", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topright", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
plot(iris$Sepal.Width, iris$Petal.Width, main="Sepal.Width vs Petal.Width",
xlab="Sepal.Width", ylab="Petal.Width", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topright", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
plot(iris$Petal.Length, iris$Petal.Width, main="Petal.Length vs Petal.Width",
xlab="Petal.Length", ylab="Petal.Width", pch=19,
col=iris_colors[as.numeric(iris$Species)])
legend("topleft", legend=levels(iris$Species), col=iris_colors, pch=19, cex=0.6)
# Réinitialiser la mise en page
par(mfrow=c(1, 1))
# Commentaires sur les graphiques
cat("\nCommentaires sur les graphiques:\n")
cat("\nPetal.Length vs Petal.Width:\n")
cat("- Forte corrélation positive entre ces variables\n")
cat("- Setosa est clairement isolée avec des pétales plus petits\n")
cat("- Bonne séparation entre les trois espèces\n")
cat("\nSepal.Length vs Sepal.Width:\n")
cat("- Corrélation moins évidente\n")
cat("- Setosa a des sépales plus courts mais plus larges\n")
cat("- Chevauchement important entre Versicolor et Virginica\n")
cat("\nSepal.Length vs Petal.Length/Width:\n")
cat("- Bonne séparation des espèces\n")
cat("- Setosa bien isolée\n")
cat("- Corrélation positive au sein de chaque espèce\n")
cat("\nSepal.Width vs Petal.Length/Width:\n")
cat("- Tendance à une corrélation négative\n")
cat("- Setosa a des sépales larges mais des pétales courts\n")
cat("\nConclusion:\n")
cat("- Les variables liées aux pétales sont plus discriminantes\n")
cat("- Setosa est la plus facilement identifiable\n")
cat("- La combinaison Petal.Length/Petal.Width offre la meilleure séparation\n")

19
Big Data/TP1/TP1.R Normal file
View File

@@ -0,0 +1,19 @@
# https://github.com/BreizhHardware/TD-R/tree/main/Big%20Data/TP1
v1 <- c(175, 182, 165, 187, 158)
v2 <- c(19, 18, 21, 22, 20)
tableau <- data.frame(taille=v1,age=v2)
names(tableau)
print(tableau$taille)
summary(tableau)
write.table(tableau, "sortie.csv", sep=";")
options(repos = c(CRAN = "https://cran.irsn.fr/"))
# install.packages("maps")
library(maps)
map("france")
datas <- rnorm(20)
barplot(datas)
hist(datas, nclass=4)
plot(seq(0,2*pi,by=0.01), sin(seq(0,2*pi,by=0.01)))

View File

@@ -2,7 +2,7 @@
# Spécifier un miroir CRAN
options(repos = c(CRAN = "https://cran.rstudio.com/"))
options(repos = c(CRAN = "https://cran.irsn.fr/"))
# Installer le package readxl
install.packages("readxl")