Skip to content

Instantly share code, notes, and snippets.

@phiresky
Created April 16, 2016 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phiresky/154756a83dfe7e5d3928d00a97093886 to your computer and use it in GitHub Desktop.
Save phiresky/154756a83dfe7e5d3928d00a97093886 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import numpy, csv, sys
from itertools import groupby
from functools import partial
reader = csv.reader(open("data.csv", "r"), delimiter=";")
next(reader, None) # skip header
data = numpy.array([
(datetime.strptime(datestr, "%Y-%m-%d %H:%M:%S"), int(valstr))
for [datestr, valstr, *_] in reader])
def bymin(mins, d):
date,val = d
return date - timedelta(minutes=date.minute%mins,seconds=date.second)
def average(averager, vals):
return averager([v for (k,v) in vals])
def make(name, grouper, averager):
grouped = numpy.array([(date, average(averager, vals)) for (date, vals) in groupby(data, grouper)])
plt.figure(figsize=(20,10))
dp = plt.plot([date for date,val in grouped], [val for date,val in grouped])
plt.savefig(name+".png")
make("mean5", grouper=partial(bymin, 5), averager=numpy.mean)
make("mean1", grouper=partial(bymin, 1), averager=numpy.mean)
make("median5", grouper=partial(bymin, 5), averager=numpy.median)
make("median1", grouper=partial(bymin, 1), averager=numpy.median)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment