In [1]:
%pylab inline 
font = {'family' : 'normal',
        'weight' : 'normal',
        'size'   : 24}

pylab.rc('font', **font)

pylab.rcParams['figure.figsize'] = (10.0, 8.0)
import numpy as np
import cv 
import cv2
import pylab as pl
from scipy.stats import linregress


Populating the interactive namespace from numpy and matplotlib

In [2]:
data = np.genfromtxt("data.csv", delimiter=',')
data = (data[1:,1:]).astype(np.float32)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
_, labs_masked, centre = cv2.kmeans(data, 2, criteria, 10, cv2.KMEANS_PP_CENTERS)
day_idx = np.argmax(centre[[0,1], [0,0]])

In [3]:
def my_hist(data, col):
    fig = pl.figure()
    pl.hist(data, bins=50, color=col, normed=True)
    m, q1, q3 =  np.percentile(data, [50, 25, 75])
    pl.xlim(0, 255)
    pl.ylim(0, 0.06)
    pl.xlabel("Intensity")
    pl.ylabel("frequency")
    bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=0.9)   
    pl.text(150, 0.05,  "Median = %i\nQ1 = %i\nQ3=%i" % (m, q1, q3), ha="left", va="center", size=18, bbox=bbox_props)
    return fig

In [6]:
day_img = cv2.imread("day_shot.png")
fig = my_hist(day_img.flatten(), 'r')
pl.savefig("day_hist.svg")


/usr/lib/python2.7/site-packages/matplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['normal'] not found. Falling back to Bitstream Vera Sans
  (prop.get_family(), self.defaultFamily[fontext]))

In [7]:
night_img = cv2.imread("night_shot.png")
fig = my_hist(night_img.flatten(), 'k')
pl.savefig("night_hist.svg")



In [7]:


In [8]:
pl.figure()
pl.plot(data[:,0], data[:,2] -data[:,1] , "o",alpha=0.1, color=(0.5,0.5,0.5))
pl.ylim((50, 80))
pl.xlim((60, 130))
pl.ylabel("Interquartile range")
pl.xlabel("Median")
pl.savefig("before_clust.svg")



In [8]:


In [8]:


In [9]:
#colours = ['r' if c == day_idx else 'b' for c in labs_masked.flatten()]
colours = np.where(labs_masked.flatten() == day_idx, 'r', 'b')
pl.figure()
for i in (0,1):
    filt = labs_masked.flatten() == i
    x = data[filt,0]
    y = data[filt,2] - data[filt,1]
    if i == day_idx:            
        col = 'r'
    else:
        col= 'k'
        
    pl.plot(x, y , "o",alpha=0.1, color=col)
    
pl.ylim((50, 80))
pl.xlim((60, 130))
pl.ylabel("Interquartile range")
pl.xlabel("Median")
pl.savefig("after_clust.svg")



In [10]:
x = labs_masked.flatten()
result = np.correlate(x, x, mode = 'full')
#pl.acorr()


maxcorr = np.argmax(result)
# print 'maximum = ', result[maxcorr]
result = result / result[maxcorr]
result[maxcorr]
observed_time = np.where(np.diff(x == 1))[0]

expected_time = np.arange(np.min(observed_time), np.max(observed_time) + 720, 720)
pl.figure()
pl.plot(expected_time/60, observed_time/60, 'x')
pl.plot(expected_time/60,expected_time/60, '-')
pl.ylabel("Expected transition time(h)")
pl.xlabel("Observed transition time(h)")
slope = linregress(expected_time, observed_time)[0]
min_per_day = (24 - slope  * 24) * 60

bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=0.9)   
pl.text(10, 120,  "slope = %.03f\nSo we drift %.01f min/day!" % (slope, min_per_day), ha="left", va="center", size=18, bbox=bbox_props)

pl.savefig("time_drift.svg")


pl.show()



In [10]:


In [10]:


In [10]:


In [ ]: