diff --git a/Journal_de_bord_fichier.md b/Journal_de_bord_fichier.md index fa8f7128070d21560e77c4b6425fd60d2ab39491..77a4d4237eb436f4927979a2707b8627a920714b 100644 --- a/Journal_de_bord_fichier.md +++ b/Journal_de_bord_fichier.md @@ -176,9 +176,9 @@ Objectifs du projet: - 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 +## 1) 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. +Pour utiliser n'importe quelle donnée dans un code python, 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: @@ -186,7 +186,7 @@ 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: +Puis on ouvre l'URL et on lit le contenu en tant que fichier texte: ``` with urllib.request.urlopen(url) as response: @@ -197,7 +197,7 @@ On appelle "texte" tous les caractères du texte en entier, c'est à dire le fic texte = io.StringIO(data.decode('utf-8')).read() % ``` -## Compter le nombre d'interventions de chaque personnage +## 2) 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. ``` @@ -244,18 +244,24 @@ Autrement dit, le résultat du print est que le nom "HARPAGON." apparaît x fois Mais pour stocker ces résultats, on va les mettre dans des tableaux. -# Stocker les données du nombre d'interventions de chaque personnage +## 3) 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: +J'ai alors recopié les résultats des compteurs pour chaque personnage et chaque scène dans des tableaux sous cette forme (Les 0 signifient que les personnages ne parlent pas de toute la scène): +| | HARPAGON | VALÈRE | ÉLISE | ... 13 | +| :---------: |:---------:| :-----:| :-----:|:-----:| +| Partie 1 | 0 | 8 | 8 | 0 | +| Partie 2 | 0 | 0 | 9 | 10 | +| Partie 3 | 34 | 0 | 0 | 0 | +| ... 32 | ... | ... | ... | ... | -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: +Comme il y a 32 scènes et 13 personnages (14 mais yen a un qui parle pas), on a 32 tableaux d'une ligne sous le tableau des noms. +Voici les 32 tableaux pour chaque partie, 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] @@ -290,10 +296,102 @@ 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] ``` + Il est plus facile de comprendre ces listes en les comparant avec le tableau ci-dessus. + +## 4) Tracer les données + +Pour que les données soient plus visuelles (sous forme de tableau c'est moins visuel), on fait des diagrammes proportionnels (camemberts). + +``` +%matplotlib notebook # Amélioration des graphiques sur Jupyter +fig, axs = plt.subplots(2, 4, figsize=(14,6)) # "fig, axs" sont les paramètres de la fenêtre de plot (plot=graphique): longueur = 6 et largeur = 14 + +for i in range(2): # On veut 2 lignes... + for j in range(4): # ...de 4 graphiques + axs[i, j].set_title(f'Scène {i * 4 + j + 1}') # Le titre de chaque graphique est "Scène 1", "Scène 2", ... + +axs[0, 0].pie(partie1, labels=personnages) # "axs[0,1]" c'est pour dire de quel plot on parle. C'est les coordonnées du plot. Là c'est [0,0] donc dans la première colonne de la première ligne. +axs[0, 1].pie(partie2, labels=personnages) # "pie" = tarte, le mot anglais pour le graphique camembert. Là on plot le camembert de la partie 2 +axs[0, 2].pie(partie3, labels=personnages) # "labels" c'est pour dire que les titres des parts du camembert sont dans le tableau "personnages", cad qu'on attribue les parts du camembert aux personnages qui correspondent. +axs[0, 3].pie(partie4, labels=personnages) # Idem pour la partie 4, etc. +axs[1, 0].pie(partie5, labels=personnages) +axs[1, 1].pie(partie6, labels=personnages) +axs[1, 2].pie(partie7, labels=personnages) +axs[1, 3].pie(partie8, labels=personnages) +``` +J'ai pas mis toutes les lignes, mais on fait pareil jusqu'à la partie 32. + + +## 5) Proportion d'intervention dans toute la pièce +On fait la même chose mais sans séparer les scènes. Cette fois on veut savoir la proportion de parole de chaque personnage dans toute la pièce. + +Pour cela, c'est le même code sans séparer les parties: + +``` +url = "https://dramacode.github.io/markdown/moliere_avare.txt" # On importe l'URL du fichier texte +mot_a_chercher = "HARPAGON." # C'est un exemple, après on change le nom + + +def get_text_from_url(url): # Fonction pour récupérer le contenu du fichier texte à partir d'une URL. Pas intéressant. + response = requests.get(url) + if response.status_code == 200: + return response.text + else: + return None + +text_content = get_text_from_url(url) # texte_content = le résultat de la fonction, cad le texte. + +if text_content: # "Dans le texte," + lignes = text_content.lower().splitlines() # On sépare les lignes. + occurrences = sum(1 for ligne in lignes if ligne.strip() == mot_a_chercher.lower()) # Occurence = la somme de tous les "HARPAGON." dans le texte. + print(f"Le mot '{mot_a_chercher}' apparaît seul sur une ligne {occurrences} fois dans le texte.") # Ecrire le nombre de fois que le personnage intervient en tout. +else: + print("Impossible de récupérer le contenu du fichier texte depuis l'URL.") # Uniquement si il y a un problème dans l'importation du texte. +``` + +Résultats: +``` +HARPAGON=344 +VALERE=99 +ELISE=50 +CLEANTE=160 +LA_FLECHE=64 +MARIANE=27 +ANSELME=20 +FROSINE=59 +MAITRE_SIMON=5 +MAITRE_JACQUES=84 +BRINDAVOINE=3 +LA_MERLUCHE=5 +LE_COMMISSAIRE=17 +``` + +Maintenant il faut tracer ces résultats, un ultime camembert: +``` +Donnees=[344, 99, 50, 160, 64, 27, 20, 59, 5, 84, 3, 5, 17] # Les nombres d'interventions de chaque personnage dans l'ordre +Noms=["HARPAGON", "VALERE", "ELISE", "CLEANTE", "LA_FLECHE", "MARIANE", "ANSELME", "FROSINE", "MAITRE_SIMON", "MAITRE_JACQUES", "BRINDAVOINE", "LA_MERLUCHE", "LE_COMMISSAIRE"] + +plt.figure(figsize=(10,10)) # Faire une figure de 10 fois 10 de côté. +plt.title("Proportions d'interventions par personnages dans \"l'Avare\" de Molière") # Mettre le titre du graphique +plt.pie(Donnees, labels=Noms) # Pie = camembert, labels = nom des personnages pour chaque part +plt.show() # Afficher le graphique +``` +## Résumé +- On commence par importer la pièce en fichier texte +- On sépare le texte par scènes et par lignes +- On compte combien de fois chaque personnage intervient +- On fait des tableaux pour regrouper ces quantités +- A partir des tableaux on plot les données sous forme de pie +- On recommence pour les valeurs dans le texte entier: +- On sépare le texte par lignes seulement +- On compte combien de fois chaque personnage intervient +- On en fait un tableau (bcp plus petit que dans la première partie) +- On plot le résultat pour savoir à quelles proportions les personnages interviennent dans la pièce l'Avare de Molière. +Pour aller plus loin, on pourrait compter le nombre de caractères de chaque personnage, pour savoir la proportion réelle de parole (en termes de longueur d'intervention).