In [1]:
import glob
import csv
from operator import add
import scipy.stats as stat

#Dateiliste erstellen
files = []
for filename in glob.glob('/Users/robinweiss/Documents/Studium/Physik/Bachelorarbeit/final data/*.csv'):
    files.append(filename)
    
#read files
seen = 0
trials = 0
catchseen = 0
catchtrials = 0
deltas = []
freqs = []
catchfreq = []
for filename in files:
    data = csv.reader(open(filename, "rb"), delimiter=',')
    data.next()
    data.next()
    data.next()
    for row in data:
        freqdiff = abs(int(row[0][0:-2])-int(row[1][0:-2]))
        if float(row[3]) < float(row[4]):
            if row[0] != row[1]:
                trials += 1
                if row[5] == 'y':
                    seen += 1
                    deltas.append((freqdiff,1))
                    freqs.append((int(row[0][0:-2]),int(row[1][0:-2]),1))
                else:
                    deltas.append((freqdiff,0))
                    freqs.append((int(row[0][0:-2]),int(row[1][0:-2]),0))
            if row[0] == row[1]:
                catchtrials += 1
                if row[5] == 'n':
                    catchseen += 1
                    catchfreq.append((int(row[0][0:-2]),int(row[1][0:-2]),0))
                if row[5] == 'y':
                    catchfreq.append((int(row[0][0:-2]),int(row[1][0:-2]),1))
        else:
            print row
                                        
d_delta = {}
for freq, count in deltas:
    if freq not in d_delta:
        d_delta[freq] = [0,0]
    d_delta[freq][0] += 1
    if count:
        d_delta[freq][1] += 1
        
d_freqs = {}
for freq1, freq2, count in freqs:
    if (freq1, freq2) not in d_freqs:
        d_freqs[(freq1, freq2)] = [0,0]
    d_freqs[(freq1, freq2)][0] += 1
    if count:
        d_freqs[(freq1, freq2)][1] += 1
        
d_catchfreqs = {}
for freq1, freq2, count in catchfreq:
    if (freq1, freq2) not in d_catchfreqs:
        d_catchfreqs[(freq1, freq2)] = [0,0]
    d_catchfreqs[(freq1, freq2)][0] += 1
    if count:
        d_catchfreqs[(freq1, freq2)][1] += 1
        
d_all = d_freqs.copy()
d_all['overall\ncorrectness'] = (1, round(float(seen)/trials, 3))
d_all['false\npositives'] = (1, 1-round(float(catchseen)/catchtrials, 3))

d_3d = d_freqs.copy()
d_3d.update(d_catchfreqs)

print 'seeing-prob:', round(100.*seen/trials, 3), '%'
print 'catchtrial accuracy:', round(100.*catchseen/catchtrials), '%'

delta_std = loadtxt("/Users/robinweiss/Documents/Studium/Physik/Bachelorarbeit/final data/delta_std.txt", delimiter=', ')
d_all_std = loadtxt("/Users/robinweiss/Documents/Studium/Physik/Bachelorarbeit/final data/d_all_std.txt", delimiter=', ')
contrast_std = loadtxt("/Users/robinweiss/Documents/Studium/Physik/Bachelorarbeit/final data/contrast_std.txt", delimiter=', ')

delta_std = [stat.sem(delta_std[:,i]) for i in range(delta_std.shape[1])]
d_all_std = [stat.sem(d_all_std[:,i]) for i in range(d_all_std.shape[1])]
contrast_std = [stat.sem(contrast_std[:,i]) for i in range(contrast_std.shape[1])]

f, p = plt.subplots(3, figsize=(20,12))
p[0].bar(range(len(d_delta)), [float(d_delta[key][1])/d_delta[key][0] for key in sorted(d_delta)], align='center', width=0.1, color='c', yerr=delta_std, ecolor='r')
p[0].set_xticks(range(len(d_delta)))
p[0].set_xticklabels(sorted(d_delta))
p[0].set_xlabel('$\Delta f$ in $Hz$')
p[0].set_ylabel('P(seeing)')
p[0].set_title('Richtige Antworten pro $\Delta f$')
p[0].grid()
p[0].set_ylim(0,1.1)
p[0].set_xlim(-1, 5)

