2015-07-06 7 views
0

Using matplotlib/pandas/python, I cannot visualize data as values per 30mins and per days - это новый вопрос, который сильно связан с этим вопросом.Использование Matplotlib, визуализация CSV-данных

Я хочу визуализировать данные CSV с помощью Matplotlib.

Ниже приведен мой код имени 1.30mins.py

import matplotlib.pyplot as plt 
from matplotlib import style 
import numpy as np 

style.use('ggplot') 

x,y =np.loadtxt('total_watt.csv', 
       unpack = True, 
       delimiter = ',') 

plt.plot(x,y) 

plt.title('Example') 
plt.ylabel('Y axis') 
plt.xlabel('X axis') 

plt.show() 

Когда я implemtented 1.30mins.py, я получил следующее сообщение об ошибке.

(DataVizProj)Soma-Suzuki:Soma Suzuki$ python 1.30mins.py 
Traceback (most recent call last): 
    File "1.30mins.py", line 10, in <module> 
    delimiter = ',') 
    File "/Users/Suzuki/Envs/DataVizProj/lib/python2.7/site-packages/numpy/lib/npyio.py", line 856, in loadtxt 
    items = [conv(val) for (conv, val) in zip(converters, vals)] 
ValueError: invalid literal for float(): 2011-04-18 13:22:00 

Это мой total_watt.csv

2011-04-18 21:22:00 659.670303375527 
2011-04-18 21:52:00 576.304871428571 
2011-04-18 22:22:00 2,497.20620579196 
2011-04-18 22:52:00 2,790.20392088608 
2011-04-18 23:22:00 1,092.20906629318 
2011-04-18 23:52:00 825.994417375886 
2011-04-19 00:22:00 2,397.16672089666 
2011-04-19 00:52:00 1,411.66659265233 

Насколько я искал сам, мне нужно добавить converters или %y-%m-%t к моей программе.

Мой питон версия 2,76 Моя matpltlib версия 1,42

+0

Ваша ошибка не связана с файлом вы пытаетесь читать, но к вашему Matplotlib. Какую версию python и matplotlib вы используете? Во-вторых, я бы рекомендовал попробовать [datetime dtype] (http://docs.scipy.org/doc/numpy/reference/arrays.datetime.html) для ваших данных и удалить ',' из вашего последнего столбца , –

+0

Моя версия matplotlib; >>> импорт matplotlib as mpl >>> print mpl .__ version__ 1.4.2 и моя версия python; (DataVizProj) Soma-Suzuki: ~ Suzuki $ python -V Python 2.7.6 –

+0

Я получаю другую ошибку, namly «ValueError: недействительный литерал для float(): 2011-04-18 21:22:00 659.670303375527». Я использую Python 2.7.6 и Matplotlib 1.4.3, и у меня нет проблем с импортом стиля. Также обратите внимание, что plt не определен в вашем коде. –

ответ

2

Данные

2011-04-18 21:22:00 659.670303375527 
2011-04-18 21:52:00 576.304871428571 
... 

не разделяются пробелами или запятыми. Однако можно считать наличие фиксированной ширины . np.genfromtxt может считывать данные фиксированной ширины. Вместо передачи строки в delimiter, передайте последовательность int, представляющую ширину каждого поля .


import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
from matplotlib import style 
style.use('ggplot') 

x, y = np.genfromtxt('total_watt.csv', 
        unpack=True, 
        delimiter=[19, 10**6], dtype=None) 

x = mdates.datestr2num(x) 
y = np.array(np.char.replace(y, ',', ''), dtype=float) 

fig, ax = plt.subplots() 
ax.plot(x, y) 

plt.title('Example') 
plt.ylabel('Y axis') 
plt.xlabel('X axis') 
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S') 
ax.xaxis.set_major_formatter(xfmt) 

fig.autofmt_xdate() 
plt.show() 

дает enter image description here

+0

Большое спасибо. Но, я не знаю, почему, я мог бы реализовать как код, так и код отрицательной вероятности. результат почти такой же. –

+0

в csv файле "https://github.com/camenergydatalab/EnergyDataSimula «Захват/blob/master/challenge2/data/total_watt.csv» нет «,» ... , но когда я открываю этот файл csv с номерами, добавляется «,». –

+0

, но когда я открываю этот файл с помощью xcode , файл CSV, как 2011-04-18 13: 22: 00,925.840613752523 2011-04-18 13: 52: 00,483.295891812865 2011-04-18 14: 22: 00,915.761633660131 есть разделенные между временем andvalue. Я думаю, именно поэтому оба кода были успешно реализованы! –

0

Я не знаю, имеет ли NumPy функциональность читать DateTime объекты непосредственно. Однако, если вы НЕ ищете элегантное решение, вот какой быстрый и грязный код, чтобы делать то, что вы хотите, используя два других модуля csv и datetime.

Я использую файл 'sample.csv' (обратите внимание, где я поставил запятые):

 2011-04-18 21:22:00, 659.670303375527 
    2011-04-18 21:52:00, 576.304871428571 

И код

 from matplotlib import style 
    from matplotlib import pylab as plt 
    import numpy as np 

    style.use('ggplot') 

    filename='sample.csv' 
    date=[] 
    number=[] 

    import csv 
    with open(filename, 'rb') as csvfile: 
     csvreader = csv.reader(csvfile, delimiter=',', quotechar='|') 
     for row in csvreader: 
      if len(row) ==2 : 
       date.append(row[0]) 
       number.append(row[1]) 

    number=np.array(number) 

    import datetime 
    for ii in range(len(date)): 
     date[ii]=datetime.datetime.strptime(date[ii], '%Y-%m-%d %H:%M:%S') 

    plt.plot(date,number) 

    plt.title('Example') 
    plt.ylabel('Y axis') 
    plt.xlabel('X axis') 

    plt.show() 

Давая мне следующий график. Graph of Result

Если вы ищете более элегантное решение с использованием numpy, я уверен, что кто-то узнает лучший способ.

+0

Спасибо! Он успешно работал! Было бы здорово, если бы вы могли сказать мне, что такое «delimiter = ',', quotechar = '|'". Я попытался выполнить поиск, но я не мог этого понять. –

+0

разделитель определяет, что разделяет ячейки, здесь это запятая. Однако, если вы установите для него разделитель пробелами -> delimiter = '', тогда файл будет иметь три строки, поскольку на каждую строку должно быть три пробела. И «разделитель», и «катчар» инструктируют объекты-писатели, чтобы указывать только те поля, которые содержат эти специальные символы. Если ответ - это то, что вы ищете, примите его, чтобы другие люди больше не пытались отвечать. –

+0

Спасибо. Я понимаю «разделитель», но я не понимаю «катчар». –