In [1]:
drive_path = 'c:/'
import numpy as np
import pandas as pd
import os
import sys
import matplotlib.pyplot as plt
from scipy.stats import ks_2samp
from scipy.stats import anderson_ksamp
from scipy.stats import kruskal
from scipy.stats import variation
%matplotlib
import seaborn as sns
from scipy.stats import zscore
from scipy.stats import nanmean
from scipy.stats import nanstd


Using matplotlib backend: Qt4Agg

In [2]:
filename='C:\Users\Annie\Documents\Data\Ca_Imaging\GoodFiles\\fullpeak.csv'
comp=pd.read_csv(filename)
comp_sorted=comp.reindex_axis(comp.mean().sort_values().index, axis=1)
comp_labels=pd.DataFrame(comp.Mouse)
comp_group=pd.DataFrame(comp.Group)
tmp=[comp_group,comp_labels,comp_sorted]
composite_full=pd.concat(tmp,axis=1)
cfull=pd.melt(composite_full,['Group','Mouse'],var_name="Odor")
# cfull['Mouse'] = cfull['Mouse'].apply(lambda x: x.split('_')[0])
# composite_full['Mouse']=composite_full['Mouse'].apply(lambda x:x.split('_')[0])

In [3]:
groupcolors={'Control':'r','Mint':'g','Hexanal':'b'};

Count number of excitatory and inhibitory events per cell


In [9]:
# for x in composite_full.index:
EI=pd.DataFrame([])
for x in composite_full.index:
    a=0
    b=0
    for value in composite_full.iloc[x][2:]:
        if value>0:
            a=a+1
        elif value<0:
            b=b+1|
    c=pd.DataFrame(composite_full.iloc[x][['Group','Mouse']]).T
    c=c.reset_index(drop=True)
    d=pd.concat([c,pd.DataFrame({'E':[a]}),pd.DataFrame({'I':[b]})],axis=1)
    EI=EI.append(d)

In [10]:
sns.set(style="white")
sns.set_context('poster')
# Initialize the matplotlib figure
# f, ax = plt.subplots(figsize=(3, 4))
sns.set_color_codes("pastel")
sns.barplot(x='Group', y="E", data=EI,
            label="E", palette=groupcolors);
sns.despine()

sns.set_color_codes("muted")
sns.barplot(x="Group", y="I", data=EI,
            label="I", palette=groupcolors);

# Add a legend and informative axis label
# ax.legend(ncol=2, loc="upper right", frameon=True,fontsize=30)
# ax.set(xlim=(-1, 3), ylabel="Odor number",
#        xlabel="Group")
sns.despine(left=True, bottom=True)
plt.ylabel('Odor Number', fontsize=30);
plt.title('Responses', fontsize=36);
plt.xlabel('Odor', fontsize=30);
plt.xticks(fontsize=24);
plt.yticks(fontsize=24);
plt.legend(ncol=2,loc='upper right',frameon=False);

Separate E/I dataframes


In [4]:
#Make separate excitatory and inhibitory dataframes
mindf=pd.DataFrame([])
maxdf=pd.DataFrame([])
zdf=pd.DataFrame([])
for x in cfull.index:
    if cfull.value[x]>0:
        a=pd.DataFrame(cfull.iloc[x]).T
        maxdf=maxdf.append(a,ignore_index=True)
    elif cfull.value[x]<0:
        a=pd.DataFrame(cfull.iloc[x]).T
        mindf=mindf.append(a,ignore_index=True)
    else:
        a=pd.DataFrame(cfull.iloc[x]).T
        zdf=zdf.append(a,ignore_index=True)

In [5]:
maxdf