p[1].bar(range(len(d_all)), [float(d_all[key][1])/d_all[key][0] for key in sorted(d_all)], align='center', width=.2, color='g', yerr=d_all_std, ecolor='r')
p[1].set_xticks(range(len(d_all)))
p[1].set_xticklabels(sorted(d_all))
p[1].set_ylim(0, 1.1)
p[1].set_xlim(-1, 22)
p[1].grid()
p[1].set_title('Probability of Seeing')
p[1].set_xlabel('Frequenzpaar')
p[1].set_ylabel('P(seeing)')


contrastsum = []
for key in sorted(d_freqs):
    if key[0]<key[1]:
        contrastsum.append(map(add, d_freqs[key], d_freqs[tuple(reversed(key))]))
                
contrasts = [float(fr[1])/fr[0] for fr in sorted(d_freqs) if fr[0]<fr[1]]
contrasts[9] = 1.333
contrastticks = []
i = 0
for key in sorted(d_freqs):
    if key[0]<key[1]:
        contrasts[i] = str(contrasts[i])+'\n'+str((key[0],key[1]))
        i += 1
        
#contrast_id = argsort(array(contrasts))
contrast_id = ([7, 4, 9, 5, 8, 6, 0, 1, 2, 3])

contrasts = array(contrasts)[contrast_id]
contrastsum = array(contrastsum)[contrast_id]
contrast_std = array(contrast_std)[contrast_id]
        
        
p[2].bar(range(len(contrasts)), [(float(item[1])/item[0]) for item in contrastsum], align='center', width=.1, color='y', yerr=contrast_std, ecolor='r')
p[2].set_xticks(range(len(contrasts)))
p[2].set_xticklabels(contrasts)
p[2].grid()
p[2].set_ylim(0, 1.1)
p[2].set_xlim(-1, 10)
p[2].set_xlabel('contrast\nfreqs')
p[2].set_ylabel('P(seeing)')

f.tight_layout()


['400.0', '800.0', '1.4', '1.1', '1.01087594032', 'n', '0']
['200.0', '800.0', '1.3', '0.6', '0.30572104454', 'y', '1']
seeing-prob: 52.504 %
catchtrial accuracy: 95.0 %
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/collections.py:571: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  if self._edgecolors == str('face'):

In [2]:
f, p = plt.subplots(1, figsize=(12,7))
p.errorbar(range(len(d_delta)), [float(d_delta[key][1])/d_delta[key][0] for key in sorted(d_delta)], marker='o', markersize=8, linewidth=2, yerr=delta_std, ecolor='b')
p.set_xticks(range(len(d_delta)))
p.set_xticklabels(sorted(d_delta))
p.set_xlabel('$\Delta f$ [Hz]', fontsize=15)
p.set_ylabel('P', fontsize=15)
p.set_yticks([0, .5, 1])
#p.grid()
p.set_ylim(0,1.1)
p.set_xlim(-.2, 4.2)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.tight_layout()
#plt.savefig('/home/weiss/ba/figures/deltas_interpol.pdf')



In [4]:
print contrasts

