graph LR; A("👨🔬 pred_classification")-->F; B("👨🔬 pred_regression")-->F; C("👩🏫 result_ml_regression")-->F; D("👩🏫 result_ml_classification")-->F; E("🕵️♂️ importance")-->F[("🦆 In Memory Database")]; style A stroke:#adbac7,stroke-width:3px; style B stroke:#adbac7,stroke-width:3px; style C stroke:#adbac7,stroke-width:3px; style D stroke:#adbac7,stroke-width:3px; style E stroke:#adbac7,stroke-width:3px; style F stroke:#fff100,stroke-width:3px;
Problématique
Le terroir est en guerre ! Menant une lutte acharnée pour l’information viticole, une bataille épique se déroule entre les données dissimulées et les amateurs assoiffés de connaissances sur le vin. Le chaos règne alors que les sources d’informations viticoles sont assaillies par des obstacles inattendus.
Avec une audace stupéfiante, les sites de revente de vin ont érigé des barrières insurmontables, empêchant l’accès aux détails les plus précieux sur les cépages, les millésimes et les appellations. La quête de ces informations devient une mission désespérée, une véritable lutte pour la liberté de l’information œnologique.
Face à cette situation, deux valeureux Chevaliers de la programmation Python s’élèvent pour secourir les amateurs de vin, menant une mission périlleuse pour libérer les données captives. Avec bravoure, ils s’attaquent aux défenses numériques pour délivrer les précieuses informations contenues dans les pages web tentaculaires …
Aperçu de l’application
Si jamais le message suivant apparaît :
Suivez plutôt ce lien : https://wine-scraping.streamlit.app
Description du projet
L’objectif est de récupérer des données sur un site web, les stocker, les transformer puis les exploiter pour faire des modèles de Machine Learning ainsi qu’une application.
Le projet, dans les grandes lignes :
- Scraping des données avec
requests
etbeautifulsoup4
- Restructuration des données avec
polars
- Création de pipelines de Machine Learning avec
scikit-learn
🤖 - Alimentation d’une base de données contenant les prédictions des modèles avec
duckdb
- Création d’une application pour visualiser les résultats avec
streamlit
etplotly
📊
Machine Learning
Que prédire ? Avec quoi le prédire ? Comment utiliser les résultats ? Les réponses sont ci-dessous :
- Deux variables à prédire : unit_price & type
- Nous utiliserons 6 modèles de Machine Learning
- ➶ Optimisation des hyperparamètres par Cross-Validation avec
models.py
- 🏹 Prédiction sur les données de test avec
prediction.py
- 🧪 Utilisation d’un pipeline
sklearn
- Evite le Data Leakage.
- Procédure standardisée pour l’ensemble des modèles.
Variable | Type | Description |
---|---|---|
name |
str | Nom du vin |
capacity |
float | Capacité en litres du vin |
millesime |
int | Année de vendange des raisins |
cepage |
str | Type de raisin utilisé pour confectionner le vin |
par_gouts |
str | Classification par goûts du vin |
service |
str | Comment se sert le vin |
avg_temp |
float | Température moyenne de conservation du vin |
conservation_date |
int | Date de conservation maximale du vin après achat |
bio |
bool | Indique si le vin est issu de l’agriculture biologique |
customer_fav |
bool | Indique si le vin est un coup de coeur client |
is_new |
bool | Indique si le vin est une nouveauté sur le site |
top_100 |
bool | Indique si le vin fait partie d’un classement dans le top 100 |
destock |
bool | Indique si le vin est en déstockage |
sulphite_free |
bool | Indique si le vin est sans sulfites |
alcohol_volume |
float | Degré de concentration d’alcool |
country |
str | Pays d’origine du vin |
bubbles |
bool | Indique si le vin a des bulles |
wine_note |
float | Indique la note sur 5 du vin |
nb_reviews |
int | Nombre de commentaires |
conservation_time |
float | Durée de conservation du vin en années |
cru |
bool | Indique si le vin est un grand cru |
Résultats du Machine Learning
5 tables de résultats de Machine Learning sont obtenues grâce à l’éxéuction de ml_trigger
qui se charge d’éxécuter l’ensemble des scripts d’export. Mais plutôt que d’utiliser chaque csv indépendamment ou de tenter de concaténer les résultats, nous avons préféré utiliser une base de données pour l’implémentation dans notre application.
duckdb
est une base de données particulière en ce sens qu’elle n’est pas Client-Server, mais in-memory. Cela permet d’obtenir des temps de réponse minimaux en éliminant le besoin d’accéder à des unités de disque standard (SSD). Une base de données in-memory est donc idéale pour une application effectuant de l’analyse de données en temps réel.
Voici un schéma du processus d’ingestion des tables :
En savoir plus
Github : Wine-Scraping