Out[5]:
Group Mouse Odor value
0 Control 160321_1 MS01 0.0156712
1 Control 160321_1 MS01 0.146939
2 Control 160321_1 MS01 0.268299
3 Control 160321_1 MS01 0.111727
4 Control 160321_1 MS01 0.182874
5 Control 160321_1 MS01 0.086948
6 Control 160321_1 MS01 0.10626
7 Control 160321_1 MS01 0.154366
8 Control 160321_1 MS01 0.0208285
9 Control 160321_1 MS01 0.0911923
10 Control 160321_1 MS01 0.369279
11 Control 160321_1 MS01 0.378874
12 Control 160321_1 MS01 0.0808621
13 Control 160321_1 MS01 0.117418
14 Control 160321_1 MS01 0.0652251
15 Control 160321_2 MS01 0.10832
16 Control 160321_2 MS01 0.179008
17 Control 160321_2 MS01 0.116572
18 Control 160321_2 MS01 0.191554
19 Control 160321_2 MS01 0.203699
20 Control 160321_2 MS01 0.073796
21 Control 160321_2 MS01 0.117774
22 Control 160321_2 MS01 0.146185
23 Control 160321_2 MS01 0.114494
24 Control 160321_2 MS01 0.215789
25 Control 160321_2 MS01 0.188919
26 Control 160321_2 MS01 0.157538
27 Control 160321_2 MS01 0.0952496
28 Control 160321_2 MS01 0.290834
29 Control 160321_2 MS01 0.143763
... ... ... ... ...
11576 Hexanal 160626_1 EB 0.322258
11577 Hexanal 160626_1 EB 0.910795
11578 Hexanal 160626_1 EB 1.24341
11579 Hexanal 160626_1 EB 1.02962
11580 Hexanal 160626_2 EB 2.12934
11581 Hexanal 160626_2 EB 2.52637
11582 Hexanal 160626_2 EB 2.78749
11583 Hexanal 160626_2 EB 2.87208
11584 Hexanal 160626_2 EB 2.62394
11585 Hexanal 160626_2 EB 3.14143
11586 Hexanal 160626_2 EB 3.82647
11587 Hexanal 160626_2 EB 3.41534
11588 Hexanal 160626_2 EB 4.02052
11589 Hexanal 160626_2 EB 3.5751
11590 Hexanal 160626_2 EB 3.25669
11591 Hexanal 160626_2 EB 2.49753
11592 Hexanal 160626_2 EB 3.09135
11593 Hexanal 160626_2 EB 2.89709
11594 Hexanal 160626_2 EB 3.00285
11595 Hexanal 160626_2 EB 1.64441
11596 Hexanal 160626_2 EB 2.30101
11597 Hexanal 160626_2 EB 3.71711
11598 Hexanal 160626_2 EB 3.13533
11599 Hexanal 160626_2 EB 2.55585
11600 Hexanal 160626_2 EB 2.77863
11601 Hexanal 160626_2 EB 3.68755
11602 Hexanal 160626_2 EB 4.04924
11603 Hexanal 160626_2 EB 4.30655
11604 Hexanal 160626_2 EB 3.4347
11605 Hexanal 160626_2 EB 3.63454

11606 rows × 4 columns


In [11]:
len(maxdf)


Out[11]:
11606

In [52]:
#Plot Excitatory by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=maxdf[['Group','Odor','value']]);
sns.despine()
plt.ylabel('Integral', fontsize=48);
plt.title('Excitatory responses', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [53]:
#Plot Inhibitory by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=mindf[['Group','Odor','value']]);
sns.despine()
plt.ylabel('Integral', fontsize=48);
plt.title('Inhibitory responses', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [120]:
#All responses
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=mindf[['Group','Odor','value']]);
ax=sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=maxdf[['Group','Odor','value']]);
ax.legend_.remove()
sns.despine()
plt.ylabel('Peak', fontsize=48);
plt.title('All responses', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [8]:
#EI ratio, of number
eibdf=pd.DataFrame([])
for x in maxdf.Group.unique():
    for y in maxdf.Odor.unique():
        a=float(len(mindf[(mindf.Group==x) & (mindf.Odor==y)]['value']))
        b=float(len(maxdf[(maxdf.Group==x) & (maxdf.Odor==y)]['value']))
        EIB=a/b
        eibdf=eibdf.append(pd.DataFrame({'Group':[x],'Odor':[y],'EIB':[EIB]}))

sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
sns.pointplot(x='Odor',y='EIB',hue='Group',palette=groupcolors,data=eibdf);
sns.despine()
plt.ylabel('Inhibition/Excitation Ratio', fontsize=48);
plt.title('Inhibition/Excitation', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [12]:
float(a)/float(b)


Out[12]:
0.07309941520467836

In [ ]:


In [ ]:


In [265]:
#EI balance (comparison of summed I/E)
eibdf=pd.DataFrame([])
for x in maxdf.Group.unique():
    for y in maxdf.Odor.unique():
        a=mindf[(mindf.Group==x) & (mindf.Odor==y)]['value'].sum()
        b=maxdf[(maxdf.Group==x) & (maxdf.Odor==y)]['value'].sum()
        EIB=abs(a/b)
        eibdf=eibdf.append(pd.DataFrame({'Group':[x],'Odor':[y],'EIB':[EIB]}))

sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
sns.pointplot(x='Odor',y='EIB',hue='Group',palette=groupcolors,data=eibdf);
sns.despine()
plt.ylabel('EIB', fontsize=48);
plt.title('Excitation-Inhibition Balance', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [266]:
ks_2samp(eibdf[(eibdf.Group=='Control')]['EIB'],eibdf[(eibdf.Group=='Mint')]['EIB'])


Out[266]:
Ks_2sampResult(statistic=1.0, pvalue=1.0054168109701315e-07)

In [270]:
zscores=pd.DataFrame([])
df=maxdf
for x in df.Mouse.unique():
    tmp=pd.DataFrame([])
    for y in df.Odor.unique():
        v=df[(df.Mouse==x)& (df.Odor==y)]['value']
        a=pd.DataFrame((v - np.nanmean(v)) / np.nanstd(v))
        a=pd.concat([df[(df.Mouse==x)& (df.Odor==y)][['Group','Mouse','Odor']],a],axis=1)
        tmp=tmp.append(a)
    zscores=zscores.append(tmp)

In [271]:
#Plot everything by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
ax=sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=zscores)
ax.legend_.remove()
sns.despine()
plt.ylabel('Zscore', fontsize=48);
plt.title('Zscore', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [215]:
o='Hexanone'
sns.distplot(zscores[(zscores.Group=='Control')&(zscores.Odor==o)]['value'], hist=False, color="r", kde_kws={"shade": True});
sns.distplot(zscores[(zscores.Group=='Mint')&(zscores.Odor==o)]['value'], hist=False, color="g", kde_kws={"shade": True});
sns.distplot(zscores[(zscores.Group=='Hexanal')&(zscores.Odor==o)]['value'], hist=False, color="b", kde_kws={"shade": True});

In [236]:
kruskal(zscores[(zscores.Group=='Control')&(zscores.Odor==o)]['value'],zscores[(zscores.Group=='Mint')&(zscores.Odor==o)]['value'],zscores[(zscores.Group=='Hexanal')&(zscores.Odor==o)]['value'])


Out[236]:
KruskalResult(statistic=0.0023674242424363001, pvalue=0.99881698818962539)

Mean


In [273]:
means=pd.DataFrame([])
df=maxdf
for x in df.Mouse.unique():
    tmp=pd.DataFrame([])
    for y in df.Odor.unique():
        a=(df[(df.Mouse==x)&(df.Odor==y)]['value']).dropna().mean()
        m=pd.DataFrame({y:[a]})
        tmp=pd.concat([tmp,m],axis=1)
    b=pd.DataFrame({'Mouse':[x]})
    c=pd.DataFrame({'Group':[df[df.Mouse==x]['Group'].iloc[0]]})
#     c=c.reset_index(drop=True)
    tmp=pd.concat([c,tmp],axis=1)
    means=means.append(tmp)
meanmelt=pd.melt(means,"Group",var_name="Odor")
#Plot everything by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
ax=sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=meanmelt)
ax.legend_.remove()
sns.despine()
plt.ylabel('Mean', fontsize=48);
plt.title('Mean', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [323]:
#POINTPLOTS
means=pd.DataFrame([])
df=maxdf
for x in df.Group.unique():
    tmp=pd.DataFrame([])
    for y in df.Odor.unique():
        a=(df[(df.Group==x)&(df.Odor==y)]['value']).dropna().std()
        m=pd.DataFrame({y:[a]})
        tmp=pd.concat([tmp,m],axis=1)
        b=pd.DataFrame({'Group':[x]})
#     c=pd.DataFrame({'Group':[df[df.Mouse==x]['Group'].iloc[0]]})
#     c=c.reset_index(drop=True)
    tmp=pd.concat([b,tmp],axis=1)
    means=means.append(tmp)
meanmelt=pd.melt(means,"Group",var_name="Odor")

sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
ax=sns.pointplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=meanmelt)
ax.legend_.remove()
sns.despine()
plt.ylabel('STD', fontsize=48);
plt.title('STD', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [1]:
#MEDIANS
medians=pd.DataFrame([])
df=mindf
for x in df.Mouse.unique():
    tmp=pd.DataFrame([])
    for y in df.Odor.unique():
        a=df[(df.Mouse==x)&(df.Odor==y)]['value'].dropna().median()
        m=pd.DataFrame({y:[a]})
        tmp=pd.concat([tmp,m],axis=1)
    b=pd.DataFrame({'Mouse':[x]})
    c=pd.DataFrame({'Group':[df[df.Mouse==x]['Group'].iloc[0]]})
#     c=c.reset_index(drop=True)
    tmp=pd.concat([c,tmp],axis=1)
    medians=medians.append(tmp)
medianmelt=pd.melt(medians,"Group",var_name="Odor")
#Plot everything by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
ax=sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=medianmelt)
ax.legend_.remove()
sns.despine()
plt.ylabel('Median', fontsize=48);
plt.title('Median', fontsize=55);
plt.xlabel('Odor', fontsize=48);


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-074570129c54> in <module>()
      1 #MEDIANS
----> 2 medians=pd.DataFrame([])
      3 df=mindf
      4 for x in df.Mouse.unique():
      5     tmp=pd.DataFrame([])

NameError: name 'pd' is not defined

In [276]:
stds=pd.DataFrame([])
df=maxdf
for x in df.Mouse.unique():
    tmp=pd.DataFrame([])
    for y in df.Odor.unique():
        a=df[(df.Mouse==x)&(df.Odor==y)]['value'].dropna().std()
        m=pd.DataFrame({y:[a]})
        tmp=pd.concat([tmp,m],axis=1)
    b=pd.DataFrame({'Mouse':[x]})
    c=pd.DataFrame({'Group':[df[df.Mouse==x]['Group'].iloc[0]]})
#     c=c.reset_index(drop=True)
    tmp=pd.concat([c,tmp],axis=1)
    stds=stds.append(tmp)
stdmelt=pd.melt(stds,"Group",var_name="Odor")
#Plot everything by group
sns.set(style="white", palette="muted", color_codes=True);
sns.set_context("talk", font_scale=1.8);
plt.figure(figsize=(45, 20));
ax=sns.boxplot(x='Odor',y='value',hue='Group',palette=groupcolors,data=stdmelt)
ax.legend_.remove()
sns.despine()
plt.ylabel('STD', fontsize=48);
plt.title('STD', fontsize=55);
plt.xlabel('Odor', fontsize=48);

In [ ]: