2012-05-18 34 views
1

包我有一組數據在這樣一個文本文件:Python的繪製時間與基於CSV文件

99150, 2012-05-18 14:30:08.592276 
100350, 2012-05-18 14:31:09.093357 
97710, 2012-05-18 14:32:09.583485 
94980, 2012-05-18 14:33:10.047794 
95670, 2012-05-18 14:34:10.559798 
97170, 2012-05-18 14:35:11.073576 
98850, 2012-05-18 14:36:11.562930 
98280, 2012-05-18 14:37:12.058591 
97950, 2012-05-18 14:38:12.547585 
102510, 2012-05-18 14:39:13.053431 

我想讓它的一個簡單的情節和輸出的圖像。我已經開始與以下:

#!/bin/python 

import csv 
import matplotlib.pyplot as plt 
import numpy as np 

filename="pps_counter.log" 

def getColumn(filename, column): 
    results = csv.reader(open(filename), delimiter=",") 
    return [result[column] for result in results] 

time = getColumn(filename,1) 
packets = getColumn(filename,0) 

plt.figure("Packets Per Minute") 
plt.xlabel("Time(minutes)") 
plt.ylabel("Number of Packets") 
plt.plot(time,packets) 

當我運行此我得到以下錯誤:

Traceback (most recent call last): 
    File "plotter.py", line 16, in <module> 
    time = getColumn(filename,1) 
    File "plotter.py", line 14, in getColumn 
    return [result[column] for result in results] 
IndexError: list index out of range 

誰能幫助?

回答

1

我會建議使用csv2rec(或與轉換器功能genfromtxt )。這會將時間轉換爲Python日期時間,您可以使用matplotlib進行繪製。

from matplotlib.mlab import csv2rec 
import matplotlib.pyplot as plt 

data = csv2rec('pps_counter.log', names=['packets', 'time']) 

plt.plot_date(data['time'], data['packets']) 
plt.xlabel("Time(minutes)") 
plt.ylabel("Number of Packets") 
plt.title("Packets Per Minute") 

plt.show() 
+0

太棒了!謝謝,我已經定製了圖形並將其設置爲輸出到文件中......謝謝。 – secumind

0

我會用一些錯誤檢查 像

return [ result[column] if column < len(result) else None for result in results] 

它看起來像有在你的文件中的行缺少,

+1

或者它可能是最後的空白行;導致相同的錯誤。 – CheeseWarlock

+0

我添加了錯誤檢查@ corn3lius建議,但我也嘗試了舊的方法,並刪除文件中的尾隨空行,兩者都導致:文件「plotter.py」,行21,在 plt.figure(「Packets每分鐘「) 文件」/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py「,第257行,如圖 num = int(num)#數字參數的粗略驗證 – secumind

+0

我使用None (空)對象作爲錯誤的情況下,你可以使用0或圖中明顯的東西。或者你可以在你的輸入中找到並刪除行。 – corn3lius