In [6]:
import glob
import csv
from operator import add
from scipy import stats

#Dateiliste erstellen
files = []
for filename in glob.glob('/Users/robinweiss/Documents/RWeiss/final data/*.csv'):
    files.append(filename)
    
names = [filename[17:19] for filename in files]
sems = []
legend = list(names)
i = 0
    
#read files
for filename in files:
    seen = 0
    trials = 0
    catchseen = 0
    catchtrials = 0
    deltas = []
    freqs = []
    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
        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_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))
    names[i] = d_delta.copy()
    sems.append([stats.sem(concatenate((ones((d_delta[key][1])),zeros(((d_delta[key][0]-d_delta[key][1])))))) for key in sorted(d_delta)])
    i += 1
    
f, p = plt.subplots(2, 3, figsize=(8,5), sharex=True, sharey=True)

print sems[0]

for i in range(3):
    p[0,i].errorbar(range(len(names[i])), [float(names[i][key][1])/names[i][key][0] for key in sorted(names[i])], marker='o', label=legend[i], yerr=list(sems[i]), ecolor='b')
    line = stats.linregress(range(len(names[i])), [float(names[i][key][1])/names[i][key][0] for key in sorted(names[i])])
    x = range(len(names[i]))
    p[0,i].plot(x, [line[0]*x+line[1] for x in range(len(names[i]))], color='lime')
    p[0,i].set_xticks(range(len(names[i])))
    p[0,i].set_xticklabels(sorted(names[i]))
    p[0,0].set_ylabel('P', fontsize=15)
    #p[0,i].grid()
    p[0,i].text(4, .1, legend[i], fontsize=15)
    #p[0,i].legend(loc='lower right')
    p[0,i].set_ylim(0,1.1)
    p[0,i].set_xlim(-1, 5)
    p[0,i].tick_params(labelsize=12)


for i in range(3):
    p[1,i].errorbar(range(len(names[i])), [float(names[i+3][key][1])/names[i+3][key][0] for key in sorted(names[i])], marker='o', yerr=list(sems[i+3]), label=legend[i+3])
    p[1,i].set_xticks(range(len(names[i])))
    p[1,i].set_xticklabels(sorted(names[i]))
    line = stats.linregress(range(len(names[i])), [float(names[i+3][key][1])/names[i+3][key][0] for key in sorted(names[i])])
    x = range(len(names[i]))
    p[1,i].plot(x, [line[0]*x+line[1] for x in range(len(names[i]))], color='lime')
    p[1,0].set_ylabel('P', fontsize=15)
    p[1,i].set_xlabel('$\Delta f$ [Hz]', fontsize=15)
    #p[1,i].grid()
    p[1,i].text(4, .1, legend[i+3], fontsize=15)
    #p[1,i].legend(loc='lower right')
    p[1,i].set_ylim(0,1.1)
    p[1,i].set_xlim(-1, 5)
    p[1,i].tick_params(labelsize=12)
    
    
    
plt.tight_layout()
#plt.savefig('/home/weiss/ba/figures/vergleiche.pdf')


['400.0', '800.0', '1.4', '1.1', '1.01087594032', 'n', '0']
['200.0', '800.0', '1.3', '0.6', '0.30572104454', 'y', '1']
[0.024999999999999998, 0.062737308423084712, 0.079963934178045329, 0.077521709118255289, 0.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 [ ]: