Résolue

Affichage de données d'un fichier.txt

# Fichiers # Algorithmes # Graphes

J'ai trouvée une possible solution à la question.

Si cette réponse suffit, j'indiquerai que la question a été résolue.


Dans un projet en Java, on nous demande de réaliser trois méthodes utilisant ces tris : BubbleSort, QuickSort, CountingSort.


Ce sont trois tris connus en Algorithmie.

Ensuite on souhaite <u>connaître le temps d'exécution des méthodes.</u>


On récupère les données dans un fichier.txt de cette manière:

Nb_Element: TempsTriBulle; NB_OperationTB: TempsTriRapide; NB_OperationTR: TempsTriDenombrement: NB_OperationTD


<u>Exemple:</u>

44001: 9865.0; 2391444355: 24.0; 1186730: 2.0; 308307


<u>Maintenant, voici enfin la question :</u>

J'aimerai réaliser les Fonction (Graphiques) avec Python pour chaque Tris.


<u>En Abscisse :</u> Nb_Element

<u>En Ordonnée :</u> TempsTri


J'ai déjà récupérés mes données dans des dictionnaires de Listes.


chemin = "TempsFonction.txt"
Nb_Element = []
TriBulle = {"Temps": [], "NBOE": []}
TriRapide = {"Temps": [], "NBOE": []}
TriDenombrement = {"Temps": [], "NBOE": []}

Chaine = "QuelqueChose"
with open(chemin, "r") as Fichier:
    Fichier.readlines(1)

    while(True):
        Chaine = Fichier.readlines(1)

        if(len(Chaine) == 0):
            break
#La dernière ligne du fichier est vide.

        Chaine = Chaine[0].replace(": ","; ")
        Chaine = Chaine.replace("\n","")
        Liste = Chaine.split("; ")

        Nb_Element.append(Liste[0])

        TriBulle["Temps"].append(Liste[1])
        TriBulle["NBOE"].append(Liste[2])

        TriRapide["Temps"].append(Liste[3])
        TriRapide["NBOE"].append(Liste[4])

        TriDenombrement["Temps"].append(Liste[5])
        TriDenombrement["NBOE"].append(Liste[6])


Du coup, comment faire pour afficher de manière visuelle les données de mes fichiers sous forme de fonctions ?


Merci pour votre Lecture et de votre future réponse :) !


<u>Édition 1:</u>

J'ai utilisé matplotilb, une bibliothèque de Python.


import matplotlib.pyplot as plt

# Ajouter les données aux tableaux pour les abscisses et les ordonnées
x = Nb_Element
y = TriBulle["Temps"]

# Tracer le graphique
plt.plot(x, y)

# Ajouter les étiquettes pour les axes
plt.xlabel("Nb_Element")
plt.ylabel("TempsTri")

# Ajouter un titre pour le graphique
plt.title("Tri BubbleSort")

# Afficher le graphique
plt.show()


Et je me prend un message d'erreur incompréhensible de mon vivant :


/usr/lib/python3/dist-packages/pandas/util/testing.py:28: FutureWarning: In the future `np.bool` will be defined as the corresponding NumPy scalar.

  import pandas._libs.testing as _testing
Traceback (most recent call last):
  File "/home/etudiant/dj222837/PycharmProjects/pythonProject/AfficherDonnées.py", line 41, in <module>
    plt.plot(x, y)
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 2748, in plot
    return gca().plot(
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 2245, in gca
    return gcf().gca()
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 842, in gcf
    return figure()
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/_api/deprecation.py", line 454, in wrapper
    return func(*args, **kwargs)
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 783, in figure
    manager = new_figure_manager(
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 358, in new_figure_manager
    _warn_if_gui_out_of_main_thread()
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 336, in _warn_if_gui_out_of_main_thread
    if _get_required_interactive_framework(_get_backend_mod()):
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 207, in _get_backend_mod
    switch_backend(dict.__getitem__(rcParams, "backend"))
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 265, in switch_backend
    backend_mod = importlib.import_module(
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/snap/pycharm-professional/319/plugins/python/helpers/pycharm_matplotlib_backend/backend_interagg.py", line 11, in <module>
    from datalore.display import debug, display, SHOW_DEBUG_INFO
  File "/snap/pycharm-professional/319/plugins/python/helpers/pycharm_display/datalore/display/__init__.py", line 1, in <module>
    from .display_ import *
  File "/snap/pycharm-professional/319/plugins/python/helpers/pycharm_display/datalore/display/display_.py", line 7, in <module>
    from .supported_data_type import _standardize_value
  File "/snap/pycharm-professional/319/plugins/python/helpers/pycharm_display/datalore/display/supported_data_type.py", line 11, in <module>
    import pandas
  File "/usr/lib/python3/dist-packages/pandas/__init__.py", line 182, in <module>
    import pandas.testing
  File "/usr/lib/python3/dist-packages/pandas/testing.py", line 7, in <module>
    from pandas.util.testing import (
  File "/usr/lib/python3/dist-packages/pandas/util/testing.py", line 28, in <module>
    import pandas._libs.testing as _testing
  File "pandas/_libs/testing.pyx", line 10, in init pandas._libs.testing
  File "/home/etudiant/dj222837/.local/lib/python3.8/site-packages/numpy/__init__.py", line 305, in __getattr__
    raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'bool'.
`np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations


Salut Jérémy,


peux tu afficher x et y ? je soupçonne un problème de format. Sinon je te propose cette solution avec pandas pour lire le fichier et le matplotlib qui va bien. Je me suis permis de créer un faux fichier pour illustrer.


import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("TempsFonction.txt", sep=";")
data = {}
for column in df.columns:
    # on coupe le header de colonne séparé par : et on ne prend pas l'espace juste après
    alg = column.split(":")[1:][0][1:]
    data[alg] = {"NB_Element": df[column].apply(lambda elem: elem.split(":")[0]).values,
                 "TempsTri": df[column].apply(lambda elem: elem.split(":")[1]).values}

for key,values in data.items():
    plt.plot(values['NB_Element'], values['TempsTri'], label=key)

plt.legend()
plt.show()


En gros le apply permet d'appliquer une fonction à chaque élément d'une colonne. Dis moi si tu ne connais pas du tout cette fonction et que tu veux en savoir plus.


Ici mon faux fichier pour l'exemple:


# TempsFonction.txt
Nb_Element: TempsTriBulle; NB_OperationTB: TempsTriRapide
0: 0;0: 0
1: 1; 1: 1
2: 2; 2: 4
3: 3; 3: 9
4: 4; 4: 16
5: 5; 5: 25
6: 6; 6: 36
7: 7; 7: 49



Et le résultat



A ta disposition si ce n'est pas clair. C'est un bon exercice et je le referai ce soir en mentorat si tu es là.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.