Description
Cette application en Python permet de réaliser des analyses exploratoires de données, de former et d’évaluer des modèles de machine learning, ainsi que de prédire de nouvelles données. L’application utilise la bibliothèque Streamlit pour l’interface utilisateur, facilitant ainsi l’interaction avec les différentes fonctionnalités de l’application dépôt GitHub.
Fonctionnalités
Téléchargement de Fichiers
Les utilisateurs peuvent télécharger un fichier CSV qui est ensuite chargé dans l’application. Les colonnes du fichier sont automatiquement détectées comme catégorielles ou numériques. Analyse Exploratoire des Données (EDA) :
Statistiques de Base
Affichage des statistiques descriptives pour les données numériques et catégorielles. Visualisations : Création de graphiques pour les distributions des variables numériques (histogrammes et boxplots), matrices de corrélation, et visualisation des relations entre variables. Gestion des Valeurs Manquantes : Affichage des valeurs manquantes et possibilité d’interpolation pour combler les lacunes. Visualisation des Catégories : Affichage des distributions des variables catégorielles à l’aide de diagrammes en barres. Modélisation :
Sélection de la Tâche
Choix entre classification et régression. Prétraitement des Données : Encodage des variables catégorielles et séparation des données en ensembles d’entraînement et de test. Entraînement des Modèles : Entraînement de différents modèles de machine learning (régression logistique, régression linéaire, forêt aléatoire pour la classification et la régression). Évaluation des Modèles : Calcul et affichage des métriques de performance, telles que la précision, le rappel, la précision (pour la classification) et l’erreur quadratique moyenne, le R² (pour la régression).
Prédiction
Sélection du Modèle
Les utilisateurs peuvent choisir un modèle entraîné pour faire des prédictions. Entrée des Nouvelles Données : Les utilisateurs peuvent entrer de nouvelles données sous forme de dictionnaire pour obtenir des prédictions à partir du modèle sélectionné. Encodage des Nouvelles Données : Les nouvelles données sont encodées de la même manière que les données d’entraînement avant la prédiction.
Technologies Utilisées :
-
Back-end: Python
-
Traitement d’Images: OpenCV
-
Entrainement: Analyse Exploratoire (EDA) ,Modélisation, Prédiction
Streamlit pour l’interface utilisateur interactive. Pandas pour la manipulation des données. Matplotlib et Seaborn pour la visualisation des données. Scikit-learn pour l’apprentissage automatique et l’évaluation des modèles. Ce projet est conçu pour fournir une interface conviviale pour le traitement de données, l’exploration et la modélisation, tout en permettant des ajustements interactifs et une visualisation facile des résultats.
elif page == "EDA":
st.title("Analyse Exploratoire des Données (EDA)")
if uploaded_file is not None:
st.header("Statistiques de base")
st.write(data.describe())
st.header("Visualisations")
st.subheader("Distribution des Variables Numériques")
st.pyplot(sns.pairplot(data[numeric_columns]))
st.subheader("Corrélation des Variables Numériques")
corr_matrix = data.corr()
st.write(corr_matrix)
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
st.pyplot()
else:
st.warning("Veuillez télécharger un fichier CSV.")
# Modélisation
elif page == "Modélisation":
st.title("Modélisation")
if uploaded_file is not None:
target = st.selectbox("Choisissez la variable cible", numeric_columns + categorical_columns)
if target:
X = data.drop(columns=[target])
y = data[target]
if y.dtype == 'object':
model_type = st.selectbox("Choisissez le modèle", ["Régression Logistique", "Forêt Aléatoire"])
if model_type == "Régression Logistique":
model = LogisticRegression()
else:
model = RandomForestClassifier()
else:
model_type = st.selectbox("Choisissez le modèle", ["Régression Linéaire", "Forêt Aléatoire"])
if model_type == "Régression Linéaire":
model = LinearRegression()
else:
model = RandomForestRegressor()
if st.button("Entraîner le modèle"):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
if y.dtype == 'object':
st.write("Accuracy:", accuracy_score(y_test, y_pred))
st.write("Recall:", recall_score(y_test, y_pred, average='macro'))
st.write("Precision:", precision_score(y_test, y_pred, average='macro'))
st.write("F1 Score:", f1_score(y_test, y_pred, average='macro'))
else:
st.write("MAE:", mean_absolute_error(y_test, y_pred))
st.write("MSE:", mean_squared_error(y_test, y_pred))
st.write("R²:", r2_score(y_test, y_pred))
else:
st.warning("Veuillez télécharger un fichier CSV.")
# Prédiction
elif page == "Prédiction":
st.title("Prédiction")
if uploaded_file is not None and 'model' in locals():
st.write("Téléchargez un fichier de nouvelles données pour la prédiction")
prediction_file = st.file_uploader("Téléchargez un fichier CSV", type="csv")
if prediction_file is not None:
new_data = pd.read_csv(prediction_file)
predictions = model.predict(new_data)
st.write("Prédictions:")
st.write(predictions)
else:
st.warning("Veuillez d'abord entraîner un modèle.")