f, p = plt.subplots(1, figsize=(14,7))
p.bar(range(len(contrasts)), [(float(item[1])/item[0]) for item in contrastsum], align='center', alpha=.3, width=.2, yerr=contrast_std, ecolor='k', error_kw={'linewidth':2})
#p.errorbar([1.2,1.25,1.333333,1.5,1.6,2,2,2.5,3,4], [(float(item[1])/item[0]) for item in contrastsum], linestyle='None', marker='o', markersize=8, linewidth=2, yerr=contrast_std, ecolor='b')
p.set_xticks(range(len(contrasts)))
p.set_xticklabels(contrasts)
p.set_yticks([0, .5, 1])
#p.grid()
p.set_ylim(0,1.1)
p.set_xlim(-.2, 9.2)
p.set_xlabel('Frequenzverhaeltnis\nFrequenzen [Hz]', fontsize=15)
p.set_ylabel('P', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.tight_layout()
#plt.savefig('/home/weiss/ba/figures/contrasts_interpol.pdf')


['1.2\n(500, 600)' '1.25\n(400, 500)' '1.333\n(600, 800)' '1.5\n(400, 600)'
 '1.6\n(500, 800)' '2.0\n(400, 800)' '2.0\n(200, 400)' '2.5\n(200, 500)'
 '3.0\n(200, 600)' '4.0\n(200, 800)']

In [5]:
low = ('false\npositives', (400,500), (500,400), (500,600), (600,500), (600,800), (800,600))
low_vals = [d_all[item] for item in low]

ids = [0, 7, 11, 12, 16, 17, 21]
border = float(d_all['false\npositives'][1])/d_all['false\npositives'][0]

f, p = plt.subplots(1, figsize=(12,7))
p.plot((-.1,6.1), (border,border), linestyle='--', color='r', linewidth=2)
p.bar(range(len(low)), [(float(item[1])/item[0]) for item in low_vals], color='b', alpha=.2, align='center', width=.2, yerr=[d_all_std[i] for i in ids], ecolor='k', error_kw={'linewidth':2})
p.set_xticks(range(len(low)))
p.set_xticklabels(low)
p.set_yticks([0,border, .1])
p.set_yticklabels([0, 'false\npositives\nbias', 0.1])
#p.grid()
p.set_ylim(0,.15)
p.set_xlim(-.2, 6.2)
p.set_xlabel('Frequenzen [Hz]', fontsize=15)
p.set_ylabel('P', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.tight_layout()
#plt.savefig('/home/weiss/ba/figures/false_positives_bias.pdf')



In [6]:
vgl1 = [6,7,8,9]
vgl2 = [1,3,5]
vgl200 = []
vgl400 = []
for i in vgl1:
    vgl200.append(float(contrastsum[i,1])/contrastsum[i,0])
for i in vgl2:
    vgl400.append(float(contrastsum[i,1])/contrastsum[i,0])
figure(figsize=(10,6))
errorbar([200,300,400,600], vgl200, marker='o', markersize=8, linewidth=2, yerr=contrast_std[vgl1], ecolor='b', label='200 Hz')
errorbar([100,200,400], vgl400, marker='o', color='g', markersize=8, linewidth=2, yerr=contrast_std[vgl2], ecolor='g', label='400 Hz')
plt.xticks([100,200,300,400,500,600])
plt.xlim(90,610)
plt.legend(loc='lower right', fontsize=15)
plt.yticks([0,.3,.6,.9])
#plt.grid()
plt.ylim(0,1.1)
plt.xlabel('$\Delta f$ [Hz]', fontsize=15)
plt.ylabel('P', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.tight_layout()
#plt.savefig("/home/weiss/ba/figures/deltasvgl.pdf")



In [7]:
high = [(200,400), (400,200), (200,500), (500,200), (200,600), (600,200), (200,800), (800,200), (400,800), (800,400)]
highvals = [d_all[i] for i in high]
highids = [2,6,3,10,4,14,5,18,9,19]

figure(figsize=(14,7))
plt.bar(range(len(high)), [float(val[1])/val[0] for val in highvals], color='bbbbbbbbgg', alpha=.2, align='center', width=.2, yerr=[d_all_std[i] for i in highids], ecolor='k', error_kw={'linewidth':2})
plt.xticks(range(len(high)), high)
plt.yticks([0,.5,1])
#plt.grid()
plt.xlim(-.5,9.5)
plt.ylim(0,1.1)
plt.xlabel('Frequenzen [Hz]', fontsize=15)
plt.ylabel('P', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.tight_layout()
#plt.savefig("/home/weiss/ba/figures/hohews.pdf")



In [14]:
d_3d[500,500] = [10,0]
u = [100*i for i in range(2,9)]
heatmap = zeros((7,7))
for i,freq1 in enumerate(u):
    for j,freq2 in enumerate(u):
        try: 
            heatmap[i,j] = float(d_3d[freq1,freq2][1])/d_3d[freq1,freq2][0]
        except KeyError:
            heatmap[i,j] = 1.2
                
f, p = plt.subplots(1, figsize=(8,8))
im = imshow(heatmap, cmap='hot', interpolation='none', extent=(150,850,150,850), origin='lower')
cbar = plt.colorbar(im,fraction=0.046,pad=0.04,ticks=[0.0,.2,.4,.6,.8,1.0,1.2])
cbar.ax.set_yticklabels([0.0,.2,.4,.6,.8,1.0,'keine Daten'])
plt.tight_layout()
#plt.savefig("/Users/robinweiss/Documents/Studium/Physik/Bachelorarbeit/figures/heatmap.png", dpi=f.dpi)



In [35]:


In [ ]: