2016-04-28 12 views
0

Ich möchte ein Streudiagramm duration(mins) gegen start Zeit wie dieser (das ist eine Zeit des Tages ist, unabhängig davon, an welchem ​​Tag es war):Panda-Streudiagramm gegen Tageszeit?

enter image description here

Ich habe eine CSV commute.csv Datei, die wie folgt aussieht:

date, prediction, start, stop, duration, duration(mins), Day of week 
14/08/2015, , 08:02:00, 08:22:00, 00:20:00, 20, Fri 
25/08/2015, , 18:16:00, 18:27:00, 00:11:00, 11, Tue 
26/08/2015, , 08:26:00, 08:46:00, 00:20:00, 20, Wed 
26/08/2015, , 18:28:00, 18:46:00, 00:18:00, 18, Wed 

kann ich importieren die CSV wie so Datei:

import pandas as pd 
times = pd.read_csv('commute.csv', parse_dates=[[0, 2], [0, 3]], dayfirst=True) 
times.head() 

Out:

date_start date_stop prediction duration duration(mins) Day of week 
0 2015-08-14 08:02:00 2015-08-14 08:22:00 NaN 00:20:00 20 Fri 
1 2015-08-25 18:16:00 2015-08-25 18:27:00 NaN 00:11:00 11 Tue 
2 2015-08-26 08:26:00 2015-08-26 08:46:00 NaN 00:20:00 20 Wed 
3 2015-08-26 18:28:00 2015-08-26 18:46:00 NaN 00:18:00 18 Wed 
4 2015-08-28 08:37:00 2015-08-28 08:52:00 NaN 00:15:00 15 Fri 

Ich kämpfe jetzt duration(mins) gegen start Zeit plotten (ohne Datum). Bitte helfen Sie!

@jezrael war eine große Hilfe ... einer der Kommentare auf issue 8113 schlägt vor, eine Variante von df.plot (x = x, y = y, style = "."). Ich versuchte es:

times.plot(x='start', y='duration(mins)', style='.') 

Aber es zeigt nicht die gleiche wie meine beabsichtigte Handlung: Der Ausgang ist falsch, da die X-Achse gedehnt wurde, so dass jeder Datenpunkt die gleichen Abstand voneinander in X:

enter image description here

gibt es keine Möglichkeit, gegen die Zeit zu planen?

Antwort

2

Ich denke, es gibt ein Problem verwenden time - issue 8113 in scatter graph.

Aber können Sie verwenden hour:

df['hours'] = df.date_start.dt.hour 
print df 
      date_start   date_stop prediction duration \ 
0 2015-08-14 08:02:00 2015-08-14 08:22:00   NaN 00:20:00 
1 2015-08-25 18:16:00 2015-08-25 18:27:00   NaN 00:11:00 
2 2015-08-26 08:26:00 2015-08-26 08:46:00   NaN 00:20:00 
3 2015-08-26 18:28:00 2015-08-26 18:46:00   NaN 00:18:00 

    duration(mins) Dayofweek hours 
0    20  Fri  8 
1    11  Tue  18 
2    20  Wed  8 
3    18  Wed  18 

df.plot.scatter(x='hours', y='duration(mins)') 

graph

Eine andere Lösung mit Zählen time in minutes:

df['time'] = df.date_start.dt.hour * 60 + df.date_start.dt.minute 
print df 
      date_start   date_stop prediction duration \ 
0 2015-08-14 08:02:00 2015-08-14 08:22:00   NaN 00:20:00 
1 2015-08-25 18:16:00 2015-08-25 18:27:00   NaN 00:11:00 
2 2015-08-26 08:26:00 2015-08-26 08:46:00   NaN 00:20:00 
3 2015-08-26 18:28:00 2015-08-26 18:46:00   NaN 00:18:00 

    duration(mins) Dayofweek time 
0    20  Fri 482 
1    11  Tue 1096 
2    20  Wed 506 
3    18  Wed 1108 

df.plot.scatter(x='time', y='duration(mins)') 

graph1