C'est la première fois que j'utilise python et matplotlib et j'aimerais tracer des données à partir d'un fichier CSV.
Le fichier CSV se présente sous la forme:
import matplotlib.pyplot as plt import csv import datetime import re T = [] X = [] Y = [] with open('Book2.csv','r') as csvfile: plots = csv.reader(csvfile, delimiter=',') for row in plots: datetime_format = '%d/%m/%Y %H:%M' date_time_data = datetime.datetime.strptime(row[0],datetime_format) T.append(date_time_data) X.append(float(row[1])) Y.append(float(row[2])) plt.plot(T,X, label='second column data vs datetime') plt.plot(T,Y, label='third column data vs datetime') plt.xlabel('DateTime') plt.ylabel('Data') plt.title('Interesting Graph\nCheck it out') plt.legend() plt.show()
avec environ 4000 lignes. Je voudrais tracer les données de la deuxième colonne par rapport à la date / heure de chaque ligne et les données de la troisième colonne par rapport à la date / heure de chaque ligne, toutes deux sur le même tracé.
Voici mon code donc loin mais cela ne fonctionne pas:
10/03/2018 00:00,454.95,594.86
Toute aide ou conseil serait formidable. Merci beaucoup! :)
3 Réponses :
Vous pouvez utiliser des pandas pour lire le fichier CSV
import pandas as pd data = pd.read_csv('file_name.txt', header = None)
De là, vous pouvez utiliser le dataframe pandas comme entrée pour matplot. Un bon tutoriel peut être trouvé ici a >
J'espère que cela vous aidera:
import csv import numpy as np a = [] with open('table.csv') as f: # Let's say your data is at 'table.csv' f_csv = csv.reader(f) for row in f_csv: a.append(row) # Get each line b = np.array(a) # Make it as a numpy array c = b[:,[1,2]] # Filter it by column print(c)
import matplotlib.pyplot as plt import csv x = [] y = [] with open('example.csv','r') as csvfile: plots = csv.reader(csvfile, delimiter=',') for row in plots: x.append(float(row[2])) y.append(float(row[3])) plt.plot(x,y, label='Loaded from file!') plt.xlabel('x') plt.ylabel('y') plt.title('Interesting Graph\nCheck it out') plt.legend() plt.show() dont forget to change the name of the file in my exemple or put the correct path if you are opening the file from different location if your file have float value change x.append(int(row[0])) to x.append(float(row[0])) and same for y
Votre conversion en int
échouera sur la ligne [0]
car il s'agit d'une date et non d'une chaîne de type flottant ou numérique
vrai Je donnais juste un exemple général puisqu'il n'a pas donné de détails mais si le fichier contient des données écrites comme il le montre, cela échouera
La question indique Je voudrais tracer les deuxième et troisième colonnes , donc juste une simple modification et votre réponse devrait fonctionner
Salut les gars, j'ai essayé le code que vous avez suggéré mais n'a pas fonctionné pour moi. J'ai fait quelques modifications dans mon original et ma question et j'ai posté le code. Voir au dessus.
Quelle est votre fonction? ne peut pas vous aider sans cela.
Désolé, j'aurais probablement dû être plus clair. J'ai juste besoin d'un tracé simple des points de données des deuxième et troisième colonnes par rapport à la date-heure. Merci.
est-ce un fichier .txt ou un fichier csv?
C'est un fichier CSV
@Talal voyez ma réponse j'espère que cela vous aidera
Salut les gars, j'ai essayé le code que vous avez suggéré mais n'a pas fonctionné pour moi. J'ai fait quelques modifications. Voir au dessus.
Qu'entendez-vous par «ne fonctionne pas»? Quelle est votre sortie actuelle et quelle est votre sortie attendue? Votre code ci-dessus semble correct, alors qu'est-ce qui ne va pas?
Salut HS-nébuleuse, le code fonctionne maintenant et trace la sortie dont j'ai besoin, cependant, l'axe des x affiche uniquement les heures et non à la fois les heures et les dates. Aucune suggestion?