In [1]:
import cPickle
import numpy as np
import matplotlib.pyplot as plt

# PARAMS
log_dir = "/home/sforesti/avakas/scratch/sforestier001/logs/PLAY2017/2017-12-12_18-00-17-play_tol02"
log_dir = "/home/sforesti/avakas/scratch/sforestier001/logs/PLAY2017/2018-02-05_14-38-43-play_toys_small_area"
log_dir = "/home/sforesti/avakas/scratch/sforestier001/logs/PLAY2017/2018-02-09_15-10-49-play"
log_dir = "/home/sforesti/avakas/scratch/sforestier001/logs/PLAY2017/2018-03-01_17-23-42-play"

config_list = ["PC", "C08T02", "C08T20", "C08T100", "C02T02", "C02T20", "C02T100"]

tol = 0.4

data_vocal = {}
for config_name in config_list:
    print config_name
    filename = log_dir + '/results/' + config_name + '_vocal.pickle'
    with open(filename, 'r') as f:
        data_vocal[config_name] = cPickle.load(f)[config_name]


PC
C08T02
C08T20
C08T100
C02T02
C02T20
C02T100

In [2]:
%matplotlib inline
import seaborn as sns
import numpy as np

n_trials = 100

plt.rc('text', usetex=True)
plt.rc('font', family='serif')
n_iter = 100000
iter_ds = 100
trial_list = range(1,n_trials + 1) 
config_name = "PC"

x = [iter_ds*i for i in range(n_iter/iter_ds)]

for trial in [2]:
    human_sounds = data_vocal[config_name][trial]["human_sounds"][:6]   
    print human_sounds
    
    #human_sounds = ["yeo", "iuo", "eou", "eyu", "uye", "oey"]   # Sort for better color rendering 
    plots = []
    print len(data_vocal[config_name][trial]["errors"])
    for hs in human_sounds[:6]:
        p, = plt.plot(x, [data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)], label=hs, lw=3)
        plots.append(p)
        
plt.ylim([0, 1.])       
plt.xlim([0, n_iter])  


plt.xlabel("Time", fontsize=18)
plt.ylabel("Vocal Error", fontsize=18)

#plt.xticks([0, 20000, 40000, 60000, 80000], ["$0$", r"$2\times10^4$", r"$4\times10^4$", r"$6\times10^4$", r"$8\times10^4$"], fontsize = 16)
plt.xticks([0, 20000, 40000, 60000, 80000], ["$0$", "$20000$", "$40000$", "$60000$", "$80000$"], fontsize = 16)
plt.yticks(fontsize = 16)



#pdummy, = plt.plot([0], marker='None',
#           linestyle='None', label='dummy-tophead')

#legend = plt.legend([pdummy, plots[0], plots[1], plots[2], pdummy, plots[3], plots[4], plots[5]],
#              ['Toy names:'] + ["   " + s for s in human_sounds[:3]] + ['Distractors:'] + ["   " + s for s in human_sounds[3:]],
#              ncol=2, frameon=True, fontsize=14) # Two columns, vertical group labels

legend = plt.legend(ncol=2, frameon=True, fontsize=16)

frame = legend.get_frame()
frame.set_facecolor('1.')
frame.set_edgecolor('0.')

plt.plot((0, n_iter), (tol, tol), 'k--', lw=2)

plt.savefig('../figs/fig_vocal_errors_example.pdf', format='pdf', bbox_inches='tight')


['eyu', 'uoe', 'euo', 'yui', 'ioe', 'eyo']
1009

In [3]:
for trial in trial_list:
    human_sounds = data_vocal[config_name][trial]["human_sounds"]    
    if data_vocal[config_name][trial]["errors"][-1][human_sounds[0]] > 0.4 or data_vocal[config_name][trial]["errors"][-1][human_sounds[1]] > 0.4 or data_vocal[config_name][trial]["errors"][-1][human_sounds[0]] > 0.4:
        min_hs = 0
        min_error = 1
        for i in range(6):
            if data_vocal[config_name][trial]["errors"][-1][human_sounds[i]] < min_error:
                min_error = data_vocal[config_name][trial]["errors"][-1][human_sounds[0]]
                min_hs = i
        if min_hs < 3:
            print trial


1
3
10
13
22
27
28
34
40
45
50

In [3]:
ee_list_s = []
ee_list_ns = []

for trial in trial_list:
    if data_vocal[config_name][trial].has_key("human_sounds"):
        human_sounds = data_vocal[config_name][trial]["human_sounds"]    
        for hs in human_sounds[:3]:
            ee_list_s += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]

        for hs in human_sounds[3:]:
            ee_list_ns += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]
        
        
x = [iter_ds*i for i in range(n_iter/iter_ds)]
plt.errorbar(x, np.mean(ee_list_s, axis=0)[:n_iter/iter_ds], np.std(ee_list_s, axis=0)[:n_iter/iter_ds], label="toy names", lw=2, errorevery=50)
plt.errorbar(x, np.mean(ee_list_ns, axis=0)[:n_iter/iter_ds], np.std(ee_list_ns, axis=0)[:n_iter/iter_ds], label="distractors", lw=2, errorevery=50)

plt.xlabel("Time", fontsize=20)
plt.ylabel("Vocal Error", fontsize=20)
plt.ylim([0, 0.7])       
plt.xlim([0, n_iter])  
plt.plot((0, n_iter), (tol, tol), 'k--', lw=2)
legend=plt.legend(frameon=True, fontsize=20)
frame = legend.get_frame()
frame.set_facecolor('1.')
frame.set_edgecolor('0.')



In [8]:
len(data_vocal["PC"][1]['errors'])


Out[8]:
809

In [4]:
def vocal_error_evolution(config_name, n_trials):


    ta = 500
    tb = 50
    var="std"

    import numpy as np
    import seaborn as sns
    import brewer2mpl
    bmap = brewer2mpl.get_map('Dark2', 'qualitative', 4)
    colors = bmap.mpl_colors

    def time_limit(error_evolution):
        tl = len(error_evolution)-1
        while tl > 0 and error_evolution[tl] < tol:
            tl -= 1
        return tl

    def synchro(ee_list):
        l = []
        for ee in ee_list:
            tl_ee = time_limit(ee)
            if tl_ee < n_iter/iter_ds-ta and tl_ee > tb:
                l += [ee[tl_ee-tb:tl_ee+ta]]
        return l



    ee_list_s = []
    ee_list_ns = []

    for trial in range(1, n_trials + 1):
        if data_vocal[config_name][trial].has_key("human_sounds"):
            human_sounds = data_vocal[config_name][trial]["human_sounds"]    
            for hs in human_sounds[:3]:
                ee_list_s += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]

            for hs in human_sounds[3:]:
                ee_list_ns += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]

    ee_s_synchro = synchro(ee_list_s)
    ee_ns_synchro = synchro(ee_list_ns)

    print len(ee_s_synchro)
    print len(ee_ns_synchro)


    x = [iter_ds*(i - tb) for i in range(ta+tb)]

    y = np.percentile(ee_s_synchro, 50, axis=0)
    #error = np.std(ee_s_synchro, axis=0)
    plt.plot(x, y, label="Toy Names", lw=2, color=colors[1])
    plt.fill_between(x, np.percentile(ee_s_synchro, 25, axis=0), np.percentile(ee_s_synchro, 75, axis=0), color=colors[1], alpha=0.2)
    #plt.plot(x, np.percentile(ee_s_synchro, 75, axis=0), color=colors[1], alpha=0.25)
    #plt.plot(x, np.percentile(ee_s_synchro, 25, axis=0), color=colors[1], alpha=0.25)

    y = np.median(ee_ns_synchro, axis=0)
    #error = np.std(ee_ns_synchro, axis=0)
    plt.plot(x, y, label="Distractors", lw=2, color=colors[2])
    plt.fill_between(x, np.percentile(ee_ns_synchro, 25, axis=0), np.percentile(ee_ns_synchro, 75, axis=0), color=colors[2], alpha=0.2)
    #plt.plot(x, np.percentile(ee_ns_synchro, 75, axis=0), color=colors[2], alpha=0.25, lw=2)
    #plt.plot(x, np.percentile(ee_ns_synchro, 25, axis=0), color=colors[2], alpha=0.25, lw=2)

    print "Avg diff", abs(np.mean(ee_s_synchro, axis=0)[-1] - np.mean(ee_ns_synchro, axis=0)[-1])
    print "Std", np.std(ee_s_synchro, axis=0)[-1], np.std(ee_ns_synchro, axis=0)[-1]


    plt.rc('text', usetex=True)
    plt.rc('font', family='serif')

    plt.xlabel("Time after recognition", fontsize=16)
    plt.ylabel("Vocal Error", fontsize=16)
    plt.ylim([0, 1])       
    plt.xlim([-iter_ds*tb, iter_ds*ta])  
    plt.plot((-iter_ds*tb, iter_ds*ta), (tol, tol), 'k--', lw=2)
    legend = plt.legend(frameon=True, fontsize=16)

    plt.xticks(fontsize = 14)
    plt.yticks(fontsize = 14)

    frame = legend.get_frame()
    frame.set_facecolor('1.')
    frame.set_edgecolor('0.')

    plt.savefig('../figs/fig_vocal_errors_' + config_name.replace(".", "") + '.pdf', format='pdf', bbox_inches='tight')

In [12]:
vocal_error_evolution("PC", 100)


27
440
Avg diff 0.0536346883702
Std 0.061678539548 0.040695597138

In [9]:
vocal_error_evolution("C08T100", 50)


14
257
Avg diff 0.0566380124612
Std 0.0653456487758 0.0386926119864

In [8]:
vocal_error_evolution("C03T05", 50)


14
282
Avg diff 0.0885840015331
Std 0.0370787022191 0.0457890902673

In [22]:
import seaborn as sns
from scipy import stats
import numpy as np


plt.rc('text', usetex=True)
plt.rc('font', family='serif')

sns.distplot([ee[-1] for ee in ee_list_s], bins=np.arange(0., 1., 0.025), color=colors[1], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Toy Names")
sns.distplot([ee[-1] for ee in ee_list_ns], bins=np.arange(0., 1., 0.025), color=colors[2], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Distractors")
legend = plt.legend(frameon=True, fontsize=14)
plt.xlabel("Vocal error", fontsize=16)
plt.ylabel("Density", fontsize=16)
plt.plot((tol, tol), (0, 5), 'k--', lw=2)

plt.xticks(fontsize = 16)
plt.yticks(fontsize = 16)

frame = legend.get_frame()
frame.set_facecolor('1.')
frame.set_edgecolor('0.')

print np.median([ee[-1] for ee in ee_list_s])
print np.median([ee[-1] for ee in ee_list_ns])

print "Data points:", len(ee_list_s), "per condition"

plt.savefig('../figs/fig_vocal_errors_distribution.pdf', format='pdf', bbox_inches='tight')


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-22-3fafacce1014> in <module>()
      7 plt.rc('font', family='serif')
      8 
----> 9 sns.distplot([ee[-1] for ee in ee_list_s], bins=np.arange(0., 1., 0.025), color=colors[1], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Toy Names")
     10 sns.distplot([ee[-1] for ee in ee_list_ns], bins=np.arange(0., 1., 0.025), color=colors[2], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Distractors")
     11 legend = plt.legend(frameon=True, fontsize=14)

NameError: name 'colors' is not defined

In [ ]:
# STATS
import scipy

data1 = [ee[-1] for ee in ee_list_s]
data2 = [ee[-1] for ee in ee_list_ns]

z, p = scipy.stats.mannwhitneyu(data1, data2)
p_value = p * 2
print p_value

In [ ]:
n_under = len([error for error in data1 + data2 if error < 0.4])
print n_under
print n_under / float(len(data1) + len(data2))

In [10]:
def vocal_error_distribution(config_name, n_trials):

    trial_list = range(1, n_trials + 1)
    n_iter = 80000
    iter_ds = 100

    %matplotlib inline
    import seaborn as sns
    from scipy import stats
    import numpy as np

    import brewer2mpl
    bmap = brewer2mpl.get_map('Dark2', 'qualitative', 4)
    colors = bmap.mpl_colors

    plt.rc('text', usetex=True)
    plt.rc('font', family='serif')



    ee_list_s = []
    ee_list_ns = []

    for trial in trial_list:
        if data_vocal[config_name][trial].has_key("human_sounds"):
            human_sounds = data_vocal[config_name][trial]["human_sounds"]    
            for hs in human_sounds[:3]:
                ee_list_s += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]

            for hs in human_sounds[3:]:
                ee_list_ns += [[data_vocal[config_name][trial]["errors"][i][hs] for i in range(n_iter/iter_ds)]]



    sns.distplot([ee[-1] for ee in ee_list_s], bins=np.arange(0., 1., 0.025), color=colors[1], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Toy Names")
    sns.distplot([ee[-1] for ee in ee_list_ns], bins=np.arange(0., 1., 0.025), color=colors[2], hist_kws={'edgecolor':'gray'}, kde_kws={"lw":3}, label="Distractors")
    legend = plt.legend(frameon=True, fontsize=14)
    plt.xlabel("Vocal error", fontsize=16)
    plt.ylabel("Density", fontsize=16)
    
    plt.plot((tol, tol), (0, 4.5), 'k--', lw=2)

    plt.xlim([0, 0.9])
    plt.ylim([0, 5])
    plt.xticks(fontsize = 14)
    plt.yticks([0, 1, 2, 3, 4], fontsize = 14)

    frame = legend.get_frame()
    frame.set_facecolor('1.')
    frame.set_edgecolor('0.')


    print "# Toy names:", len(ee_list_s)
    print "# Distractors:", len(ee_list_ns)
    
    print "# Toy names median error:", np.median([ee[-1] for ee in ee_list_s])
    print "# Distractors median error:", np.median([ee[-1] for ee in ee_list_ns])
    print "# Toy names mean error:", np.mean([ee[-1] for ee in ee_list_s])
    print "# Distractors mean error:", np.mean([ee[-1] for ee in ee_list_ns])
    
    plt.savefig('../figs/fig_vocal_errors_distribution_' + config_name.replace(".", "") + '.pdf', format='pdf', bbox_inches='tight')
    
    return np.median([ee[-1] for ee in ee_list_s]), np.percentile([ee[-1] for ee in ee_list_s], 25), np.percentile([ee[-1] for ee in ee_list_s], 75)

In [11]:
med_05, q25_05, q75_05 = vocal_error_distribution("PC", 100)


# Toy names: 291
# Distractors: 5529
# Toy names median error: 0.513406048679
# Distractors median error: 0.526327568069
# Toy names mean error: 0.506189466351
# Distractors mean error: 0.521009812735

In [13]:
med_075, q25_075, q75_075 = vocal_error_distribution("C08T20", 100)


# Toy names: 294
# Distractors: 5586
# Toy names median error: 0.529419243448
# Distractors median error: 0.526405511935
# Toy names mean error: 0.51067611577
# Distractors mean error: 0.520783069415

In [14]:
med_1, q25_1, q75_1 = vocal_error_distribution("C02T02", 50)


# Toy names: 144
# Distractors: 2736
# Toy names median error: 0.51530965305
# Distractors median error: 0.522691630007
# Toy names mean error: 0.498010302288
# Distractors mean error: 0.519342837712

In [13]:
med_15, q25_15, q75_15 = vocal_error_distribution("C08T05", 50)


# Toy names: 147
# Distractors: 2793
# Toy names median error: 0.465197129377
# Distractors median error: 0.471869759063
# Toy names mean error: 0.44095892712
# Distractors mean error: 0.469271957612

In [14]:
med_2, q25_2, q75_2 = vocal_error_distribution("C08T2", 50)


# Toy names: 147
# Distractors: 2793
# Toy names median error: 0.464295950424
# Distractors median error: 0.468347864615
# Toy names mean error: 0.439984238767
# Distractors mean error: 0.467862331606

In [ ]:


In [ ]: