2017-03-08 9 views
2

夜間に実行されているプログラムの時間をプロットしようとしていますが、後で解析できるようにCSVファイルに書き出します。 (このようなもの)ここでPythonでプログラムの時間をプロットするにはどうすればいいですか?

example

は私のコードとCSVの例です:

CSV:

na,programName,totaal,na,startDate,endDate,Date 
?,"to/check.apl",54006,?,2017-02-27T20:04:07.233,2017-02- 27T20:05:01.239,2017-02-27T00:00:00.000 
?,"to/ibx.apl",143887,?,2017-02-27T20:07:55.627,2017-02-27T20:10:19.514,2017-02-27T00:00:00.000 
?,"to/checker.apl",2039600,?,2017-02-27T20:14:37.662,2017-02-27T20:48:37.262,2017-02-27T00:00:00.000 

のpythonコード:

import matplotlib 
from pandas import * 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

matplotlib.style.use('ggplot') 

data = "miFile.csv" 
df = pd.DataFrame.from_csv(data) 
df = df.set_index('totaal') 

newDf = df[['programName','startDate','endDate']] 

これまでのところ、私は日時を取得します私はこれを行うことでこれを修正しようとしました(プロットするのもうまくいきません):

newDf['startDate'] = pd.to_datetime(newDf['startDate']) 
newDf['endDate'] = pd.to_datetime(newDf['endDate']) 

#pd.to_datetime(pd.Series(["2017-02-27T20:04:07.233"]) format= "%d, %m, %y, %H: %M: %S") 

newDf.plot('programName','startDate','endDate') 

plt.show() 

答えて

2

私はplotためminutesに列とconvert timedeltaの違いを取得し、その後、あなたはdfを作成するためのread_csvが必要だと思う:

temp=u"""na,programName,totaal,na,startDate,endDate,Date 
?,"to/check.apl",54006,?,2017-02-27T20:04:07.233,2017-02-27T20:05:01.239,2017-02-27T00:00:00.000 
?,"to/ibx.apl",143887,?,2017-02-27T20:07:55.627,2017-02-27T20:10:19.514,2017-02-27T00:00:00.000 
?,"to/checker.apl",2039600,?,2017-02-27T20:14:37.662,2017-02-27T20:48:37.262,2017-02-27T00:00:00.000""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), index_col=[2], parse_dates=[4,5,6]) 

print (df.dtypes) 
na      object 
programName   object 
na.1     object 
startDate  datetime64[ns] 
endDate  datetime64[ns] 
Date   datetime64[ns] 
dtype: object 
df['duration'] = (df['endDate'] - df['startDate']).astype('timedelta64[m]') 
newDf = df[['programName','duration']] 
print (newDf) 
      programName duration 
totaal       
54006  to/check.apl  0.0 
143887  to/ibx.apl  2.0 
2039600 to/checker.apl  33.0 

newDf.plot() 

plt.show() 
+0

は、私は '右のそれを得るために、' newDf.plot( 'のProgramName'、 '継続')を使用し、私も '得るために' astype( 'timedelta64 [S]')を使用し、これは正常に動作します、ありがとうそれは数秒です。しかし、私は70のような7つのプログラム名しか見ていません。 – H35am

+0

テスト 'print(df)'には7行しかありませんか? – jezrael

+0

'print(df)'は私にこれを与えます: '[70行×6列]' – H35am

0

私はあなたがpandas.read_csvを使用することを示唆しています( )をpandas.DataFrame.from_csv()の代わりに使用します。 それから私は時間と日を区別するTを考えています。

0

jezrealのおかげで、これは私の最終的な解決策がどのように見え、うまく動作するかです。 1分未満のプログラムは無視されるので、私は数秒でプロットします。それは私の場合は正確ではありません。

import matplotlib 
from pandas import * 
import pandas as pd 
import matplotlib.pyplot as plt 

matplotlib.style.use('ggplot') 

data = "miFile.csv" 
df = pd.read_csv(data,index_col=[2], parse_dates=[4,5,6]) 

df['duration'] = (df['endDate'] - df['startDate']).astype('timedelta64[s]') 
newDf = df[['programName','duration']] 

newDf.plot('programName','duration') 
plt.show() 
関連する問題