# Mission 1: 26/09/23 ## Exo 1: Recherche Gitlab 1. Retrouver une chaîne de caractères dans un dépôt de fichiers versionnés. Les deux fichiers contenant la chaîne de caractères **"LE MOOC RECHERCHE REPRODUCTIBLE C'EST GENIAL"** sont: - module1/exo1/aebef6b0a5.txt - module1/exo1/f683bbad4b.txt 2. Retrouver des modifications effectuées dans un dépôt avec l'historique - Numéro du commit: **505c4e26afaeaae6f563fe8b593155ec9d6210ca** - Auteur du commit: **Arnaud Legrand** ## Exo 2: Ecrire un fichier Markdown On devait reproduire ce [fichier PDF](https://lms.fun-mooc.fr/asset-v1:inria+41016+self-paced+type@asset+block/module1_exo2_fichier-markdown.pdf). - Pour écrire en **itallique**, on met le texte entre deux * - Pour écrire en **gras**, on met le texte entre deux ** - Pour **barrer le texte**, on le met entre deux tildes - Pour mettre un **lien hypertexte**: [Nom du lien] Puis l'adress du lien entre (). - Pour les **listes à puces**, on met des tirets, puis espace/tiret pour les sous-items - Pour les **numérotations**, idem que les tirets: 1. 2. ... - Pour les extraits de **code**: entre deux ` - Pour les **images**, c'est pareil que les liens mais avec un ! devant. ## Exo 3: Journal de bord J'ai commencé de journal de bord que je completerai à chaque mission. Pour cela je me suis servie de ce que j'ai appris sur le Mooc pour la mise en page. ## En résumé Dans Gitlab on peut: - Rechercher un fichier avec la barre "Search or jump to" - Retrouver des modifications effectuées dans un dépôt comprenant un grand nombre de commits par divers contributeurs du projet - Retrouver les noms des auteurs de ces commits En Markdown, on peut: 1. Faire des listes comme celle-ci 2. Ecrire en gras, itallique, barré, ... 3. Ecrire du code 4. Mettre des images 5. Insérer des liens hypertexte # Mission 2: 03/10/23 ## Exo 1: Savoir utiliser un notebook On devait refaire un pdf à partir d'un Jupyter vierge. J'ai déjà utilisé Jupyter notebook donc c'était la partie simple. - Pour les titres, c'est avec les # en mettant le format de la cellule en "markdown". - Pour les textes, on met aussi le format de la cellule en "markdown". - Pour les paramètres spéciaux de textes (gras, itallique, hyperline, ...) c'est en langage markdown. - Pour les maths dans le texte, on écrit en langage Latex. - Pour le code, on écrit simplement du code. Ensuite on compare avec le modèle, on commit et on valide tout. ## Exo 2: Savoir faire un calcul simple soi-même Calculer les valeurs statistiques avec Jupyter: on utilise juste les fonctions python. ``` import numpy as np # Tableau de base: a= 14.0, 7.6, 11.2, 12.8, 12.5, 9.9, 14.9, 9.4, 16.9, 10.2, 14.9, 18.1, 7.3, 9.8, 10.9,12.2, 9.9, 2.9, 2.8, 15.4, 15.7, 9.7, 13.1, 13.2, 12.3, 11.7, 16.0, 12.4, 17.9, 12.2, 16.2, 18.7, 8.9, 11.9, 12.1, 14.6, 12.1, 4.7, 3.9, 16.9, 16.8, 11.3, 14.4, 15.7, 14.0, 13.6, 18.0, 13.6, 19.9, 13.7, 17.0, 20.5, 9.9, 12.5, 13.2, 16.1, 13.5, 6.3, 6.4, 17.6, 19.1, 12.8, 15.5, 16.3, 15.2, 14.6, 19.1, 14.4, 21.4, 15.1, 19.6, 21.7, 11.3, 15.0, 14.3, 16.8, 14.0, 6.8, 8.2, 19.9, 20.4, 14.6, 16.4, 18.7, 16.8, 15.8, 20.4, 15.8, 22.4, 16.2, 20.3, 23.4, 12.1, 15.5, 15.4, 18.4, 15.7, 10.2, 8.9, 21.0 np.mean(a) 14.113000000000001 np.min(a) 2.8 np.max(a) 23.4 np.median(a) 14.5 np.std(a, ddof=1) 4.334094455301447 ``` ## Exo 3: Réaliser un affichage graphique On devait reproduire les graphiques du modèle. Python normal. ``` import matplotlib.pyplot as plt a=14.0, 7.6, 11.2, 12.8, 12.5, 9.9, 14.9, 9.4, 16.9, 10.2, 14.9, 18.1, 7.3, 9.8, 10.9,12.2, 9.9, 2.9, 2.8, 15.4, 15.7, 9.7, 13.1, 13.2, 12.3, 11.7, 16.0, 12.4, 17.9, 12.2, 16.2, 18.7, 8.9, 11.9, 12.1, 14.6, 12.1, 4.7, 3.9, 16.9, 16.8, 11.3, 14.4, 15.7, 14.0, 13.6, 18.0, 13.6, 19.9, 13.7, 17.0, 20.5, 9.9, 12.5, 13.2, 16.1, 13.5, 6.3, 6.4, 17.6, 19.1, 12.8, 15.5, 16.3, 15.2, 14.6, 19.1, 14.4, 21.4, 15.1, 19.6, 21.7, 11.3, 15.0, 14.3, 16.8, 14.0, 6.8, 8.2, 19.9, 20.4, 14.6, 16.4, 18.7, 16.8, 15.8, 20.4, 15.8, 22.4, 16.2, 20.3, 23.4, 12.1, 15.5, 15.4, 18.4, 15.7, 10.2, 8.9, 21.0 plt.plot(a, color='b') plt.grid(color='gray', linestyle='--') plt.hist(a, color='b', edgecolor = 'k') plt.grid(color='gray', linestyle='--') ``` # Mission 3: 10/10/23 ## Exo 1: Analyse de l'incidence du syndrôme grippal avec une copie locale des données - Apprendre à télécharger des données depuis un fichier local - Tester que le fichier local n'existe pas encore avant de le télécharger - Faire un fichier Jupyter structuré avec certaines cellules de commentaires pour s'y retrouver - Commit & Push dans Gitlab, pour avoir une trace dans Gitlab - Comparer avec la solution, corriger et valider l'exercice ## Exo 2: Analyse de l'incidence de la varicelle On fait le même code Jupyter qu'avec la grippe, mais avec d'autres données. J'ai téléchargé les données de l'incidence de la varicelle sur le site du Réseau Sentinelles, puis j'ai déroulé les volets. Il faut néanmoins corriger certaines choses puisque les odnnées ne sont pas identique à la grippe (obv), donc c'était galère. Ensuite on fait les plots de l'incidence, on classe les quantités dans l'ordre et on regarde le minimum et le maximum. Conclusion: L'année où la varicelle a fait le plus de contaminations est l'année 2009, et l'année la plus tranquille est l'année 2020. # Mission 4: 17/10/23 ## Exo1: Écrire un document computationnel Il fallait choisir un des sujets dans la liste faire une analyse des données associées sous forme d'un document computationnel. J'ai choisi le Sujet 5 : Analyse des dialogues dans l'Avare de Molière. Pour ce sujet, il fallait: - Classer les personnages selon la quantité de parole grâce à une analyse syntaxique du texte (scènes / répliques / mots). En particulier, quel est celui qui parle le plus ? Quel est celui qui ne parle pas du tout ? - Réaliser un graphique qui montrera le nombre de mots que chaque acteur prononce dans chaque scène en s'inspirant de l'étude de l'Avare de Molière réalisée par l'OBVIL. J'ai d'abord importé le texte et séparé toutes les scènes et toutes les lignes. Pour savoir combien de fois un personnage prenait la parole, il fallait chercher combien de fois son nom apparaissait seul sur une ligne (annonce du nom du personnage avant qu'il parle), sinon ça marche pas car ils peuvent dire le nom de quelqu'un sans que cette personne ne parle. J'ai noté ce nombre (le nombre de fois où le personnage intervient dans la scène) pour chaque scène et pour chaque personnage dans des tableaux. Comme il y a 32 scènes et 13 personnages (14 mais yen a un qui parle pas), cela donne quelque chose comme ça: | | HARPAGON | VALÈRE | ÉLISE | ... 13 | | :---------: |:---------:| :-----:| :-----:|:-----:| | Scène 1 | 2 | 0 | 8 | 44 | | Scène 2 | 32 | 6 | 0 | 2 | | Scène 3 | 0 | 6 | 5 | 1 | | ... 32 | ... | ... | ... | ... | Les 0 signifient que les personnages ne parlent pas de toute la scène. Maintenant on doit tracer les diagrammes pour chaque scène. Pour cela, j'ai choisi de faire 32 graphiques en camembert. Pour finir, j'ai fait un gros diagramme pour montrer la proportion des interventions des personnages dans la pièce entière. Pour voir tous les graphiques, cf fichier jupyter. # Mission 5: 21/11/23 Sujet 5 : Analyse des dialogues dans l'Avare de Molière. J'avais déjà un peu expliqué les étapes pour la mission 4, donc voici les étapes plus détaillées. Objectifs du projet: - Classer les personnages selon la quantité de parole grâce à une analyse syntaxique du texte (scènes / répliques / mots). En particulier, quel est celui qui parle le plus ? Quel est celui qui ne parle pas du tout ? - Réaliser un graphique qui montrera le nombre de mots que chaque acteur prononce dans chaque scène en s'inspirant de l'étude de l'Avare de Molière réalisée par l'OBVIL. ## Importation des données Pour utiliser n'importe quelle donnée, il faut évidemment y avoir accès. Il faut alors importer le texte de la pièce dans le code. D'abord on écrit l'URL du fichier texte: ``` url = "https://dramacode.github.io/markdown/moliere_avare.txt" ``` Puis il ouvre l'URL et lit le contenu en tant que fichier texte: ``` with urllib.request.urlopen(url) as response: data = response.read() ``` On appelle "texte" tous les caractères du texte en entier, c'est à dire le fichier texte qu'on utilisera: ``` texte = io.StringIO(data.decode('utf-8')).read() % ``` ## Compter le nombre d'interventions de chaque personnage La variable suivante est le compteur pour stocker le nombre d'occurrences du mot. Le "[]" signifie que c'est un tableau vide pour l'instant. ``` compteurs_occurrences = [] ``` Les scènes de la pièce sont séparées par des "###" dans le fichier texte. Donc on va séparer les scènes en utilisant cela: le "split("###")" sépare donc les scènes: ``` with urllib.request.urlopen(url) as response: parties_texte = response.read().decode('utf-8').split('###')[1:] ``` Une fois que les scènes sont séparées (on appellera une scène une "partie" à partir de maintenant), on doit trouver combien de fois chaque personnage parle pour chaque partie. On ne peut pas juste rechercher combien de fois le nom du personnage apparaît, puisqu'il peut être mentionné par un autre sans pour autant parler. Quand un personnage parle, il est noté **seul sur une ligne** de cette façon: **"HARPAGON."** (ne pas oublier le point). Donc on doit parcourir chaque partie du texte, et on compte combien de fois le mot apparaît seul sur une ligne: ``` mot_a_chercher = "HARPAGON." # C'est un exemple, mais il faudra faire cela pour tous les personnages. Dans le code il y a une liste de tous les personnages commentés for partie in parties_texte: # = "Pour chaque partie du texte:" lignes = partie.strip().splitlines() # on divise la partie en lignes compteur_occurrences = 0 # On définit le "Compteur d'occurrences" pour cette partie, il est égal à 0 pour l'instant. for ligne in lignes: # = "Pour chaque ligne de la partie en question:" if ligne.strip() == mot_a_chercher: # Si le mot apparaît seul sur la ligne (par exemple si la ligne = "HARPAGON."), compteur_occurrences += 1 # On ajoute +1 au décompte du total de combien de fois le mot apparaît dans la partie compteurs_occurrences.append(compteur_occurrences) # Ajoute le compteur d'occurrences de cette partie à la liste des compteurs ``` Si on veut savoir le résultat de cette boucle, on peut afficher le nombre d'occurrences du mot dans chaque partie du texte: ``` for i, occurrences in enumerate(compteurs_occurrences, start=1): # Pour chaque valeur de "compteurs_occurences", print(f"Le mot '{mot_a_chercher}' apparaît {occurrences} fois dans la partie {i} du texte.") # Ecrire "Le mot 'HARPAGON.' apparaît 6 fois dans la partie 2 du texte." (exemple) ``` Autrement dit, le résultat du print est que le nom "HARPAGON." apparaît x fois dans la partie 1, y fois dans la partie 2, etc. Mais pour stocker ces résultats, on va les mettre dans des tableaux. # Stocker les données du nombre d'interventions de chaque personnage D'abord, on fait un tableau avec chaque personnage. Ce sera la base du tableau qu'on va construire. ``` personnages=["HARPAGON", "VALÈRE", "ÉLISE", "CLÉANTE", "LA FLÈCHE", "MARIANE", "ANSELME", "FROSINE", "MAÎTRE SIMON", "MAÎTRE JACQUES", "BRINDAVOINE", "LA MERLUCHE", "LE COMMISSAIRE"] ``` J'ai alors recopié les résultats des compteurs pour chaque personnage et chaque scène dans des tableaux sous cette forme: Comme il y a 32 scènes et 13 personnages (14 mais yen a un qui parle pas), cela donne quelque chose comme ça (Les 0 signifient que les personnages ne parlent pas de toute la scène): Le premier chiffre correspond au nombre d'interventions d'Harpagon, le deuxième chiffre pour Valère, etc: ``` partie1=[0,8,8,0,0,0,0,0,0,0,0,0,0] partie2=[0,0,9,10,0,0,0,0,0,0,0,0,0] partie3=[34,0,0,0,32,0,0,0,0,0,0,0,0] partie4=[53,0,23,29,0,0,0,0,0,0,0,0,0] partie5=[20,22,4,0,0,0,0,0,0,0,0,0,0] partie6=[0,0,0,21,20,0,0,0,0,0,0,0,0] partie7=[9,0,0,6,1,0,0,0,5,0,0,0,0] partie8=[1,0,0,0,0,0,0,1,0,0,0,0,0] partie9=[0,0,0,0,6,0,0,5,0,0,0,0,0] partie10=[35,0,0,0,0,0,0,35,0,0,0,0,0] partie11=[34,11,1,3,0,0,0,0,0,27,1,2,0] partie12=[0,11,0,0,0,0,0,0,0,11,0,0,0] partie13=[0,0,0,0,0,0,0,2,0,1,0,0,0] partie14=[0,0,0,0,0,0,0,5,0,0,0,0,0] partie15=[2,0,0,0,0,0,0,1,0,0,0,0,0] partie16=[6,0,1,0,0,1,0,1,0,0,0,0,0] partie17=[9,0,0,20,0,10,0,5,0,0,0,0,0] partie18=[2,0,0,0,0,0,0,0,0,0,2,0,0] partie19=[6,2,0,2,0,0,0,0,0,0,0,3,0] partie20=[0,0,2,10,0,6,0,6,0,0,0,0,0] partie21=[3,0,1,1,0,0,0,0,0,0,0,0,0] partie22=[23,0,0,22,0,0,0,0,0,0,0,0,0] partie23=[8,0,0,8,0,0,0,0,0,17,0,0,0] partie24=[18,0,0,19,0,0,0,0,0,0,0,0,0] partie25=[0,0,0,5,5,0,0,0,0,0,0,0,0] partie26=[1,0,0,0,0,0,0,0,0,0,0,0,0] partie27=[6,0,0,0,0,0,0,0,0,0,0,0,7] partie28=[19,0,0,0,0,0,0,0,0,22,0,0,8] partie29=[30,30,0,0,0,0,0,0,0,0,0,0,0] partie30=[4,1,1,0,0,0,0,1,0,0,0,0,0] partie31=[11,14,0,0,0,3,14,0,0,0,0,0,0] partie32=[10,0,0,4,0,1,6,0,0,0,0,0,2] ```