{"id":19315740,"url":"https://github.com/alfahami/ml-flask-app","last_synced_at":"2025-02-24T04:27:10.901Z","repository":{"id":40970183,"uuid":"240887502","full_name":"alfahami/ml-flask-app","owner":"alfahami","description":"Analyse et visualisation des résultats de stack overflow developer survey 2019 ainsi qu'une simple flask web application utilisant du machine learning avec Scikit-Learn","archived":false,"fork":false,"pushed_at":"2022-12-08T06:18:38.000Z","size":28295,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-06T03:42:51.893Z","etag":null,"topics":["flask","flask-application","machine-learning","mit-license","python","stackoverflow","survey-analysis"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alfahami.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-16T12:28:20.000Z","updated_at":"2022-03-12T21:21:26.000Z","dependencies_parsed_at":"2023-01-24T18:18:12.549Z","dependency_job_id":null,"html_url":"https://github.com/alfahami/ml-flask-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfahami%2Fml-flask-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfahami%2Fml-flask-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfahami%2Fml-flask-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfahami%2Fml-flask-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alfahami","download_url":"https://codeload.github.com/alfahami/ml-flask-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240417369,"owners_count":19797975,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","flask-application","machine-learning","mit-license","python","stackoverflow","survey-analysis"],"created_at":"2024-11-10T01:08:06.433Z","updated_at":"2025-02-24T04:27:10.882Z","avatar_url":"https://github.com/alfahami.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stack Overflow Survey 2019 - ML Flask Web app\n\n# Sommaire\n\n * [Analyse des résultats du Stack Overflow Survey 2019](#stack-overflow)\n      1. [Présentation des données](#presentation) \n      2. [Résumé d'analyse des résultats](#resume-resultat)\n      3. [Données et code](#code-donnees)\n      4. [Prérequis](#prerequis)\n      5. [Instructions d'exécution](instructions)\n * [Machine Learning Flask app](#ml-flask-app)\n      1. [Objectif de l'application](#objectif)\n      2. [Installtion et exécution](#installation)\n * [Structure du projet](#repository)\n      1. [Présentation](#projet-presentation)\n      2. [Détails](#details)\n\n## Analyse des resultats du Stack Overflow Survey 2019 \u003ca name=\"stack-overflow\"\u003e\u003c/a\u003e\n![alt text](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/screen/troll-2020-02-17_03.57.gif \"Simulation de l'application\")\n  1. ### Présentation des données \u003ca name=\"presentation\"\u003e\u003c/a\u003e\nAvec près de 90 000 réponses provenant de plus de 170 pays et territoires dépendants, le sondage Stack Overflow Annual Developer Survey continue d'être le sondage le plus complet jamais réalisée auprès des développeurs de logiciels. Le sondage couvre des aspects tels que la satisfaction professionnelle et la recherche d'emploi dans les langages de programmation...etc\u003cbr\u003e\nLes données du sondage peuvent être télécharger [2019 Stack Overflow Survey results](https://insights.stackoverflow.com/survey)\u003cbr\u003e\nDans ce projet, les résultats du sondage seront utilisées pour répondre aux questions suivantes pour les aspirants scientifiques des données (data scientists):\n\n  * Quel est le langage de programmation de votre choix?\n  * Quel est le salaire des développeurs?\n  * Quel est le framework de choix numéro un pour les développeurs?\n\n  2. ### Resumé des résultats \u003ca name=\"resume-resultat\"\u003e\u003c/a\u003e\nAprès avoir analysé les données, nous constatons que python est le langage de programmation de choix pour les développeurs qui s'identifient en tant que Data Scientists et Machine Learning Specialist. Les salaires des Data Scientists et Machine Learning Specialist sont les plus élevés aux États-Unis. Étonnamment, jQuery est le framework web de choix.\n![alt text](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/screen/prefered-languages.png \"Python est le langage préféré des DataScientist\")\n![alt text](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/screen/salaries_pour_data_science_usa.png \"Salaire des datascientists aux USA\")\n![alt text](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/screen/framework-ds-ml.png \"Frameworks préféré des Data Scientist - ML Specialist\")\n\n  3. ### Données et code \u003ca name=\"code-donnees\"\u003e\u003c/a\u003e\n\nL'analyse principale est contenue dans le fichier jupyter notebook [sof-dataviz.ipynb](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/model_dev/sof-dataviz.ipynb). Toutes les fonctions et le code, ainsi que la justification des décisions prises, sont contenus dans ce fichier notebook.\n\n  4. ### Prérequis \u003ca name=\"prerequis\"\u003e\u003c/a\u003e\n   * Jupyter Notebook\n   * Numpy\n   * Pandas\n   * Seaborn\n   * Matplotlib\n    \n  5. ### Instruction d'exécution\nTéléchargez les de données requis ainsi que les bibliothèques requis, si nécessaire, modifiez les chemins de répertoire.\nTéléchargez le [fichier notebook](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/model_dev/sof-dataviz.ipynb) et exécutez le avec jupyter notebook\n\n## Machine Learning Flask web app \u003ca name=\"ml-flask-app\"\u003e\u003c/a\u003e\n   1. ### Objectif de l'application \u003ca name=\"objectif\"\u003e\u003c/a\u003e\n\u003cp align=\"justify\"\u003e\nApplication Web conçue pour montrer la structure du projet pour un modèle d'apprentissage automatique déployé à l'aide de flask. Ce projet comprend un modèle d'apprentissage automatique qui a été formé pour détecter si un commentaire en ligne est un \u003ci\u003eCyber Troll\u003c/i\u003e ou \u003ci\u003enon Cyber-Troll\u003c/i\u003e. Cette application agit comme une interface permettant à un utilisateur de soumettre de nouvelles requêtes. Le modèle d'apprentissage automatique a été construit à l'aide de diverses fonctionnalités de scikit learn:\n\n    - Machine à vecteur de support (SVM)\n    - Représentation textuelle Bag-of-Words (BoW)\n    - Grid Search + Cross Validation\n\nChacun de ces composants est développé dans le projet dans un paramètre hors ligne à l'intérieur de `/ model_dev`. Les modèles SVM et BoW seront toujours nécessaires dans un cadre de production ou de test afin de pouvoir prédire les requêtes soumises par l'utilisateur, afin qu'ils puissent être sérialisés via la fonctionnalité de pickle de python et stockés dans le dossier `/model_assets`.\n\nAfin de détecter si un commentaire en ligne provient ou non d'un cyber-troll, vous pouvez déployer cette application localement et soumettre des requêtes au modèle d'apprentissage automatique pour recevoir des prédictions via une interface utilisateur simple. Le modèle a été formé à l'aide du Dataset for Detection of Cyber-Trolls ([voir ici](https://dataturks.com/projects/abhishek.narayanan/Dataset-for-Detection-of-Cyber-Trolls)). \n\nLe fichier notebook du modèle se trouve [ici](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/model_dev/model_dev.ipynb).\n\u003c/p\u003e\n\n   2. ### Installation \u003ca name=\"installation\"\u003e\u003c/a\u003e\nPremièrement, faites clone le repisitory localement\\\n`git clone git@github.com:alfahami/sof-dataviz_ml-flask-app.git`\n\nCréer un nouvel environement virtuel python dans le dossier du projet\\\n`pyhton3 -m venv ./venv`\n\nActivation de l'environement que nous vennons de créer\\\n`source /venv/bin/activate`\n\nInstallation des paquets python prérequis\\\n`pip install -r ./paquets-prerequis.txt`\n\nMaintenant nous pouvons déployer l'application (Vous devez avoir flask déjà installé)\\\n`python app.py`\n\nNaviguez vers `http://127.0.0.1:5000/` pour voir la page d'accueil de l'application\nVous pouvez soit visualizer le notebook du stackoverflow survey, soit utiliser le service de prédiction\n![alt text](https://github.com/alfahami/sof-dataviz_ml-flask-app/blob/master/screen/troll-test.png \"Test du service de prédiction\")\n\nNous voyons bien que \"**Get the fuck out here**\" a été bien prédi comme commentaire troll\n\n## Structure du projet \u003ca name=\"repository\"\u003e\u003c/a\u003e\n   1. ### Présentation \u003ca name=\"projet-presentation\"\u003e\u003c/a\u003e\n            sof-dataviz_ml-flask-app\n            ├── model_assets\n            │   ├── model_V0.pkl\n            │   └── vectorizer_V0.pkl\n            ├── model_dev\n            │   ├── data\n            │   |   └── cyber-troll.json\n            │   |   └── survey_results_public.csv\n            │   |   └── survey_results_schema.csv\n            │   └── model_dev.ipynb\n            │   └── sof-dataviz.ipynb\n            │   └── BaseModel.py\n            ├── templates\n            │   └── index.html\n            │   └── cyber-troll.html\n            │   └── sof-dataviz.html\n            ├── app.py\n            ├── utils.py\n            ├── paquets-prerequis.txt\n            └── README.md\n\n   2. ### Details \u003ca name=\"details\"\u003e\u003c/a\u003e\n\n`/model_assets` est utilisé pour stocker les états persistants du modèle prédictif et les extracteurs de fonctions apprises de scikit-learn.\n\n`/model_dev` est utilisé comme le dossier contenant les modèles où un .ipynb est utilisé pour développer le modèle et enregistrer de nouvelles versions des états persistants.\n\nLe stockage de nouveaux états persistants du modèle peut être effectué depuis jupyter notebook. Par exemple, dans model_dev.ipynb, je peux créer un nouveau modèle / recyclage et l'inclure dans le dossier `./model_assets` lorsque je suis satisfait de l'entrainement.\n\nLa sélection de la version des modèles à utiliser pendant l'exécution est choisie dans la fonction de requête POST à l'intérieur de `app.py.`\n\n`/templates` contient les modèles html pour l'application.\n\n### Auteur\n[AL-FAHAMI TOIHIR](https://alfahami.github.io/ \"View my resume\")\n\n[FACULTE DES SCIENCES - KENITRA](http://fs.uit.ac.ma/ \"Site officiel de FSK\")\n\nDEPARTEMENT DE MATHEMATIQUES ET INFORMATIQUE\n\n### Remerciements\nMerci à Modingwa et W.M Gopar pour la clarté de leur blog post\n\n\n**Licence**: Le projet est disponible en open source selon les termes de la [licence MIT](https://opensource.org/licenses/MIT).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfahami%2Fml-flask-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falfahami%2Fml-flask-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfahami%2Fml-flask-app/lists"}