Analyse exploratoire, machine learning et tableau de bord interactif du Google Play Store.
10 841 applications et 64 295 avis, nettoyés de façon reproductible, explorés, modélisés puis publiés sur GitHub Pages avec des modèles exécutés directement dans le navigateur.
Tableau de bord en ligne · Prédire une note · Analyser un avis · Signaler un bug
- Fonctionnalités
- Résultats
- Aperçu
- Architecture
- Démarrage rapide
- Commandes
- Déploiement
- Feuille de route
- Contribuer
- Équipe
- Licence
| Module | Description |
|---|---|
| Nettoyage reproductible | Parsing typé des tailles (k, M, G), installations, prix, dates et versions Android. Ligne corrompue écartée, doublons supprimés, rapport de qualité généré à chaque build. |
| Tableau de bord statique | Site GitHub Pages sans serveur : KPI, insights calculés, 20+ graphiques interactifs, thème clair et sombre, responsive. |
| Exploration | Filtres croisés (recherche, catégorie, gratuit / payant, note), tableau triable et paginé de 9 659 apps, nuage de points, corrélations de Spearman. |
| Prédiction de note | Gradient boosting de 400 arbres exporté en JSON et évalué en JavaScript, parité avec scikit-learn vérifiée à 1e-9. |
| Analyse de sentiment | TF-IDF (unigrammes et bigrammes) et régression logistique, analyseur d'avis en direct avec termes décisifs. Aucun texte ne quitte le navigateur. |
| Application Streamlit | Version multipage pour l'analyse interactive, avec un outil de profilage de n'importe quel CSV. |
| Qualité | Tests unitaires, tests de parité Python / JavaScript, tests de rendu Streamlit, 99 % de couverture, lint Ruff, CI sur Python 3.10 à 3.13. |
Validation croisée à 5 plis sur 8 196 applications notées, 45 variables.
| Modèle | MAE | RMSE | R² |
|---|---|---|---|
| Gradient Boosting (retenu) | 0.333 | 0.488 | 0.170 |
| Random Forest | 0.336 | 0.489 | 0.166 |
| Ridge | 0.342 | 0.495 | 0.147 |
| Baseline (moyenne) | 0.381 | 0.536 | 0.000 |
| KNN v1 (modèle d'origine) | 0.395 | 0.569 | -0.128 |
Sur le jeu de test, 81 % des prédictions tombent à ±0.5 étoile de la note réelle. Le R² reste modeste : la note dépend surtout de la qualité perçue, absente des métadonnées. Le modèle capte des tendances (engagement, fraîcheur, catégorie), pas un verdict.
| Métrique | Valeur |
|---|---|
| Accuracy | 0.902 |
| F1 macro | 0.872 |
| Avis d'entraînement | 23 753 |
| Vocabulaire | 8 000 termes |
- Les applications à plus de 100 M d'installations sont les mieux notées (4.37 en moyenne).
- Les apps payantes sont mieux notées (4.26 contre 4.17) mais visent des audiences 100 fois plus petites.
- Le ratio avis / installations est la variable la plus prédictive de la note.
- La polarité moyenne des avis est corrélée à la note (Spearman 0.29).
| Prédiction en direct | Analyse de sentiment |
|---|---|
![]() |
![]() |
flowchart LR
raw[(CSV bruts)] --> clean[data.cleaning]
clean --> analytics[analytics]
clean --> features[features]
features --> rating[models.rating]
clean --> sentiment[models.sentiment]
rating --> export[models.export]
sentiment --> export
analytics --> artifacts[(artifacts/*.json)]
export --> artifacts
artifacts --> site[site.builder]
web[web/ HTML CSS JS] --> site
site --> pages{{GitHub Pages}}
clean --> app[Streamlit app]
.
├── app/ Application Streamlit multipage
│ ├── components.py Cache, thème Plotly, helpers UI
│ └── views/ Vue d'ensemble, exploration, sentiment, prédiction, profilage
├── data/raw/ Jeux de données d'origine (Kaggle, août 2018)
├── src/playstore_insights/
│ ├── data/ Chargement et nettoyage typé
│ ├── models/ Notation, sentiment, export JSON portable
│ ├── site/ Génération du site statique et des badges
│ ├── analytics.py Agrégations du tableau de bord
│ ├── features.py Spécification des variables partagée Python / JS
│ ├── pipeline.py Orchestration et persistance des artefacts
│ └── cli.py Point d'entrée `playstore-insights`
├── web/ Sources du site (HTML, CSS, modules ES)
│ └── assets/js/lib/ Runtime d'inférence, graphiques, composants
├── tests/ pytest + parité Node.js
└── .github/workflows/ CI et déploiement Pages
Le principe clé : une seule spécification de variables (features.py) est exportée avec le modèle. Le runtime JavaScript (web/assets/js/lib/features.js, models.js) la rejoue à l'identique, et tests/test_js_parity.py garantit que Python et le navigateur produisent les mêmes prédictions.
Prérequis : Python 3.10+, Node.js 18+ (uniquement pour les tests de parité).
git clone https://github.com/Aziguy/DataScienceEDA.gitcd DataScienceEDApython -m venv .venv && source .venv/bin/activatemake installGénérer le site et le servir sur http://localhost:8000 :
make serveLancer l'application Streamlit sur http://localhost:8501 :
make appOu avec Docker :
make docker| Commande | Effet |
|---|---|
make install |
Installe le package en mode éditable avec les extras dev et app, active pre-commit |
make lint |
Ruff (lint et format) |
make format |
Corrige et formate le code |
make test |
pytest avec couverture |
make train |
Nettoie, compare les modèles, entraîne et écrit artifacts/ |
make site |
Pipeline complet puis génération de build/site/ |
make serve |
Génère et sert le site localement |
make app |
Lance l'application Streamlit |
make docker |
Construit et lance l'image Docker |
La CLI est aussi disponible directement : playstore-insights {train,site,all} [--fast] [--coverage 99].
GitHub Pages. Le workflow pages.yml teste, entraîne, génère le site et le déploie à chaque push sur master. Activation unique : Settings > Pages > Build and deployment > Source : GitHub Actions. Les badges de couverture et de performance sont publiés avec le site (/badges/*.json) et lus par shields.io.
Streamlit Community Cloud. Pointer l'application sur app/streamlit_app.py. Le fichier requirements.txt installe le package avec l'extra app.
Docker. L'image entraîne les modèles au build et expose Streamlit sur le port 8501.
- Prédiction du palier d'installations (classification)
- Explications locales des prédictions (contributions SHAP exportées)
- Analyse de sentiment multilingue
- Mise à jour du jeu de données avec une collecte récente
- Mode hors ligne (PWA) pour le tableau de bord
Les idées et retours sont les bienvenus dans les issues.
Les contributions sont les bienvenues. Consultez le guide de contribution et le code de conduite. En résumé :
- Forkez le dépôt et créez une branche (
feat/ma-fonctionnalite). make install, puis développez avec des tests.- Vérifiez
make lint test. - Ouvrez une pull request en suivant le modèle.
Pour signaler une vulnérabilité, suivez la politique de sécurité.
Team data analytics, data scientists en devenir.
| Esteban Bara | |
| Gervais Kituanga | |
| Thomas Touil | |
| Abdou Aziz Ziza | |
| Hippolyte Kengni | GitHub |
Distribué sous licence MIT. Le jeu de données Google Play Store Apps est publié sur Kaggle par Lavanya Gupta et reste soumis à ses propres conditions.



