Skip to content
Snippets Groups Projects
Commit 4ca5e7a2 authored by Hudelot's avatar Hudelot
Browse files

Ajout projet Twitter

parent 0b91373a
No related branches found
No related tags found
No related merge requests found
File added
Images/graphlepenmacron.jpg

62.6 KiB

Images/mvp.png

203 KiB

# TwitterPredictor - Sprint 0 : Analyse du problème
Une des premières étapes de tout travail de programmation et de développement logiciel, quelque soit la méthodologie de développement utilisée, consiste à réaliser une rapide **analyse des besoins**, avant toute phase d'implémentation.
Cette analyse a pour objectif d'identifier les principales fonctionnalités à developper pour avoir le comportement souhaité du système développé. Cette première liste de fonctionnalité n'a pas besoin d'être exhaustive ni figée mais elle vous permettra de construire vos premiers developpements.
## Analyse des besoins : les principales fonctionnalités
L'objectif ici est de pouvoir prédire, à partir d'un ensemble de tweets relatifs à une élection, de pouvoir prédire le résultat de cette dernière à partir de l'analyse de leur opinion.
Le **[MVP (Minimum Viable product)](https://medium.com/creative-wallonia-engine/un-mvp-nest-pas-une-version-simplifi%C3%A9e-de-votre-produit-89017ac748b0)** de ce projet consistera à livrer une première version de l'outil d'analyse de bout en bout, c'est-à-dire de la collecte à la prédiction et sa visualisation avec des solutions simples.
En particulier, le MVP :
+ **Permettra de se connecter à l'API Twitter pour collecter un ensemble de tweets relatifs à une élection**.
+ **Se basera uniquement sur l'analyse du contenu textuel des tweets et négligera l'information sur l'auteur du tweet, son type (retweet, ...) et son contenu multimédia**.
+ **Permettra un traitement et une analyse simples des tweets.**
+ **Affichera les résultats de l'analyse sous la forme d'un graphe temporel comme ci-dessus.**
D'autres fonctionnalités pourront bien sûr être ajoutées ensuite pour améliorer votre proje après avoir fini ce MVP mais en construisant une chaîne de bout en bout, vous pourrez rapidement avoir des retours sur votre produit et ses fonctionnalités.
Vous pouvez maintenant continuez par le [Sprint 0 : Reflexion autour de la conception](./Conception.md).
\ No newline at end of file
# TwitterPredictor - Sprint 0 : Reflexion autour de la conception
Après cette phase d'analyse, nous pouvons avoir une première démarche de conception et essayer d'identifier les principaux objets de notre MVP.
De quoi parle t'on ?
## Vers un langage commun
Dans cette phase de reflexion sur la conception, pour favoriser le travail collaboratif et une compréhension commune entre tous les membres du projets, il est important de définir, dès le début du projet, un **vocabulaire commun** autour des termes métier. Dans le jargon du developpement de logiciel, on parle de [**ubiquitous language**](http://referentiel.institut-agile.fr/ubiquitous.html) ou **langage omniprésent**. C'est un principe issu de l'approche *Domain Driven Design* décrite dans l'[ouvrage](https://github.com/p0w34007/ebooks/blob/master/Eric%20Evans%202003%20-%20Domain-Driven%20Design%20-%20Tackling%20Complexity%20in%20the%20Heart%20of%20Software.pdf) du même nom et qui consiste à identifier et à définir un langage commun autour des termes métiers.
Dans le cas du projet *twitterpredictor*, c'est un travail qui peut vous sembler fastidieux et très certainement inutile mais qui vous sera très utile pour de nombreux autres projets.
Par exemple, dans le cas de ce projet, il peut être nécessaire de définir certains termes comme par exemple le terme **elections**.
Dans notre cas, une élection est un ensemble composé d'un ensemble de **candidats** et d'un intervalle de temps **duree_election**
Pour la suite du projet, on choisit le nom de **candidate** pour désigner le plateau de jeu et que nous définirons comme le conteneur de l'ensemble des tuiles du jeu.
Une **tuile** est un élement de jeu qui peut prendre une valeur comprise entre 2 et 2048 et telle que sa valeur est une puissance de 2 et qui peut être déplacée selon 4 directions dans la grille de jeu.
Un **déplacement** est une indication de la direction donnée par le joueur pour déplacer l'ensemble des tuiles de la grille de jeu.
Nous allons maintenant créer ces trois objets du point de vue informatique.
Vous pouvez maintenant passer à la [**Fonctionnalité 1** : Représenter une grille de jeu](./2048_S1_Grille.md)
\ No newline at end of file
# 2048 - Sprint 0 : Installation du socle technique
Le premier travail consiste à préparer le socle technique nécessaire au bon developpement du projet. Le projet **2048** sera :
+ Un projet Pycharm
+ Utilisant [git](https://git-scm.com/) comme gestionnaire de version
+ Qui sera déposé sur le [GitLab pédagogique de CentraleSupélec](https://gitlab-student.centralesupelec.fr/).
## Créer un projet Pycharm : **`2048`**
Si ce n'est pas déjà fait, [créer un projet Pycharm](./pycharm.md) que vous appelerez **`game2048`** puis ajouter un package de nom **game2048** au projet. Un fichier `__init__.py` vide est automatiquement ajouté au package.
## Versionner avec git
### Mise en place de Git sur le projet **`2048`**
Comme vous devrez apprendre à le faire de manière systématique pour tout travail de développement informatique, vous devez passer le projet **`game2048`** sous Git.
+ Depuis Pycharm, vous pouvez le faire depuis le menu **(`VCS | Enable Version Control Integration`)**.
+ Faire un premier `commit`contenant le fichier `__init__.py`
+ Créer un dépôt **`2048`** sur GitLab qui vous servira de **depôt distant**.
+ Connecter votre dépôt distant à votre dépôt local. Pour cela, vous pouvez :
+ soit le faire en ligne de commande
`git remote add nom_local_du_dépôt_distant url `
+ soit utiliser et configurer correctement la commande `Push` disponible dans le menu **(`VCS | Git | Push`)**
+ Se rendre sur le dépôt distant (**sur GitLab**) pour :
+ Vérifier que l'opération `Push` a été effectuée correctement
+ Créer depuis GitLab un fichier `README.md`. Vous pouvez vous inspirer de ce [template](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2) pour avoir une idée de ce que votre README devrait contenir. Pour commencer, vous vous contenterez de donner un titre à votre projet et d'y ajouter une petite description.
+ Commiter l'ajout de ce `README.md`.
+ Il faut maintenant mettre à jour votre dépôt local. Pour cela il faudra revenir dans Pycharm et configurer l'option `Fetch` dans le menu **(`VCS | Git | Fetch`)**.
+ Procéder à un `Fetch`.
+ Procéder à un `Merge` pour que les données rapatriées puissent fusionner avec les données locales. Votre fichier `README.md` devrait apparaître dans votre IDE.
Votre projet **`2048`** est prêt pour la suite.
### Ajout de collaborateurs
Vous allez maintenant ajouter votre binôme et votre enseignant comme collaborateir de votre dépôt. Pour cela, allez sur votre depôt GitLab et choisissez le menu `Settings | Members` dans la fenêtre de gauche. Ajouter votre binôme et votre enseignant comme collaborateur. Votre binôme sera *Developer* et votre enseignant sera *Reporter*.
## Déposer sur GitLab
Il vous sera demandé plusieurs fois le long du projet et des séances de pousser votre code sur le dépôt distant. Pour ceux d'entre vous qui débutent, on se contentera de suivre un workflow classique sans branches, avec des `commit` sur la branche principale `master`chaque fois que cela vous est demandé et systématiquement en fin de séance. Pour ceux d'entre vous qui sont déjà très familiarisés avec git, vous pourrez adopter la démarche plus classique consistant à développer une branche par fonctionnalité et à fusionner ensuite dans la branche `master`.
Vous pouvez maintenant continuez par le [Sprint 0 : Analyse du problème] (Sprint0Analyse.md).
\ No newline at end of file
# Peut-on prédire le résultat des élections avec Twitter ?
L'**objectif** de ce mini-projet est de developper, de manière très incrémentale, un système d'analyse de tweets comme prédicteur de résultats d'élections.
![Prédictions Citoyennes](./Images/graphlepenmacron.jpg)
Au travers de ce projet, vous decouvriez plusieurs principes du mouvement dit du [*Software Craftmanship*](https://www.octo.com/fr/publications/20-culture-code).
## Organisation du mini-projet
Ce mini-projet est découpé en plusieurs objectifs, eux-même découpés en **sprints** et **fonctionnalités**. La notion de sprint fait référence à la [méthode agile](https://fr.wikipedia.org/wiki/M%C3%A9thode_agile). Un sprint correspond à un intervalle de temps pendant lequel l’équipe projet va compléter un certain nombre de tâches.
Ce travail de découpage a été fait pour vous mais c'est une des premières étapes à faire pour tout projet de developpement logiciel, au moins de manière macroscopique. Pensez-y la semaine prochaine !
### **Objectif 1 (MVP): Notre premier analyseur de Tweets** (JOUR 1 et JOUR 2)
L'objectif des deux premières journées est de constuire et d'implémenter une version simple de l'outil d'analyse de tweets que l'on pourrait qualifier de **[MVP (Minimum Viable product)](https://medium.com/creative-wallonia-engine/un-mvp-nest-pas-une-version-simplifi%C3%A9e-de-votre-produit-89017ac748b0)**.
Ce concept de MVP a été introduit par Eric Ries, l'auteur de [The Lean Startup](http://theleanstartup.com/), une approche spécifique du démarrage d'une activité économique et du lancement d'un produit. La figure ci-dessous permet de bien expliquer ce concept.
![MVP](./Images/mvp.png)
+ **Sprint 0** :
+ [Installation du socle technique.](./Sprint0Install.md)
+ [Analyse des besoins.](./Sprint0Analyse.md)
+ [Refexion autour de la conception.](./Sprint0Conception.md)
+ **Sprint 1 : Collecte des données avec [Tweepy](http://www.tweepy.org/)**
+ [**Fonctionnalité 1** : Prise en main de tweepy : se connecter à l'API Twitter.](./S1_twitterconnect.md)
+ [**Fonctionnalité 2** : Collecter des tweets.](./S1_twittercollect.md)
+ [**Fonctionnalité 3** : Collecter des tweets relatifs à une election.](./S1_twittercollectquery.md)
+ [**Fonctionnalité 4** : Stocker les tweets.](./S1_twitterstorage.md)
+ **Sprint 2** : **Représentation et analyse des tweets**
+ [**Fonctionnalité 5** : Pré-traiter l'ensemble des tweets pour ne garder que l'information utile.](./S2_Pretraitement.md)
+ [**Fonctionnalité 6** : Représentation des tweets.](./S2_TweetRepresentation.md)
+ [**Fonctionnalité 7** : Associer un tweet à un candidat.](./S2_TweetAnalysis.md)
+ **Sprint 3** : **Ajout de l'analyse de l'opinion avec [Textblob](https://textblob.readthedocs.io/en/dev/)**
+ [**Fonctionnalité 8** : Prise en main de Textblob](./S3_textblob.md)
+ [**Fonctionnalité 9** : Prise en compte de l'opinion](./S3_opinion.md)
+ **Sprint 4** : **Visualisation simple de l'analyse avec [seaborn](https://seaborn.pydata.org/)**
+ [**Fonctionnalité 10** : Afficher le résultat de l'analyse.](./S4_displayresult.md)
### Objectif 2 : Visualisation plus avancée des résultats de l'analyse (Amélioration du MVP) (JOUR 3)
+ **Sprint 5** : **Une application de visualisation de l'analyse avec [Dash](https://plot.ly/)**
+ [**Fonctionnalité 11** : Votre première application avec Dash](./S5_affichagegrille.md)
+ [**Fonctionnalité 12** : L'application Tweet Predictor](./S5_tweetpredictor.md)
+ **Sprint 6** : **Representing the word usages with [WordCloud](https://github.com/amueller/word_cloud)!**
+ [**Fonctionnalité 13** : Prise en main de WordCloud](./S6_wordcloud.md)
+ [**Fonctionnalité 14** : WordCloud sur votre ensemble de twwetss](./2048_S6_configgrille.md)
### Objectif 3 : Ajout de l'analyse des sentiments (JOUR 4)
( A venir)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment