Gnuplot: сумма событий за интервал времени

#statistics #gnuplot

Вопрос:

у меня такой csv-файл

 2021-10-31;20:30:26
2021-10-31;20:32:15
2021-10-31;20:39:17
2021-10-31;20:40:15
2021-10-31;20:42:13
2021-11-01;08:37:15
...
 

я хотел бы рассчитать записи в течение 10-минутного интервала и отобразить их в виде гистограммы. В приведенном выше примере с 20:30 до 20:40 есть 3 попадания, с 20:40 до 20:50 есть 2 попадания и так далее.

Есть ли какой-нибудь способ сделать это с помощью gnuplot? Или мне нужно подготовить данные?

Спасибо тебе, Мартин

Ответ №1:

Вы можете попробовать такой smooth frequency вариант:

 reset

# formatting of output data (graph)
set format x "%Y-%m-%dn%H:%M" timedate

# y-axis, bar graph should start at 0
set yrange [0:*]
set ylabel "Occurences"
set ytics 1 

# make some space for large x axis labels
set rmargin at screen 0.95

# put input values into bins/time intervals
binwidth=10*60  # 10 minutes in seconds
bin(val) = binwidth * floor(val/binwidth)

# configure bar graph
set boxwidth binwidth

# final plot command
plot "a.dat" using (bin(timecolumn(1, "%Y-%m-%d;%H:%M:%S"))):(1) smooth freq with boxes fs solid 0.25 notitle
 

Документация от help smooth freq :

  The `frequency` option makes the data monotonic in x; points with the same
 x-value are replaced by a single point having the summed y-values.
 To plot a histogram of the number of data values in equal size bins,
 set the y-value to 1.0 so that the sum is a count of occurances in that bin:
 Example:
      binwidth = <something>  # set width of x values in each bin
      bin(val) = binwidth * floor(val/binwidth)
      plot "datafile" using (bin(column(1))):(1.0) smooth frequency
 

У вас есть данные о времени, поэтому column их необходимо заменить timecolumn , см.
help timecolumn для подробностей.

Команда set boxwidth используется в стиле построения полей, см. help plotting styles boxes Подробности.

Это и есть результат: изображение результата