Fraction of inputs

In this code snippet we will take a look at the fraction of inputs to a set of neurons.

First, load all packages and initialise a CATMAID remote instance.

>>> import pymaid
>>> from matplotlib.pyplot import plt
>>> rm = pymaid.CatmaidInstances( 'server_url',
...                               'http_user',
...                               'http_password',
...                               'auth_token')

Next, load some lateral horn neurons and get their connectivity table.

>>> lhns = pymaid.find_neurons(annotations='example_neurons')
>>> cn_table = pymaid.get_partners(lhns, min_size=1)
>>> # Have a look at the table
>>> cn_table.head()

Let’s check fraction of inputs from projection neurons

>>> # Get PNs as (mostly) empty CatmaidNeuronList
>>> pns = pymaid.find_neurons(annotations='uPN right')
>>> # Subset connectivity table by inputs
>>> inputs = cn_table[ cn_table.relation == 'upstream' ]

cn_table and its subset inputs are Pandas DataFrames which come with some neat ways to group data. We will write a small function that sorts neurons into “PNs” and “other” and apply this to the inputs table:

>>> # Generate function that lets us sort the table
>>> def is_PN(x):
...     """ Returns True if PN """
...     if x.skeleton_id in pns.skeleton_id:
...         return 'PN'
...     else:
...         return 'other'
>>> # Sorting is based on the index -> we have to change the index to skeleton IDs
>>> inputs.set_index('skeleton_id', inplace=True, drop=True)
>>> # Now apply function explicitly to the columns that hold connectivity information
>>> grouped = inputs[lhns].groupby(by=is_PN).sum()

In above last line, we grouped by PNs/non-PNs and summed up the number of synapses. Instead of .sum() we can also use e.g. .mean(), .std() or .min().

For now, let’s stick with the sum and do some plotting. Conveniently, Pandas DataFrames also have some very nice wrappers for visualisations:

>>> # Plot bar plots per neuron (notice that we transpose the table first with ".T")
>>> ax = grouped.T.plot(kind='bar')
>>> plt.show()
>>> # Plot a pie chart for fraction across all neurons
>>> ax = grouped.sum(axis=1).plot(kind='pie', autopct='%.2f', figsize=(6,6))
>>> plt.show()