Mission 5

parent e721b8a8
...@@ -176,9 +176,9 @@ Objectifs du projet: ...@@ -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. - 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: D'abord on écrit l'URL du fichier texte:
...@@ -186,7 +186,7 @@ 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" 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: 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 ...@@ -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() % 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. 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 ...@@ -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. 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. 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"] 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] 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] 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] ...@@ -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] 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] 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).
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment