diff --git a/advanced_topics/08_fslpy.md b/advanced_topics/08_fslpy.md new file mode 100644 index 0000000000000000000000000000000000000000..024c8cdd61dcfda2d2161417463ea1e0a8c26ea2 --- /dev/null +++ b/advanced_topics/08_fslpy.md @@ -0,0 +1,247 @@ +# `fslpy` + +`fslpy` is a Python library which is built into FSL, and contains a range of +functionality for working with neuroimaging data in an FSL context. + +This practical highlights some of the most useful features provided by +`fslpy`. You may find `fslpy` useful if you are writing Python code to +perform analyses and image processing in conjunction with FSL. + + +> **Note**: `fslpy` is distinct from `fslpython` - `fslpython` is the Python +> environment that is baked into FSL. `fslpy` is a Python library which is +> installed into the `fslpython` environment. + + +* [The `Image` class, and other data types](#the-image-class-and-other-data-types) +* [FSL atlases](#fsl-atlases) +* [The `filetree`](#the-filetree) +* [NIfTI coordinate systems](#nifti-coordinate-systems) +* [Image processing](#image-processing) +* [FSL wrapper functions](#fsl-wrapper-functions) + + +<a class="anchor" id="the-image-class-and-other-data-types"></a> +## The `Image` class, and other data types + + +The `fsl.data.image` module provides the `Image` class, which sits on top of +`nibabel` and contains some handy functionality if you need to work with +coordinate transformations, or do some FSL-specific processing. The `Image` +class provides features such as: + +- Support for NIFTI1, NIFTI2, and ANALYZE image files +- Access to affine transformations between the voxel, FSL and world coordinate + systems +- Ability to load metadata from BIDS sidecar files + +Some simple image processing routines are also provided - these are covered +[below](#image-processing). + + +### Creating images + +It's easy to create an `Image` - you can create one from a file name: + +``` +from fsl.data.image import Image +stddir = op.expandvars('${FSLDIR}/data/standard/') + +# load a FSL image - the file +# suffix is optional, just like +# in real FSL-land! +img = Image(op.join(stddir, 'MNI152_T1_1mm')) +``` + +You can crearte an `Image` from an existing `nibabel` image: + +``` +# load a nibabel image, and +# convert it into an FSL image +nibimg = nib.load(op.join(stddir, 'MNI152_T1_1mm.nii.gz')) +img = Image(nibimg) +`` + +Or you can create an `Image` from a `numpy` array: + +``` +data = np.zeros((100, 100, 100)) +img = Image(data, xform=np.eye(4)) +``` + + + + + +<a class="anchor" id="fsl-atlases"></a> +## FSL atlases + +<a class="anchor" id="the-filetree"></a> +## The `filetree` + +<a class="anchor" id="nifti-coordinate-systems"></a> +## NIfTI coordinate systems + +<a class="anchor" id="image-processing"></a> +## Image processing + +<a class="anchor" id="fsl-wrapper-functions"></a> +## FSL wrapper functions + + + +<a class="anchor" id="nifti-coordinate-systems"></a> +## NIfTI coordinate systems + + + +The `getAffine` method gives you access to affine transformations which can be +used to convert coordinates between the different coordinate systems +associated with an image. Have some MNI coordinates you'd like to convert to +voxels? Easy! + +``` +mnicoords = np.array([[0, 0, 0], + [0, -18, 18]]) + +world2vox = img.getAffine('world', 'voxel') +vox2world = img.getAffine('voxel', 'world') + +# Apply the world->voxel +# affine to the coordinates +voxcoords = (np.dot(world2vox[:3, :3], mnicoords.T)).T + world2vox[:3, 3] + +# The code above is a bit fiddly, so +# instead of figuring it out, you can +# just use the transform() function: +from fsl.transform.affine import transform +voxcoords = transform(mnicoords, world2vox) + +# just to double check, let's transform +# those voxel coordinates back into world +# coordinates +backtomni = transform(voxcoords, vox2world) + +for m, v, b in zip(mnicoords, voxcoords, backtomni): + print(m, '->', v, '->', b) +``` + +> The `Image.getAffine` method can give you transformation matrices +> between any of these coordinate systems: +> +> - `'voxel'`: Image data voxel coordinates +> - `'world'`: mm coordinates, defined by the sform/qform of an image +> - `'fsl'`: The FSL coordinate system, used internally by many FSL tools +> (e.g. FLIRT) + + + +Oh, that example was too easy I hear you say? Try this one on for size. Let's +say we have run FEAT on some task fMRI data, and want to get the MNI +coordinates of the voxel with peak activation. + +> This is what people used to use `Featquery` for, back in the un-enlightened +> days. + + +Let's start by identifying the voxel with the biggest t-statistic: + +``` +featdir = op.join(op.join('05_nifti', 'fmri.feat')) + +# The Image.data attribute returns a +# numpy array containing, well, the +# image data. +tstat1 = Image(op.join(featdir, 'stats', 'tstat1')).data + +# Recall from the numpy practical that +# argmax gives us a 1D index into a +# flattened view of the array. We can +# use the unravel_index function to +# convert it into a 3D index. +peakvox = np.abs(tstat1).argmax() +peakvox = np.unravel_index(peakvox, tstat1.shape) +print('Peak voxel coordinates for tstat1:', peakvox, tstat1[peakvox]) +``` + + +Now that we've got the voxel coordinates in functional space, we need to +transform them into MNI space. FEAT provides a transformation which goes +directly from functional to standard space, in the `reg` directory: + +``` +func2std = np.loadtxt(op.join(featdir, 'reg', 'example_func2standard.mat')) +``` + +But ... wait a minute ... this is a FLIRT matrix! We can't just plug voxel +coordinates into a FLIRT matrix and expect to get sensible results, because +FLIRT works in an internal FSL coordinate system, which is not quite +`'voxel'`, and not quite `'world'`. So we need to do a little more work. +Let's start by loading our functional image, and the MNI152 template (the +source and reference images of our FLIRT matrix): + +``` +func = Image(op.join(featdir, 'reg', 'example_func')) +std = Image(op.expandvars(op.join('$FSLDIR', 'data', 'standard', 'MNI152_T1_2mm'))) +``` + + +Now we can use them to get affines which convert between all of the different +coordinate systems - we're going to combine them into a single uber-affine, +which transforms our functional-space voxels into MNI world coordinates via: + + 1. functional voxels -> FLIRT source space + 2. FLIRT source space -> FLIRT reference space + 3. FLIRT referece space -> MNI world coordinates + + +``` +vox2fsl = func.getAffine('voxel', 'fsl') +fsl2mni = std .getAffine('fsl', 'world') +``` + +Combining two affines into one is just a simple dot-product. There is a +`concat()` function which does this for us, for any number of affines: + +``` +from fsl.transform.affine import concat + +# To combine affines together, we +# have to list them in reverse - +# linear algebra is *weird*. +funcvox2mni = concat(fsl2mni, func2std, vox2fsl) +``` + +So we've now got some voxel coordinates from our functional data, and an affine +to transform into MNI world coordinates. The rest is easy: + +``` +mnicoords = transform(peakvox, funcvox2mni) +print('Peak activation (MNI coordinates):', mnicoords) +``` + + +> Note that in the above example we are only applying a linear transformation +> into MNI space - in reality you would also want to apply your non-linear +> structural-to-standard transformation too. But this is left as an exercise +> for the reader ;). + + +<a class="anchor" id="image-processing"></a> +## Image processing + +Now, it's all well and good to look at t-statistric values and voxel +coordinates and so on and so forth, but let's spice things up a bit and look +at some images. Let's display our peak activation location in MNI space. To +do this, we're going to resample our functional image into + +``` +from IPython.display import Image as Screenshot +!fsleyes render -of screenshot.png -std +``` + + +### (Advanced) Transform coordinates with nonlinear warpfields + + +have to use your own dataset diff --git a/getting_started/01_basics.ipynb b/getting_started/01_basics.ipynb index 11cc06dce3e1220432f84ca70c8907ecb150d461..677b36d559ec4b943240a696cc8fc7b4f8c603a0 100644 --- a/getting_started/01_basics.ipynb +++ b/getting_started/01_basics.ipynb @@ -16,7 +16,17 @@ "(including the text blocks, so you can just move down the document\n", "with shift + enter).\n", "\n", - "It is also possible to _change_ the contents of each code block (these pages are completely interactive) so do experiment with the code you see and try some variations!\n", + "It is also possible to _change_ the contents of each code block (these pages\n", + "are completely interactive) so do experiment with the code you see and try\n", + "some variations!\n", + "\n", + "> **Important**: We are exclusively using Python 3 in FSL - as of FSL 6.0.4 we\n", + "> are using Python 3.7. There are some subtle differences between Python 2 and\n", + "> Python 3, but instead of learning about these differences, it is easier to\n", + "> simply forget that Python 2 exists. When you are googling for Python help,\n", + "> make sure that the pages you find are relevant to Python 3 and *not* Python\n", + "> 2! The official Python docs can be found at https://docs.python.org/3/ (note\n", + "> the _/3/_ at the end!).\n", "\n", "## Contents\n", "\n", @@ -64,17 +74,9 @@ }, { "cell_type": "code", - "execution_count": 130, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = 4\n", "b = 3.6\n", @@ -93,19 +95,9 @@ }, { "cell_type": "code", - "execution_count": 131, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30]\n", - "{'b': 20, 'a': 10}\n", - "4 3.6 abc\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(d)\n", "print(e)\n", @@ -135,17 +127,9 @@ }, { "cell_type": "code", - "execution_count": 132, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "test string :: another test string\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s1 = \"test string\"\n", "s2 = 'another test string'\n", @@ -161,20 +145,9 @@ }, { "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is\n", - "a string over\n", - "multiple lines\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s3 = '''This is\n", "a string over\n", @@ -190,23 +163,16 @@ "<a class=\"anchor\" id=\"Format\"></a>\n", "### Format\n", "\n", - "More interesting strings can be created using the `format` statement, which is very useful in print statements:" + "More interesting strings can be created using the\n", + "[`format`](https://docs.python.org/3/library/string.html#formatstrings)\n", + "statement, which is very useful in print statements:" ] }, { "cell_type": "code", - "execution_count": 134, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The numerical value is 1 and a name is PyTreat\n", - "A name is PyTreat and a number is 1\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "x = 1\n", "y = 'PyTreat'\n", @@ -219,8 +185,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "There are also other options along these lines, but this is the more modern version, although you will see plenty of the other alternatives in \"old\" code (to python coders this means anything written before last week).\n", - "\n", + "Python also supports C-style [`%`\n", + "formatting](https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 1\n", + "y = 'PyTreat'\n", + "s = 'The numerical value is %i and a name is %s' % (x, y)\n", + "print(s)\n", + "print('A name is %s and a number is %i' % (y, x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "<a class=\"anchor\" id=\"String-manipulation\"></a>\n", "### String manipulation\n", "\n", @@ -229,18 +214,9 @@ }, { "cell_type": "code", - "execution_count": 135, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "THIS IS A TEST STRING\n", - "this is a test string\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s = 'This is a Test String'\n", "print(s.upper())\n", @@ -256,17 +232,9 @@ }, { "cell_type": "code", - "execution_count": 136, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is a Better String\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s = 'This is a Test String'\n", "s2 = s.replace('Test', 'Better')\n", @@ -282,17 +250,9 @@ }, { "cell_type": "code", - "execution_count": 137, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is a Test String :: This is a Better String\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s3 = s + ' :: ' + s2\n", "print(s3)" @@ -307,17 +267,9 @@ }, { "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is an example of an example String\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import re\n", "s = 'This is a test of a Test String'\n", @@ -333,23 +285,15 @@ "\n", "For more information on matching and substitutions, look up the regular expression module on the web.\n", "\n", - "Two common and convenient string methods are `strip()` and `split()`. The first will remove any whitespace at the beginning and end of a string:" + "Two common and convenient string methods are `strip()` and `split()`. The\n", + "first will remove any whitespace at the beginning and end of a string:" ] }, { "cell_type": "code", - "execution_count": 139, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "* A very spacy string *\n", - "*A very spacy string*\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s2 = ' A very spacy string '\n", "print('*' + s2 + '*')\n", @@ -365,18 +309,9 @@ }, { "cell_type": "code", - "execution_count": 140, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['This', 'is', 'a', 'test', 'of', 'a', 'Test', 'String']\n", - "['A', 'very', 'spacy', 'string']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(s.split())\n", "print(s2.split())" @@ -391,17 +326,9 @@ }, { "cell_type": "code", - "execution_count": 141, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' This is', ' as you can see ', ' a very weirdly spaced and punctuated string ... ']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "s4 = ' This is, as you can see , a very weirdly spaced and punctuated string ... '\n", "print(s4.split(','))" @@ -411,28 +338,44 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "There are more powerful ways of dealing with this like csv files/strings, which are covered in later practicals, but even this can get you a long way.\n", + "A neat trick, if you want to change the delimiter in some structured data (e.g.\n", + "replace `,` with `\\t`), is to use `split()` in combination with another string\n", + "method, `join()`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "csvdata = 'some,comma,separated,data'\n", + "tsvdata = '\\t'.join(csvdata.split(','))\n", + "tsvdata = tsvdata.replace('comma', 'tab'))\n", + "print('csvdata:', csvdata)\n", + "print('tsvdata:', tsvdata)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more powerful ways of dealing with this like csv files/strings,\n", + "which are covered in later practicals, but even this can get you a long way.\n", "\n", - "> Note that strings in python 3 are _unicode_ so can represent Chinese characters, etc, and is therefore very flexible. However, in general you can just be blissfully ignorant of this fact.\n", + "> Note that strings in python 3 are _unicode_ so can represent Chinese\n", + "> characters, etc, and is therefore very flexible. However, in general you\n", + "> can just be blissfully ignorant of this fact.\n", "\n", - "Strings can be converted to integer or floating-point values by using the `int()` and `float()` calls:" + "Strings can be converted to integer or floating-point values by using the\n", + "`int()` and `float()` calls:" ] }, { "cell_type": "code", - "execution_count": 142, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "232.03\n", - "25.03\n", - "25.03\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "sint='23'\n", "sfp='2.03'\n", @@ -452,8 +395,8 @@ "<a class=\"anchor\" id=\"Tuples-and-lists\"></a>\n", "## Tuples and lists\n", "\n", - "Both tuples and lists are builtin python types and are like vectors, \n", - "but for numerical vectors and arrays it is much better to use _numpy_\n", + "Both tuples and lists are builtin python types and are like vectors,\n", + "but for numerical vectors and arrays it is much better to use `numpy`\n", "arrays (or matrices), which are covered in a later tutorial.\n", "\n", "A tuple is like a list or a vector, but with less flexibility than a full list (tuples are immutable), however anything can be stored in either a list or tuple, without any consistency being required. Tuples are defined using round brackets and lists are defined using square brackets. For example:" @@ -461,18 +404,9 @@ }, { "cell_type": "code", - "execution_count": 143, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(3, 7.6, 'str')\n", - "[1, 'mj', -5.4]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "xtuple = (3, 7.6, 'str')\n", "xlist = [1, 'mj', -5.4]\n", @@ -489,18 +423,9 @@ }, { "cell_type": "code", - "execution_count": 144, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "x2 is: ((3, 7.6, 'str'), [1, 'mj', -5.4])\n", - "x3 is: [(3, 7.6, 'str'), [1, 'mj', -5.4]]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "x2 = (xtuple, xlist)\n", "x3 = [xtuple, xlist]\n", @@ -520,17 +445,9 @@ }, { "cell_type": "code", - "execution_count": 145, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30, 70, 80]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [10, 20, 30]\n", "a = a + [70]\n", @@ -542,7 +459,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Similar things can be done for tuples, except for the last one: that is, a += (80) as a tuple is immutable so cannot be changed like this. \n", + "> Similar things can be done for tuples, except for the last one: that is,\n", + "> `a += (80)` as a tuple is immutable so cannot be changed like this.\n", "\n", "<a class=\"anchor\" id=\"Indexing\"></a>\n", "### Indexing\n", @@ -552,17 +470,9 @@ }, { "cell_type": "code", - "execution_count": 146, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "d = [10, 20, 30]\n", "print(d[1])" @@ -578,18 +488,9 @@ }, { "cell_type": "code", - "execution_count": 147, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10\n", - "30\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [10, 20, 30, 40, 50, 60]\n", "print(a[0])\n", @@ -600,23 +501,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Indices naturally run from 0 to N-1, _but_ negative numbers can be used to reference from the end (circular wrap-around)." + "Indices naturally run from 0 to N-1, _but_ negative numbers can be used to\n", + "reference from the end (circular wrap-around)." ] }, { "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "60\n", - "10\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[-1])\n", "print(a[-6])" @@ -631,42 +524,18 @@ }, { "cell_type": "code", - "execution_count": 149, - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m<ipython-input-149-f4cf4536701c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m: list index out of range" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[-7])" ] }, { "cell_type": "code", - "execution_count": 150, - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m<ipython-input-150-52d95fbe5286>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m: list index out of range" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[6])" ] @@ -680,17 +549,9 @@ }, { "cell_type": "code", - "execution_count": 151, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(len(a))" ] @@ -704,18 +565,9 @@ }, { "cell_type": "code", - "execution_count": 152, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "20\n", - "40\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "b = [[10, 20, 30], [40, 50, 60]]\n", "print(b[0][1])\n", @@ -739,17 +591,9 @@ }, { "cell_type": "code", - "execution_count": 153, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[0:3])" ] @@ -766,18 +610,9 @@ }, { "cell_type": "code", - "execution_count": 154, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30]\n", - "[20, 30]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [10, 20, 30, 40, 50, 60]\n", "print(a[0:3]) # same as a(1:3) in MATLAB\n", @@ -791,26 +626,14 @@ "> _*Pitfall:*_\n", ">\n", "> Unlike in MATLAB, you cannot use a list as indices instead of an\n", - "> integer or a slice (although these can be done in _numpy_)." + "> integer or a slice (although these can be done in `numpy`)." ] }, { "cell_type": "code", - "execution_count": 155, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "list indices must be integers or slices, not list", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m<ipython-input-155-aad7915ae3d8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not list" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "b = [3, 4]\n", "print(a[b])" @@ -825,19 +648,9 @@ }, { "cell_type": "code", - "execution_count": 156, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30]\n", - "[20, 30, 40, 50, 60]\n", - "[10, 20, 30, 40, 50]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[:3])\n", "print(a[1:])\n", @@ -855,19 +668,9 @@ }, { "cell_type": "code", - "execution_count": 157, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 30]\n", - "[10, 30, 50]\n", - "[60, 50, 40, 30, 20, 10]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(a[0:4:2])\n", "print(a[::2])\n", @@ -889,17 +692,9 @@ }, { "cell_type": "code", - "execution_count": 158, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30, 10, 20, 30, 10, 20, 30, 10, 20, 30]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "d = [10, 20, 30]\n", "print(d * 4)" @@ -914,21 +709,9 @@ }, { "cell_type": "code", - "execution_count": 159, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[10, 20, 30, 40]\n", - "[10, 20, 30, 40, 50, 60]\n", - "[10, 20, 30, 40, 50, 60, 70, 80]\n", - "[10, 30, 40, 50, 60, 70, 80]\n", - "[30, 40, 50, 60, 70, 80]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "d.append(40)\n", "print(d)\n", @@ -954,19 +737,9 @@ }, { "cell_type": "code", - "execution_count": 160, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10\n", - "20\n", - "30\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "d = [10, 20, 30]\n", "for x in d:\n", @@ -987,134 +760,9 @@ }, { "cell_type": "code", - "execution_count": 161, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on list object:\n", - "\n", - "class list(object)\n", - " | list() -> new empty list\n", - " | list(iterable) -> new list initialized from iterable's items\n", - " | \n", - " | Methods defined here:\n", - " | \n", - " | __add__(self, value, /)\n", - " | Return self+value.\n", - " | \n", - " | __contains__(self, key, /)\n", - " | Return key in self.\n", - " | \n", - " | __delitem__(self, key, /)\n", - " | Delete self[key].\n", - " | \n", - " | __eq__(self, value, /)\n", - " | Return self==value.\n", - " | \n", - " | __ge__(self, value, /)\n", - " | Return self>=value.\n", - " | \n", - " | __getattribute__(self, name, /)\n", - " | Return getattr(self, name).\n", - " | \n", - " | __getitem__(...)\n", - " | x.__getitem__(y) <==> x[y]\n", - " | \n", - " | __gt__(self, value, /)\n", - " | Return self>value.\n", - " | \n", - " | __iadd__(self, value, /)\n", - " | Implement self+=value.\n", - " | \n", - " | __imul__(self, value, /)\n", - " | Implement self*=value.\n", - " | \n", - " | __init__(self, /, *args, **kwargs)\n", - " | Initialize self. See help(type(self)) for accurate signature.\n", - " | \n", - " | __iter__(self, /)\n", - " | Implement iter(self).\n", - " | \n", - " | __le__(self, value, /)\n", - " | Return self<=value.\n", - " | \n", - " | __len__(self, /)\n", - " | Return len(self).\n", - " | \n", - " | __lt__(self, value, /)\n", - " | Return self<value.\n", - " | \n", - " | __mul__(self, value, /)\n", - " | Return self*value.n\n", - " | \n", - " | __ne__(self, value, /)\n", - " | Return self!=value.\n", - " | \n", - " | __new__(*args, **kwargs) from builtins.type\n", - " | Create and return a new object. See help(type) for accurate signature.\n", - " | \n", - " | __repr__(self, /)\n", - " | Return repr(self).\n", - " | \n", - " | __reversed__(...)\n", - " | L.__reversed__() -- return a reverse iterator over the list\n", - " | \n", - " | __rmul__(self, value, /)\n", - " | Return self*value.\n", - " | \n", - " | __setitem__(self, key, value, /)\n", - " | Set self[key] to value.\n", - " | \n", - " | __sizeof__(...)\n", - " | L.__sizeof__() -- size of L in memory, in bytes\n", - " | \n", - " | append(...)\n", - " | L.append(object) -> None -- append object to end\n", - " | \n", - " | clear(...)\n", - " | L.clear() -> None -- remove all items from L\n", - " | \n", - " | copy(...)\n", - " | L.copy() -> list -- a shallow copy of L\n", - " | \n", - " | count(...)\n", - " | L.count(value) -> integer -- return number of occurrences of value\n", - " | \n", - " | extend(...)\n", - " | L.extend(iterable) -> None -- extend list by appending elements from the iterable\n", - " | \n", - " | index(...)\n", - " | L.index(value, [start, [stop]]) -> integer -- return first index of value.\n", - " | Raises ValueError if the value is not present.\n", - " | \n", - " | insert(...)\n", - " | L.insert(index, object) -- insert object before index\n", - " | \n", - " | pop(...)\n", - " | L.pop([index]) -> item -- remove and return item at index (default last).\n", - " | Raises IndexError if list is empty or index is out of range.\n", - " | \n", - " | remove(...)\n", - " | L.remove(value) -> None -- remove first occurrence of value.\n", - " | Raises ValueError if the value is not present.\n", - " | \n", - " | reverse(...)\n", - " | L.reverse() -- reverse *IN PLACE*\n", - " | \n", - " | sort(...)\n", - " | L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*\n", - " | \n", - " | ----------------------------------------------------------------------\n", - " | Data and other attributes defined here:\n", - " | \n", - " | __hash__ = None\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "help(d)" ] @@ -1128,64 +776,9 @@ }, { "cell_type": "code", - "execution_count": 162, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['__add__',\n", - " '__class__',\n", - " '__contains__',\n", - " '__delattr__',\n", - " '__delitem__',\n", - " '__dir__',\n", - " '__doc__',\n", - " '__eq__',\n", - " '__format__',\n", - " '__ge__',\n", - " '__getattribute__',\n", - " '__getitem__',\n", - " '__gt__',\n", - " '__hash__',\n", - " '__iadd__',\n", - " '__imul__',\n", - " '__init__',\n", - " '__iter__',\n", - " '__le__',\n", - " '__len__',\n", - " '__lt__',\n", - " '__mul__',\n", - " '__ne__',\n", - " '__new__',\n", - " '__reduce__',\n", - " '__reduce_ex__',\n", - " '__repr__',\n", - " '__reversed__',\n", - " '__rmul__',\n", - " '__setattr__',\n", - " '__setitem__',\n", - " '__sizeof__',\n", - " '__str__',\n", - " '__subclasshook__',\n", - " 'append',\n", - " 'clear',\n", - " 'copy',\n", - " 'count',\n", - " 'extend',\n", - " 'index',\n", - " 'insert',\n", - " 'pop',\n", - " 'remove',\n", - " 'reverse',\n", - " 'sort']" - ] - }, - "execution_count": 162, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "dir(d)" ] @@ -1194,7 +787,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Note that google is often more helpful! At least, as long as you find pages relating to the right version of python - we use python 3 for FSL, so check that what you find is appropriate for that.\n", + "> Note that google is often more helpful! At least, as long as you find pages\n", + "> relating to Python 3 - Python 2 is no longer supported, but there is still\n", + "> lots of information about it on the internet, so be careful!\n", "\n", "---\n", "\n", @@ -1206,20 +801,9 @@ }, { "cell_type": "code", - "execution_count": 163, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "dict_keys(['b', 'a'])\n", - "dict_values([20, 10])\n", - "10\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "e = {'a' : 10, 'b': 20}\n", "print(len(e))\n", @@ -1244,17 +828,9 @@ }, { "cell_type": "code", - "execution_count": 164, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'b': 20, 'a': 10, 'c': 555}\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "e['c'] = 555 # just like in Biobank! ;)\n", "print(e)" @@ -1272,18 +848,9 @@ }, { "cell_type": "code", - "execution_count": 165, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'a': 10, 'c': 555}\n", - "{'a': 10}\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "e.pop('b')\n", "print(e)\n", @@ -1303,19 +870,9 @@ }, { "cell_type": "code", - "execution_count": 166, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('b', 20)\n", - "('a', 10)\n", - "('c', 555)\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "e = {'a' : 10, 'b': 20, 'c':555}\n", "for k, v in e.items():\n", @@ -1333,19 +890,9 @@ }, { "cell_type": "code", - "execution_count": 167, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('b', 20)\n", - "('a', 10)\n", - "('c', 555)\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "for k in e:\n", " print((k, e[k]))" @@ -1355,31 +902,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Note that in both cases the order is arbitrary. The `sorted` function can be used if you want keys in a sorted order; e.g. `for k in sorted(e):` ...\n", + "> In older versions of Python 3, there was no guarantee of ordering when using dictionaries.\n", + "> However, a of Python 3.7, dictionaries will remember the order in which items are inserted,\n", + "> and the `keys()`, `values()`, and `items()` methods will return elements in that order.\n", ">\n", - "> There are also [other options](https://docs.python.org/3.5/library/collections.html#collections.OrderedDict) if you want a dictionary with ordering.\n", + "\n", + "> If you want a dictionary with ordering, *and* you want your code to work with\n", + "> Python versions older than 3.7, you can use the\n", + "> [`OrderedDict`](https://docs.python.org/3/library/collections.html#collections.OrderedDict)\n", + "> class.\n", "\n", "---\n", "\n", "<a class=\"anchor\" id=\"Copying-and-references\"></a>\n", - "## Copying and references \n", + "## Copying and references\n", "\n", "In python there are immutable types (e.g. numbers) and mutable types (e.g. lists). The main thing to know is that assignment can sometimes create separate copies and sometimes create references (as in C++). In general, the more complicated types are assigned via references. For example:" ] }, { "cell_type": "code", - "execution_count": 168, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = 7\n", "b = a\n", @@ -1396,17 +941,9 @@ }, { "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[8888]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [7]\n", "b = a\n", @@ -1423,17 +960,9 @@ }, { "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[7, 7]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [7]\n", "b = a * 2\n", @@ -1450,17 +979,9 @@ }, { "cell_type": "code", - "execution_count": 171, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[7]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [7]\n", "b = list(a)\n", @@ -1477,18 +998,9 @@ }, { "cell_type": "code", - "execution_count": 172, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(2, 5, 7)\n", - "[2, 5, 7]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "xt = (2, 5, 7)\n", "xl = list(xt)\n", @@ -1507,24 +1019,9 @@ }, { "cell_type": "code", - "execution_count": 173, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a: [5]\n", - "x: [5, 10]\n", - "a: [5, 10]\n", - "x: [5, 10, 10]\n", - "a: [5, 10]\n", - "return value: [5, 10, 10]\n", - "a: [5, 10]\n", - "b: [5, 10, 10]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def foo1(x):\n", " x.append(10)\n", @@ -1563,7 +1060,11 @@ "<a class=\"anchor\" id=\"Boolean-operators\"></a>\n", "### Boolean operators\n", "\n", - "There is a boolean type in python that can be `True` or `False` (note the capitals). Other values can also be used for True or False (e.g., 1 for True; 0 or None or [] or {} or \"\") although they are not considered 'equal' in the sense that the operator `==` would consider them the same.\n", + "There is a boolean type in python that can be `True` or `False` (note the\n", + "capitals). Other values can also be used for True or False (e.g., `1` for\n", + "`True`; `0` or `None` or `[]` or `{}` or `\"\"` for `False`) although they are\n", + "not considered 'equal' in the sense that the operator `==` would consider them\n", + "the same.\n", "\n", "Relevant boolean and comparison operators include: `not`, `and`, `or`, `==` and `!=`\n", "\n", @@ -1572,21 +1073,9 @@ }, { "cell_type": "code", - "execution_count": 174, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Not a is: False\n", - "Not 1 is: False\n", - "Not 0 is: True\n", - "Not {} is: True\n", - "{}==0 is: False\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = True\n", "print('Not a is:', not a)\n", @@ -1605,19 +1094,9 @@ }, { "cell_type": "code", - "execution_count": 175, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "False\n", - "True\n", - "True\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print('the' in 'a number of words')\n", "print('of' in 'a number of words')\n", @@ -1639,18 +1118,9 @@ }, { "cell_type": "code", - "execution_count": 176, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5890515724950383\n", - "Positive\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import random\n", "a = random.uniform(-1, 1)\n", @@ -1672,17 +1142,9 @@ }, { "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Variable is true, or at least not empty\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a = [] # just one of many examples\n", "if not a:\n", @@ -1693,7 +1155,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This can be useful for functions where a variety of possible input types are being dealt with. \n", + "This can be useful for functions where a variety of possible input types are being dealt with.\n", "\n", "---\n", "\n", @@ -1705,21 +1167,9 @@ }, { "cell_type": "code", - "execution_count": 178, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "is\n", - "more\n", - "than\n", - "1\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "for x in [2, 'is', 'more', 'than', 1]:\n", " print(x)" @@ -1736,23 +1186,9 @@ }, { "cell_type": "code", - "execution_count": 179, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "3\n", - "4\n", - "5\n", - "6\n", - "7\n", - "8\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "for x in range(2, 9):\n", " print(x)" @@ -1769,18 +1205,9 @@ }, { "cell_type": "code", - "execution_count": 180, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4\n", - "7\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "x, y = [4, 7]\n", "print(x)\n", @@ -1796,21 +1223,9 @@ }, { "cell_type": "code", - "execution_count": 181, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('Some', 0), ('set', 1), ('of', 2), ('items', 3)]\n", - "0 Some\n", - "1 set\n", - "2 of\n", - "3 items\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "alist = ['Some', 'set', 'of', 'items']\n", "blist = list(range(len(alist)))\n", @@ -1833,17 +1248,9 @@ }, { "cell_type": "code", - "execution_count": 182, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "34.995996566662235\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import random\n", "n = 0\n", @@ -1881,17 +1288,9 @@ }, { "cell_type": "code", - "execution_count": 183, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.33573141209899227 0.11271558106998338\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import random\n", "x = random.uniform(0, 1)\n", @@ -1911,18 +1310,9 @@ }, { "cell_type": "code", - "execution_count": 184, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n", - "[0, 1, 4, 9, 16, 25, 36, 64, 81]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "v1 = [ x**2 for x in range(10) ]\n", "print(v1)\n", @@ -1959,19 +1349,9 @@ }, { "cell_type": "code", - "execution_count": 185, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(22.360679774997898, 500)\n", - "37.416573867739416\n", - "37.416573867739416\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def myfunc(x, y, z=0):\n", " r2 = x*x + y*y + z*z\n", @@ -2002,17 +1382,9 @@ }, { "cell_type": "code", - "execution_count": 186, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "22.360679774997898 30 60\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def myfunc(x, y, z=0, flag=''):\n", " if flag=='L1':\n", @@ -2041,7 +1413,7 @@ "Let's say you are given a single string with comma separated elements\n", "that represent filenames and ID codes: e.g., `/vols/Data/pytreat/AAC, 165873, /vols/Data/pytreat/AAG, 170285, ...`\n", "\n", - "Write some code to do the following: \n", + "Write some code to do the following:\n", " * separate out the filenames and ID codes into separate lists (ID's\n", " should be numerical values, not strings) - you may need several steps for this\n", " * loop over the two and generate a _string_ that could be used to\n", @@ -2064,25 +1436,7 @@ ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/getting_started/01_basics.md b/getting_started/01_basics.md index 9c5928de0ac64d057b56057096881f180d495089..ac9372c7e12bd688b410200a76fe65eefdc69517 100644 --- a/getting_started/01_basics.md +++ b/getting_started/01_basics.md @@ -10,7 +10,17 @@ explanations. You can run each block by using _shift + enter_ (including the text blocks, so you can just move down the document with shift + enter). -It is also possible to _change_ the contents of each code block (these pages are completely interactive) so do experiment with the code you see and try some variations! +It is also possible to _change_ the contents of each code block (these pages +are completely interactive) so do experiment with the code you see and try +some variations! + +> **Important**: We are exclusively using Python 3 in FSL - as of FSL 6.0.4 we +> are using Python 3.7. There are some subtle differences between Python 2 and +> Python 3, but instead of learning about these differences, it is easier to +> simply forget that Python 2 exists. When you are googling for Python help, +> make sure that the pages you find are relevant to Python 3 and *not* Python +> 2! The official Python docs can be found at https://docs.python.org/3/ (note +> the _/3/_ at the end!). ## Contents @@ -104,7 +114,10 @@ print(s3) <a class="anchor" id="Format"></a> ### Format -More interesting strings can be created using the `format` statement, which is very useful in print statements: +More interesting strings can be created using the +[`format`](https://docs.python.org/3/library/string.html#formatstrings) +statement, which is very useful in print statements: + ``` x = 1 y = 'PyTreat' @@ -113,7 +126,16 @@ print(s) print('A name is {} and a number is {}'.format(y, x)) ``` -There are also other options along these lines, but this is the more modern version, although you will see plenty of the other alternatives in "old" code (to python coders this means anything written before last week). +Python also supports C-style [`%` +formatting](https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting): + +``` +x = 1 +y = 'PyTreat' +s = 'The numerical value is %i and a name is %s' % (x, y) +print(s) +print('A name is %s and a number is %i' % (y, x)) +``` <a class="anchor" id="String-manipulation"></a> ### String manipulation @@ -150,7 +172,8 @@ where the `r` before the quote is used to force the regular expression specifica For more information on matching and substitutions, look up the regular expression module on the web. -Two common and convenient string methods are `strip()` and `split()`. The first will remove any whitespace at the beginning and end of a string: +Two common and convenient string methods are `strip()` and `split()`. The +first will remove any whitespace at the beginning and end of a string: ``` s2 = ' A very spacy string ' @@ -159,6 +182,7 @@ print('*' + s2.strip() + '*') ``` With `split()` we can tokenize a string (to turn it into a list of strings) like this: + ``` print(s.split()) print(s2.split()) @@ -170,11 +194,27 @@ s4 = ' This is, as you can see , a very weirdly spaced and punctuated print(s4.split(',')) ``` -There are more powerful ways of dealing with this like csv files/strings, which are covered in later practicals, but even this can get you a long way. +A neat trick, if you want to change the delimiter in some structured data (e.g. +replace `,` with `\t`), is to use `split()` in combination with another string +method, `join()`: +``` +csvdata = 'some,comma,separated,data' +tsvdata = '\t'.join(csvdata.split(',')) +tsvdata = tsvdata.replace('comma', 'tab')) +print('csvdata:', csvdata) +print('tsvdata:', tsvdata) +``` + + +There are more powerful ways of dealing with this like csv files/strings, +which are covered in later practicals, but even this can get you a long way. -> Note that strings in python 3 are _unicode_ so can represent Chinese characters, etc, and is therefore very flexible. However, in general you can just be blissfully ignorant of this fact. +> Note that strings in python 3 are _unicode_ so can represent Chinese +> characters, etc, and is therefore very flexible. However, in general you +> can just be blissfully ignorant of this fact. -Strings can be converted to integer or floating-point values by using the `int()` and `float()` calls: +Strings can be converted to integer or floating-point values by using the +`int()` and `float()` calls: ``` sint='23' @@ -191,8 +231,8 @@ print(float(sint) + float(sfp)) <a class="anchor" id="Tuples-and-lists"></a> ## Tuples and lists -Both tuples and lists are builtin python types and are like vectors, -but for numerical vectors and arrays it is much better to use _numpy_ +Both tuples and lists are builtin python types and are like vectors, +but for numerical vectors and arrays it is much better to use `numpy` arrays (or matrices), which are covered in a later tutorial. A tuple is like a list or a vector, but with less flexibility than a full list (tuples are immutable), however anything can be stored in either a list or tuple, without any consistency being required. Tuples are defined using round brackets and lists are defined using square brackets. For example: @@ -222,7 +262,8 @@ a += [80] print(a) ``` -> Similar things can be done for tuples, except for the last one: that is, a += (80) as a tuple is immutable so cannot be changed like this. +> Similar things can be done for tuples, except for the last one: that is, +> `a += (80)` as a tuple is immutable so cannot be changed like this. <a class="anchor" id="Indexing"></a> ### Indexing @@ -242,7 +283,9 @@ print(a[0]) print(a[2]) ``` -Indices naturally run from 0 to N-1, _but_ negative numbers can be used to reference from the end (circular wrap-around). +Indices naturally run from 0 to N-1, _but_ negative numbers can be used to +reference from the end (circular wrap-around). + ``` print(a[-1]) print(a[-6]) @@ -294,7 +337,7 @@ print(a[1:3]) # same as a(2:3) in MATLAB > _*Pitfall:*_ > > Unlike in MATLAB, you cannot use a list as indices instead of an -> integer or a slice (although these can be done in _numpy_). +> integer or a slice (although these can be done in `numpy`). ``` b = [3, 4] @@ -372,7 +415,9 @@ dir(d) ``` -> Note that google is often more helpful! At least, as long as you find pages relating to the right version of python - we use python 3 for FSL, so check that what you find is appropriate for that. +> Note that google is often more helpful! At least, as long as you find pages +> relating to Python 3 - Python 2 is no longer supported, but there is still +> lots of information about it on the internet, so be careful! --- @@ -430,14 +475,20 @@ for k in e: print((k, e[k])) ``` -> Note that in both cases the order is arbitrary. The `sorted` function can be used if you want keys in a sorted order; e.g. `for k in sorted(e):` ... +> In older versions of Python 3, there was no guarantee of ordering when using dictionaries. +> However, a of Python 3.7, dictionaries will remember the order in which items are inserted, +> and the `keys()`, `values()`, and `items()` methods will return elements in that order. > -> There are also [other options](https://docs.python.org/3.5/library/collections.html#collections.OrderedDict) if you want a dictionary with ordering. + +> If you want a dictionary with ordering, *and* you want your code to work with +> Python versions older than 3.7, you can use the +> [`OrderedDict`](https://docs.python.org/3/library/collections.html#collections.OrderedDict) +> class. --- <a class="anchor" id="Copying-and-references"></a> -## Copying and references +## Copying and references In python there are immutable types (e.g. numbers) and mutable types (e.g. lists). The main thing to know is that assignment can sometimes create separate copies and sometimes create references (as in C++). In general, the more complicated types are assigned via references. For example: ``` @@ -517,7 +568,11 @@ print('b: ', b) <a class="anchor" id="Boolean-operators"></a> ### Boolean operators -There is a boolean type in python that can be `True` or `False` (note the capitals). Other values can also be used for True or False (e.g., 1 for True; 0 or None or [] or {} or "") although they are not considered 'equal' in the sense that the operator `==` would consider them the same. +There is a boolean type in python that can be `True` or `False` (note the +capitals). Other values can also be used for True or False (e.g., `1` for +`True`; `0` or `None` or `[]` or `{}` or `""` for `False`) although they are +not considered 'equal' in the sense that the operator `==` would consider them +the same. Relevant boolean and comparison operators include: `not`, `and`, `or`, `==` and `!=` @@ -564,7 +619,7 @@ a = [] # just one of many examples if not a: print('Variable is true, or at least not empty') ``` -This can be useful for functions where a variety of possible input types are being dealt with. +This can be useful for functions where a variety of possible input types are being dealt with. --- @@ -722,7 +777,7 @@ You will often see python functions called with these named arguments. In fact, Let's say you are given a single string with comma separated elements that represent filenames and ID codes: e.g., `/vols/Data/pytreat/AAC, 165873, /vols/Data/pytreat/AAG, 170285, ...` -Write some code to do the following: +Write some code to do the following: * separate out the filenames and ID codes into separate lists (ID's should be numerical values, not strings) - you may need several steps for this * loop over the two and generate a _string_ that could be used to @@ -738,5 +793,3 @@ Write some code to do the following: mstr = '/vols/Data/pytreat/AAC, 165873, /vols/Data/pytreat/AAG, 170285, /vols/Data/pytreat/AAH, 196792, /vols/Data/pytreat/AAK, 212577, /vols/Data/pytreat/AAQ, 385376, /vols/Data/pytreat/AB, 444600, /vols/Data/pytreat/AC6, 454578, /vols/Data/pytreat/V8, 501502, /vols/Data/pytreat/2YK, 667688, /vols/Data/pytreat/C3PO, 821971' ``` - - diff --git a/getting_started/02_text_io.ipynb b/getting_started/02_text_io.ipynb index 43ef0db4be79d6820bdd4e19e953e73f6bb0c53b..310b3adaf7c93d023898036863f087a6eaa9f199 100644 --- a/getting_started/02_text_io.ipynb +++ b/getting_started/02_text_io.ipynb @@ -6,11 +6,16 @@ "source": [ "# Text input/output\n", "\n", - "In this section we will explore how to write and/or retrieve our data from text files.\n", + "In this section we will explore how to write and/or retrieve our data from\n", + "text files.\n", "\n", - "Most of the functionality for reading/writing files and manipulating strings is available without any imports. However, you can find some additional functionality in the [`string`](https://docs.python.org/3.6/library/string.html) module.\n", + "Most of the functionality for reading/writing files and manipulating strings\n", + "is available without any imports. However, you can find some additional\n", + "functionality in the\n", + "[`string`](https://docs.python.org/3/library/string.html) module.\n", "\n", - "Most of the string functions are available as methods on string objects. This means that you can use the ipython autocomplete to check for them." + "Most of the string functions are available as methods on string objects. This\n", + "means that you can use the ipython autocomplete to check for them." ] }, { @@ -28,7 +33,10 @@ "metadata": {}, "outputs": [], "source": [ - "empty_string. # after running the code block above, put your cursor behind the dot and press tab to get a list of methods" + "# after running the code block above,\n", + "# put your cursor after the dot and\n", + "# press tab to get a list of methods\n", + "empty_string." ] }, { @@ -49,11 +57,20 @@ "* [Exercises](#exercises)\n", "\n", "<a class=\"anchor\" id=\"reading-writing-files\"></a>\n", + "\n", "## Reading/writing files\n", - "The syntax to open a file in python is `with open(<filename>, <mode>) as <file_object>: <block of code>`, where\n", + "\n", + "\n", + "The syntax to open a file in python is `with open(<filename>, <mode>) as\n", + "<file_object>: <block of code>`, where\n", "* `filename` is a string with the name of the file\n", - "* `mode` is one of 'r' (for read-only access), 'w' (for writing a file, this wipes out any existing content), 'a' (for appending to an existing file).\n", - "* `file_object` is a variable name which will be used within the `block of code` to access the opened file.\n", + "\n", + "* `mode` is one of `'r'` (for read-only access), `'w'` (for writing a file,\n", + " this wipes out any existing content), `'a'` (for appending to an existing\n", + " file).\n", + "\n", + "* `file_object` is a variable name which will be used within the `block of\n", + " code` to access the opened file.\n", "\n", "For example the following will read all the text in `README.md` and print it." ] @@ -72,10 +89,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> The `with` statement is an advanced python feature, however you will probably only encounter it when opening files. In that context it merely ensures that the file will be properly closed as soon as the program leaves the `with` statement (even if an error is raised within the `with` statement).\n", - "\n", - "You could also use the `readlines()` method to get a list of all the lines.\n", + "> The `with` statement is an advanced python feature, however you will\n", + "> probably only encounter it when opening files. In that context it merely\n", + "> ensures that the file will be properly closed as soon as the program leaves\n", + "> the `with` statement (even if an error is raised within the `with`\n", + "> statement).\n", "\n", + "You could also use the `readlines()` method to get a list of all the lines, or\n", + "simply \"loop over\" the file object to get the lines one by one:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('README.md', 'r') as readme_file:\n", + " print('First five lines...')\n", + " for i, line in enumerate(readme_file):\n", + " # each line is returned with its\n", + " # newline character still intact,\n", + " # so we use rstrip() to remove it.\n", + " print('{}: {}'.format(i, line.rstrip()))\n", + " if i == 4:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "A very similar syntax is used to write files:" ] }, @@ -94,7 +138,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that no new line characters get added automatically. We can investigate the resulting file using" + "Note that no new line characters get added automatically. We can investigate\n", + "the resulting file using" ] }, { @@ -110,7 +155,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Any lines starting with `!` will be interpreted as shell commands by ipython. It is great when playing around in the ipython notebook or in the ipython terminal, however it is an ipython-only feature and hence is not available when writing python scripts. How to call shell commands from python will be discussed in the `scripts` practical.\n", + "> In Jupyter notebook, (and in `ipython`/`fslipython`), any lines starting\n", + "> with `!` will be interpreted as shell commands. It is great when playing\n", + "> around in a Jupyter notebook or in the `ipython` terminal, however it is an\n", + "> ipython-only feature and hence is not available when writing python\n", + "> scripts. How to call shell commands from python will be discussed in the\n", + "> `scripts` practical.\n", "\n", "If we want to add to the existing file we can open it in the append mode:" ] @@ -130,14 +180,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Below we will discuss how we can convert python objects to strings to store in these files and how to extract those python objects from strings again.\n", + "Below we will discuss how we can convert python objects to strings to store in\n", + "these files and how to extract those python objects from strings again.\n", "\n", "<a class=\"anchor\" id=\"creating-new-strings\"></a>\n", "## Creating new strings\n", "\n", "<a class=\"anchor\" id=\"string-syntax\"></a>\n", "### String syntax\n", - "Single-line strings can be created in python using either single or double quotes" + "\n", + "\n", + "Single-line strings can be created in python using either single or double\n", + "quotes:" ] }, { @@ -155,7 +209,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The main rationale for choosing between single or double quotes, is whether the string itself will contain any quotes. You can include a single quote in a string surrounded by single quotes by escaping it with the `\\` character, however in such a case it would be more convenient to use double quotes:" + "The main rationale for choosing between single or double quotes, is whether\n", + "the string itself will contain any quotes. You can include a single quote in a\n", + "string surrounded by single quotes by escaping it with the `\\` character,\n", + "however in such a case it would be more convenient to use double quotes:" ] }, { @@ -245,9 +302,19 @@ "source": [ "<a class=\"anchor\" id=\"unicode-versus-bytes\"></a>\n", "#### unicode versus bytes\n", - "To encourage the spread of python around the world, python 3 switched to using unicode as the default for strings and code (which is one of the main reasons for the incompatibility between python 2 and 3).\n", - "This means that each element in a string is a unicode character (using [UTF-8 encoding](https://docs.python.org/3/howto/unicode.html)), which can consist of one or more bytes.\n", - "The advantage is that any unicode characters can now be used in strings or in the code itself:" + "\n", + "> **Note**: You can safely skip this section if you do not have any plans to\n", + "> work with binary files or non-English text in Python, and you do not want\n", + "> to know how to insert poop emojis into your code.\n", + "\n", + "\n", + "To encourage the spread of python around the world, python 3 switched to using\n", + "unicode as the default for strings and code (which is one of the main reasons\n", + "for the incompatibility between python 2 and 3). This means that each element\n", + "in a string is a unicode character (using [UTF-8\n", + "encoding](https://docs.python.org/3/howto/unicode.html)), which can consist of\n", + "one or more bytes. The advantage is that any unicode characters can now be\n", + "used in strings or in the code itself:" ] }, { @@ -264,7 +331,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In python 2 each element in a string was a single byte rather than a potentially multi-byte character. You can convert back to interpreting your sequence as a unicode string or a byte array using:\n", + "In python 2 each element in a string was a single byte rather than a\n", + "potentially multi-byte character. You can convert back to interpreting your\n", + "sequence as a unicode string or a byte array using:\n", + "\n", "* `encode()` called on a string converts it into a bytes array (`bytes` object)\n", "* `decode()` called on a `bytes` array converts it into a unicode string." ] @@ -283,7 +353,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "These byte arrays can be created directly be prepending the quotes enclosing the string with a `b`, which tells python 3 to interpret the following as a byte array:" + "These byte arrays can be created directly by prepending the quotes enclosing\n", + "the string with a `b`, which tells python 3 to interpret the following as a\n", + "byte array:" ] }, { @@ -300,9 +372,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Especially in code dealing with strings (e.g., reading/writing of files) many of the errors arising of running python 2 code in python 3 arise from the mixing of unicode strings with byte arrays. Decoding and/or encoding some of these objects can often fix these issues.\n", + "Especially in code dealing with strings (e.g., reading/writing of files) many\n", + "of the errors arising of running python 2 code in python 3 arise from the\n", + "mixing of unicode strings with byte arrays. Decoding and/or encoding some of\n", + "these objects can often fix these issues.\n", "\n", - "By default any file opened in python will be interpreted as unicode. If you want to treat a file as raw bytes, you have to include a 'b' in the `mode` when calling the `open()` function:" + "By default any file opened in python will be interpreted as unicode. If you\n", + "want to treat a file as raw bytes, you have to include a 'b' in the `mode`\n", + "when calling the `open()` function:" ] }, { @@ -320,14 +397,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> We use the `expandvars()` function here to insert the FSLDIR environmental variable into our string. This function will be presented in the file management practical.\n", + "> We use the `expandvars()` function here to insert the FSLDIR environmental\n", + "> variable into our string. This function will be presented in the file\n", + "> management practical.\n", + "\n", "\n", "<a class=\"anchor\" id=\"converting-objects-into-strings\"></a>\n", "### converting objects into strings\n", - "There are two functions to convert python objects into strings, `repr()` and `str()`.\n", - "All other functions that rely on string-representations of python objects will use one of these two (for example the `print()` function will call `str()` on the object).\n", "\n", - "The goal of the `str()` function is to be readable, while the goal of `repr()` is to be unambiguous. Compare" + "There are two functions to convert python objects into strings, `repr()` and\n", + "`str()`. All other functions that rely on string-representations of python\n", + "objects will use one of these two (for example the `print()` function will\n", + "call `str()` on the object).\n", + "\n", + "The goal of the `str()` function is to be readable, while the goal of `repr()`\n", + "is to be unambiguous. Compare" ] }, { @@ -445,10 +529,10 @@ "<a class=\"anchor\" id=\"string-formatting\"></a>\n", "### String formatting\n", "Using the techniques in [Combining strings](#combining-strings) we can build simple strings. For longer strings it is often useful to first write a template strings with some placeholders, where variables are later inserted. Built into python are currently 4 different ways of doing this (with many packages providing similar capabilities):\n", - "* the recommended [new-style formatting](https://docs.python.org/3.6/library/string.html#format-string-syntax).\n", + "* the recommended [new-style formatting](https://docs.python.org/3/library/string.html#format-string-syntax).\n", "* printf-like [old-style formatting](https://docs.python.org/3/library/stdtypes.html#old-string-formatting)\n", - "* [formatted string literals](https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings) (these are only available in python 3.6+)\n", - "* bash-like [template-strings](https://docs.python.org/3.6/library/string.html#template-strings)\n", + "* [formatted string literals](https://docs.python.org/3/reference/lexical_analysis.html#f-strings) (these are only available in python 3.6+)\n", + "* bash-like [template-strings](https://docs.python.org/3/library/string.html#template-strings)\n", "\n", "Here we provide a single example using the first three methods, so you can recognize them in the future.\n", "\n", @@ -520,6 +604,14 @@ "\n", "<a class=\"anchor\" id=\"extracting-information-from-strings\"></a>\n", "## Extracting information from strings\n", + "\n", + "The techniques shown in this section are useful if you are loading data from a\n", + "small text file or user input, or parsing a small amount of output from\n", + "e.g. `fslstats`. However, if you are working with large structured text data\n", + "(e.g. a big `csv` file), you should use the I/O capabilities of `numpy` or\n", + "`pandas` instead of doing things manually - this is covered in separate\n", + "practcals.\n", + "\n", "<a class=\"anchor\" id=\"splitting-strings\"></a>\n", "### Splitting strings\n", "The simplest way to extract a sub-string is to use slicing" @@ -598,9 +690,14 @@ "source": [ "> We use the syntax `[<expr> for <element> in <sequence>]` here which applies the `expr` to each `element` in the `sequence` and returns the resulting list. This is a list comprehension - a convenient form in python to create a new list from the old one.\n", "\n", + "\n", "<a class=\"anchor\" id=\"converting-strings-to-numbers\"></a>\n", "### Converting strings to numbers\n", - "Once you have extracted a number from a string, you can convert it into an actual integer or float by calling respectively `int()` or `float()` on it. `float()` understands a wide variety of different ways to write numbers:" + "\n", + "\n", + "Once you have extracted a number from a string, you can convert it into an\n", + "actual integer or float by calling respectively `int()` or `float()` on\n", + "it. `float()` understands a wide variety of different ways to write numbers:" ] }, { diff --git a/getting_started/02_text_io.md b/getting_started/02_text_io.md index afab42f8e05d1f2029d26ff4031ca1578b97394c..42e93b09b5883d25ded5c0540d221bc3dfb540a1 100644 --- a/getting_started/02_text_io.md +++ b/getting_started/02_text_io.md @@ -1,16 +1,25 @@ # Text input/output -In this section we will explore how to write and/or retrieve our data from text files. +In this section we will explore how to write and/or retrieve our data from +text files. -Most of the functionality for reading/writing files and manipulating strings is available without any imports. However, you can find some additional functionality in the [`string`](https://docs.python.org/3.6/library/string.html) module. +Most of the functionality for reading/writing files and manipulating strings +is available without any imports. However, you can find some additional +functionality in the +[`string`](https://docs.python.org/3/library/string.html) module. + +Most of the string functions are available as methods on string objects. This +means that you can use the ipython autocomplete to check for them. -Most of the string functions are available as methods on string objects. This means that you can use the ipython autocomplete to check for them. ``` empty_string = '' ``` ``` -empty_string. # after running the code block above, put your cursor behind the dot and press tab to get a list of methods +# after running the code block above, +# put your cursor after the dot and +# press tab to get a list of methods +empty_string. ``` * [Reading/writing files](#reading-writing-files) @@ -27,20 +36,47 @@ empty_string. # after running the code block above, put your cursor behind th * [Exercises](#exercises) <a class="anchor" id="reading-writing-files"></a> + ## Reading/writing files -The syntax to open a file in python is `with open(<filename>, <mode>) as <file_object>: <block of code>`, where + + +The syntax to open a file in python is `with open(<filename>, <mode>) as +<file_object>: <block of code>`, where * `filename` is a string with the name of the file -* `mode` is one of 'r' (for read-only access), 'w' (for writing a file, this wipes out any existing content), 'a' (for appending to an existing file). -* `file_object` is a variable name which will be used within the `block of code` to access the opened file. + +* `mode` is one of `'r'` (for read-only access), `'w'` (for writing a file, + this wipes out any existing content), `'a'` (for appending to an existing + file). + +* `file_object` is a variable name which will be used within the `block of + code` to access the opened file. For example the following will read all the text in `README.md` and print it. ``` with open('README.md', 'r') as readme_file: print(readme_file.read()) ``` -> The `with` statement is an advanced python feature, however you will probably only encounter it when opening files. In that context it merely ensures that the file will be properly closed as soon as the program leaves the `with` statement (even if an error is raised within the `with` statement). -You could also use the `readlines()` method to get a list of all the lines. +> The `with` statement is an advanced python feature, however you will +> probably only encounter it when opening files. In that context it merely +> ensures that the file will be properly closed as soon as the program leaves +> the `with` statement (even if an error is raised within the `with` +> statement). + +You could also use the `readlines()` method to get a list of all the lines, or +simply "loop over" the file object to get the lines one by one: + +``` +with open('README.md', 'r') as readme_file: + print('First five lines...') + for i, line in enumerate(readme_file): + # each line is returned with its + # newline character still intact, + # so we use rstrip() to remove it. + print('{}: {}'.format(i, line.rstrip())) + if i == 4: + break +``` A very similar syntax is used to write files: ``` @@ -48,11 +84,21 @@ with open('02_text_io/my_file', 'w') as my_file: my_file.write('This is my first line\n') my_file.writelines(['Second line\n', 'and the third\n']) ``` -Note that no new line characters get added automatically. We can investigate the resulting file using + +Note that no new line characters get added automatically. We can investigate +the resulting file using + ``` !cat 02_text_io/my_file ``` -> Any lines starting with `!` will be interpreted as shell commands by ipython. It is great when playing around in the ipython notebook or in the ipython terminal, however it is an ipython-only feature and hence is not available when writing python scripts. How to call shell commands from python will be discussed in the `scripts` practical. + + +> In Jupyter notebook, (and in `ipython`/`fslipython`), any lines starting +> with `!` will be interpreted as shell commands. It is great when playing +> around in a Jupyter notebook or in the `ipython` terminal, however it is an +> ipython-only feature and hence is not available when writing python +> scripts. How to call shell commands from python will be discussed in the +> `scripts` practical. If we want to add to the existing file we can open it in the append mode: ``` @@ -61,21 +107,30 @@ with open('02_text_io/my_file', 'a') as my_file: !cat 02_text_io/my_file ``` -Below we will discuss how we can convert python objects to strings to store in these files and how to extract those python objects from strings again. +Below we will discuss how we can convert python objects to strings to store in +these files and how to extract those python objects from strings again. <a class="anchor" id="creating-new-strings"></a> ## Creating new strings <a class="anchor" id="string-syntax"></a> ### String syntax -Single-line strings can be created in python using either single or double quotes + + +Single-line strings can be created in python using either single or double +quotes: + ``` a_string = 'To be or not to be' same_string = "To be or not to be" print(a_string == same_string) ``` -The main rationale for choosing between single or double quotes, is whether the string itself will contain any quotes. You can include a single quote in a string surrounded by single quotes by escaping it with the `\` character, however in such a case it would be more convenient to use double quotes: +The main rationale for choosing between single or double quotes, is whether +the string itself will contain any quotes. You can include a single quote in a +string surrounded by single quotes by escaping it with the `\` character, +however in such a case it would be more convenient to use double quotes: + ``` a_string = "That's the question" same_string = 'That\'s the question' @@ -110,45 +165,78 @@ print("The 'c' and 'd' got concatenated, because we forgot the comma:", my_list_ <a class="anchor" id="unicode-versus-bytes"></a> #### unicode versus bytes -To encourage the spread of python around the world, python 3 switched to using unicode as the default for strings and code (which is one of the main reasons for the incompatibility between python 2 and 3). -This means that each element in a string is a unicode character (using [UTF-8 encoding](https://docs.python.org/3/howto/unicode.html)), which can consist of one or more bytes. -The advantage is that any unicode characters can now be used in strings or in the code itself: + +> **Note**: You can safely skip this section if you do not have any plans to +> work with binary files or non-English text in Python, and you do not want +> to know how to insert poop emojis into your code. + + +To encourage the spread of python around the world, python 3 switched to using +unicode as the default for strings and code (which is one of the main reasons +for the incompatibility between python 2 and 3). This means that each element +in a string is a unicode character (using [UTF-8 +encoding](https://docs.python.org/3/howto/unicode.html)), which can consist of +one or more bytes. The advantage is that any unicode characters can now be +used in strings or in the code itself: + ``` Δ = "café" print(Δ) ``` -In python 2 each element in a string was a single byte rather than a potentially multi-byte character. You can convert back to interpreting your sequence as a unicode string or a byte array using: +In python 2 each element in a string was a single byte rather than a +potentially multi-byte character. You can convert back to interpreting your +sequence as a unicode string or a byte array using: + * `encode()` called on a string converts it into a bytes array (`bytes` object) * `decode()` called on a `bytes` array converts it into a unicode string. + ``` delta = "Δ" print('The character', delta, 'consists of the following 2 bytes', delta.encode()) ``` -These byte arrays can be created directly be prepending the quotes enclosing the string with a `b`, which tells python 3 to interpret the following as a byte array: +These byte arrays can be created directly by prepending the quotes enclosing +the string with a `b`, which tells python 3 to interpret the following as a +byte array: + ``` a_byte_array = b'\xce\xa9' print('The two bytes ', a_byte_array, ' become single unicode character (', a_byte_array.decode(), ') with UTF-8 encoding') ``` -Especially in code dealing with strings (e.g., reading/writing of files) many of the errors arising of running python 2 code in python 3 arise from the mixing of unicode strings with byte arrays. Decoding and/or encoding some of these objects can often fix these issues. +Especially in code dealing with strings (e.g., reading/writing of files) many +of the errors arising of running python 2 code in python 3 arise from the +mixing of unicode strings with byte arrays. Decoding and/or encoding some of +these objects can often fix these issues. + +By default any file opened in python will be interpreted as unicode. If you +want to treat a file as raw bytes, you have to include a 'b' in the `mode` +when calling the `open()` function: -By default any file opened in python will be interpreted as unicode. If you want to treat a file as raw bytes, you have to include a 'b' in the `mode` when calling the `open()` function: ``` import os.path as op with open(op.expandvars('${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz'), 'rb') as gzipped_nifti: print('First few bytes of gzipped NIFTI file:', gzipped_nifti.read(10)) ``` -> We use the `expandvars()` function here to insert the FSLDIR environmental variable into our string. This function will be presented in the file management practical. + +> We use the `expandvars()` function here to insert the FSLDIR environmental +> variable into our string. This function will be presented in the file +> management practical. + <a class="anchor" id="converting-objects-into-strings"></a> ### converting objects into strings -There are two functions to convert python objects into strings, `repr()` and `str()`. -All other functions that rely on string-representations of python objects will use one of these two (for example the `print()` function will call `str()` on the object). -The goal of the `str()` function is to be readable, while the goal of `repr()` is to be unambiguous. Compare +There are two functions to convert python objects into strings, `repr()` and +`str()`. All other functions that rely on string-representations of python +objects will use one of these two (for example the `print()` function will +call `str()` on the object). + +The goal of the `str()` function is to be readable, while the goal of `repr()` +is to be unambiguous. Compare + ``` print(str("3")) print(str(3)) @@ -198,10 +286,10 @@ print(full_string) <a class="anchor" id="string-formatting"></a> ### String formatting Using the techniques in [Combining strings](#combining-strings) we can build simple strings. For longer strings it is often useful to first write a template strings with some placeholders, where variables are later inserted. Built into python are currently 4 different ways of doing this (with many packages providing similar capabilities): -* the recommended [new-style formatting](https://docs.python.org/3.6/library/string.html#format-string-syntax). +* the recommended [new-style formatting](https://docs.python.org/3/library/string.html#format-string-syntax). * printf-like [old-style formatting](https://docs.python.org/3/library/stdtypes.html#old-string-formatting) -* [formatted string literals](https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings) (these are only available in python 3.6+) -* bash-like [template-strings](https://docs.python.org/3.6/library/string.html#template-strings) +* [formatted string literals](https://docs.python.org/3/reference/lexical_analysis.html#f-strings) (these are only available in python 3.6+) +* bash-like [template-strings](https://docs.python.org/3/library/string.html#template-strings) Here we provide a single example using the first three methods, so you can recognize them in the future. @@ -238,6 +326,14 @@ This code block will fail in fslpython, since it uses python 3.5. <a class="anchor" id="extracting-information-from-strings"></a> ## Extracting information from strings + +The techniques shown in this section are useful if you are loading data from a +small text file or user input, or parsing a small amount of output from +e.g. `fslstats`. However, if you are working with large structured text data +(e.g. a big `csv` file), you should use the I/O capabilities of `numpy` or +`pandas` instead of doing things manually - this is covered in separate +practcals. + <a class="anchor" id="splitting-strings"></a> ### Splitting strings The simplest way to extract a sub-string is to use slicing @@ -271,9 +367,15 @@ print(list_without_whitespace) ``` > We use the syntax `[<expr> for <element> in <sequence>]` here which applies the `expr` to each `element` in the `sequence` and returns the resulting list. This is a list comprehension - a convenient form in python to create a new list from the old one. + <a class="anchor" id="converting-strings-to-numbers"></a> ### Converting strings to numbers -Once you have extracted a number from a string, you can convert it into an actual integer or float by calling respectively `int()` or `float()` on it. `float()` understands a wide variety of different ways to write numbers: + + +Once you have extracted a number from a string, you can convert it into an +actual integer or float by calling respectively `int()` or `float()` on +it. `float()` understands a wide variety of different ways to write numbers: + ``` print(int("3")) print(float("3")) @@ -282,6 +384,7 @@ print(float("3.213e5")) print(float("3.213E-25")) ``` + <a class="anchor" id="regular-expressions"></a> ### Regular expressions Regular expressions are used for looking for specific patterns in a longer string. This can be used to extract specific information from a well-formatted string or to modify a string. In python regular expressions are available in the [re](https://docs.python.org/3/library/re.html#re-syntax) module. diff --git a/getting_started/03_file_management.ipynb b/getting_started/03_file_management.ipynb index 2dd68d75c84b58c1775c4740eadcfa19e97dd9ad..a677f0d0867b13e45ce59782acd44b90dc6d7447 100644 --- a/getting_started/03_file_management.ipynb +++ b/getting_started/03_file_management.ipynb @@ -15,11 +15,11 @@ "across the following modules:\n", "\n", "\n", - " - [`os`](https://docs.python.org/3.5/library/os.html)\n", - " - [`shutil`](https://docs.python.org/3.5/library/shutil.html)\n", - " - [`os.path`](https://docs.python.org/3.5/library/os.path.html)\n", - " - [`glob`](https://docs.python.org/3.5/library/glob.html)\n", - " - [`fnmatch`](https://docs.python.org/3.5/library/fnmatch.html)\n", + " - [`os`](https://docs.python.org/3/library/os.html)\n", + " - [`shutil`](https://docs.python.org/3/library/shutil.html)\n", + " - [`os.path`](https://docs.python.org/3/library/os.path.html)\n", + " - [`glob`](https://docs.python.org/3/library/glob.html)\n", + " - [`fnmatch`](https://docs.python.org/3/library/fnmatch.html)\n", "\n", "\n", "The `os` and `shutil` modules have functions allowing you to manage _files and\n", @@ -28,7 +28,7 @@ "\n", "\n", "> Another standard library -\n", - "> [`pathlib`](https://docs.python.org/3.5/library/pathlib.html) - was added in\n", + "> [`pathlib`](https://docs.python.org/3/library/pathlib.html) - was added in\n", "> Python 3.4, and provides an object-oriented interface to path management. We\n", "> aren't going to cover `pathlib` here, but feel free to take a look at it if\n", "> you are into that sort of thing.\n", @@ -296,7 +296,7 @@ "> Note that `os.walk` does not guarantee a specific ordering in the lists of\n", "> files and sub-directories that it returns. However, you can force an\n", "> ordering quite easily - see its\n", - "> [documentation](https://docs.python.org/3.5/library/os.html#os.walk) for\n", + "> [documentation](https://docs.python.org/3/library/os.html#os.walk) for\n", "> more details.\n", "\n", "\n", @@ -501,7 +501,7 @@ "> ```\n", ">\n", "> Take a look at the [official Python\n", - "> tutorial](https://docs.python.org/3.5/tutorial/controlflow.html#defining-functions)\n", + "> tutorial](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)\n", "> for more details on defining your own functions.\n", "\n", "\n", @@ -608,7 +608,11 @@ "> Correct handling of them is an open problem in Computer Science, and is\n", "> considered by many to be unsolvable. For `imglob`, `imcp`, and `immv`-like\n", "> functionality, check out the `fsl.utils.path` and `fsl.utils.imcp` modules,\n", - "> part of the [`fslpy` project](https://pypi.python.org/pypi/fslpy).\n", + "> part of the [`fslpy`\n", + "> project](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/). If you\n", + "> are using `fslpython`, then you already have access to all of the functions\n", + "> in `fslpy`.\n", + "\n", "\n", "\n", "<a class=\"anchor\" id=\"absolute-and-relative-paths\"></a>\n", @@ -751,7 +755,7 @@ "source": [ "Now that we have this function, we can sort the directories in one line of\n", "code, via the built-in\n", - "[`sorted`](https://docs.python.org/3.5/library/functions.html#sorted)\n", + "[`sorted`](https://docs.python.org/3/library/functions.html#sorted)\n", "function. The directories will be sorted according to the `key` function that\n", "we specify, which provides a mapping from each directory to a sortable\n", ""key":" @@ -812,10 +816,10 @@ "\n", "Note that the syntax used by `glob` and `fnmatch` is similar, but __not__\n", "identical to the syntax that you are used to from `bash`. Refer to the\n", - "[`fnmatch` module](https://docs.python.org/3.5/library/fnmatch.html)\n", + "[`fnmatch` module](https://docs.python.org/3/library/fnmatch.html)\n", "documentation for details. If you need more complicated pattern matching, you\n", "can use regular expressions, available via the [`re`\n", - "module](https://docs.python.org/3.5/library/re.html).\n", + "module](https://docs.python.org/3/library/re.html).\n", "\n", "\n", "For example, let's retrieve all images that are in our data set:" @@ -1080,7 +1084,7 @@ "\n", "> There are many different types of exceptions in Python - a list of all the\n", "> built-in ones can be found\n", - "> [here](https://docs.python.org/3.5/library/exceptions.html). It is also easy\n", + "> [here](https://docs.python.org/3/library/exceptions.html). It is also easy\n", "> to define your own exceptions by creating a sub-class of `Exception` (beyond\n", "> the scope of this practical).\n", "\n", @@ -1346,7 +1350,7 @@ "\n", "\n", "You can read more about handling exceptions in Python\n", - "[here](https://docs.python.org/3.5/tutorial/errors.html).\n", + "[here](https://docs.python.org/3/tutorial/errors.html).\n", "\n", "\n", "### Raising exceptions\n", diff --git a/getting_started/03_file_management.md b/getting_started/03_file_management.md index 63b47989412b35a5a805f997ddbc5e424254f44f..0c4979a8a3321811f0381fdfb5277b63c75d999d 100644 --- a/getting_started/03_file_management.md +++ b/getting_started/03_file_management.md @@ -9,11 +9,11 @@ Most of Python's built-in functionality for managing files and paths is spread across the following modules: - - [`os`](https://docs.python.org/3.5/library/os.html) - - [`shutil`](https://docs.python.org/3.5/library/shutil.html) - - [`os.path`](https://docs.python.org/3.5/library/os.path.html) - - [`glob`](https://docs.python.org/3.5/library/glob.html) - - [`fnmatch`](https://docs.python.org/3.5/library/fnmatch.html) + - [`os`](https://docs.python.org/3/library/os.html) + - [`shutil`](https://docs.python.org/3/library/shutil.html) + - [`os.path`](https://docs.python.org/3/library/os.path.html) + - [`glob`](https://docs.python.org/3/library/glob.html) + - [`fnmatch`](https://docs.python.org/3/library/fnmatch.html) The `os` and `shutil` modules have functions allowing you to manage _files and @@ -22,7 +22,7 @@ managing file and directory _paths_. > Another standard library - -> [`pathlib`](https://docs.python.org/3.5/library/pathlib.html) - was added in +> [`pathlib`](https://docs.python.org/3/library/pathlib.html) - was added in > Python 3.4, and provides an object-oriented interface to path management. We > aren't going to cover `pathlib` here, but feel free to take a look at it if > you are into that sort of thing. @@ -226,7 +226,7 @@ for root, dirs, files in os.walk('raw_mri_data'): > Note that `os.walk` does not guarantee a specific ordering in the lists of > files and sub-directories that it returns. However, you can force an > ordering quite easily - see its -> [documentation](https://docs.python.org/3.5/library/os.html#os.walk) for +> [documentation](https://docs.python.org/3/library/os.html#os.walk) for > more details. @@ -391,7 +391,7 @@ def whatisit(path, existonly=False): > ``` > > Take a look at the [official Python -> tutorial](https://docs.python.org/3.5/tutorial/controlflow.html#defining-functions) +> tutorial](https://docs.python.org/3/tutorial/controlflow.html#defining-functions) > for more details on defining your own functions. @@ -474,7 +474,11 @@ print('Suffix: {}'.format(suffix)) > Correct handling of them is an open problem in Computer Science, and is > considered by many to be unsolvable. For `imglob`, `imcp`, and `immv`-like > functionality, check out the `fsl.utils.path` and `fsl.utils.imcp` modules, -> part of the [`fslpy` project](https://pypi.python.org/pypi/fslpy). +> part of the [`fslpy` +> project](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/). If you +> are using `fslpython`, then you already have access to all of the functions +> in `fslpy`. + <a class="anchor" id="absolute-and-relative-paths"></a> @@ -577,7 +581,7 @@ print(get_subject_id('raw_mri_data/subj_9')) Now that we have this function, we can sort the directories in one line of code, via the built-in -[`sorted`](https://docs.python.org/3.5/library/functions.html#sorted) +[`sorted`](https://docs.python.org/3/library/functions.html#sorted) function. The directories will be sorted according to the `key` function that we specify, which provides a mapping from each directory to a sortable "key": @@ -622,10 +626,10 @@ pattern matching logic. Note that the syntax used by `glob` and `fnmatch` is similar, but __not__ identical to the syntax that you are used to from `bash`. Refer to the -[`fnmatch` module](https://docs.python.org/3.5/library/fnmatch.html) +[`fnmatch` module](https://docs.python.org/3/library/fnmatch.html) documentation for details. If you need more complicated pattern matching, you can use regular expressions, available via the [`re` -module](https://docs.python.org/3.5/library/re.html). +module](https://docs.python.org/3/library/re.html). For example, let's retrieve all images that are in our data set: @@ -834,7 +838,7 @@ errors. For example, when you type CTRL+C into a running Python program, a > There are many different types of exceptions in Python - a list of all the > built-in ones can be found -> [here](https://docs.python.org/3.5/library/exceptions.html). It is also easy +> [here](https://docs.python.org/3/library/exceptions.html). It is also easy > to define your own exceptions by creating a sub-class of `Exception` (beyond > the scope of this practical). @@ -1037,7 +1041,7 @@ finally: You can read more about handling exceptions in Python -[here](https://docs.python.org/3.5/tutorial/errors.html). +[here](https://docs.python.org/3/tutorial/errors.html). ### Raising exceptions diff --git a/getting_started/04_numpy.ipynb b/getting_started/04_numpy.ipynb index bccf81a46347a23fed03a371d09d3f0096f1204b..ce634dd4a41927e607d585cd04a6862296e56e46 100644 --- a/getting_started/04_numpy.ipynb +++ b/getting_started/04_numpy.ipynb @@ -19,11 +19,6 @@ "alternative to Matlab as a scientific computing platform.\n", "\n", "\n", - "The `fslpython` environment currently includes [Numpy\n", - "1.11.1](https://docs.scipy.org/doc/numpy-1.11.0/index.html), which is a little\n", - "out of date, but we will update it for the next release of FSL.\n", - "\n", - "\n", "## Contents\n", "\n", "\n", @@ -102,7 +97,7 @@ "source": [ "For simple tasks, you could stick with processing your data using python\n", "lists, and the built-in\n", - "[`math`](https://docs.python.org/3.5/library/math.html) library. And this\n", + "[`math`](https://docs.python.org/3/library/math.html) library. And this\n", "might be tempting, because it does look quite a lot like what you might type\n", "into Matlab.\n", "\n", @@ -444,8 +439,8 @@ "\n", "\n", "> <sup>2</sup> Python, being an object-oriented language, distinguishes\n", - "> between _functions_ and _methods_. Hopefully we all know what a function is\n", - "> - a _method_ is simply the term used to refer to a function that is\n", + "> between _functions_ and _methods_. Hopefully we all know what a function\n", + "> is - a _method_ is simply the term used to refer to a function that is\n", "> associated with a specific object. Similarly, the term _attribute_ is used\n", "> to refer to some piece of information that is attached to an object, such as\n", "> `z.shape`, or `z.dtype`.\n", @@ -819,7 +814,7 @@ "### Broadcasting\n", "\n", "\n", - "One of the coolest features of Numpy is _broadcasting_<sup>3</sup>.\n", + "One of the coolest features of Numpy is *broadcasting*<sup>3</sup>.\n", "Broadcasting allows you to perform element-wise operations on arrays which\n", "have a different shape. For each axis in the two arrays, Numpy will implicitly\n", "expand the shape of the smaller axis to match the shape of the larger one. You\n", @@ -1272,9 +1267,9 @@ "\n", "> <sup>4</sup> Even though these are FLIRT transforms, this is just a toy\n", "> example. Look\n", - "> [here](https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FLIRT/FAQ#What_is_the_format_of_the_matrix_used_by_FLIRT.2C_and_how_does_it_relate_to_the_transformation_parameters.3F)\n", + "> [here](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/fsl.transform.flirt.html)\n", "> and\n", - "> [here](https://git.fmrib.ox.ac.uk/fsl/fslpy/blob/1.6.2/fsl/utils/transform.py#L537)\n", + "> [here](https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FLIRT/FAQ#What_is_the_format_of_the_matrix_used_by_FLIRT.2C_and_how_does_it_relate_to_the_transformation_parameters.3F)\n", "> if you actually need to work with FLIRT transforms.\n", "\n", "\n", diff --git a/getting_started/04_numpy.md b/getting_started/04_numpy.md index 3a28cc830442b08628633cd04372f9091a6683ee..db6fcf904f7a5a9b7d1c0d2739f183f2db2e9cf7 100644 --- a/getting_started/04_numpy.md +++ b/getting_started/04_numpy.md @@ -13,11 +13,6 @@ important Python libraries, and it (along with its partners alternative to Matlab as a scientific computing platform. -The `fslpython` environment currently includes [Numpy -1.11.1](https://docs.scipy.org/doc/numpy-1.11.0/index.html), which is a little -out of date, but we will update it for the next release of FSL. - - ## Contents @@ -80,7 +75,7 @@ xyz_coords = [[-11.4, 1.0, 22.6], For simple tasks, you could stick with processing your data using python lists, and the built-in -[`math`](https://docs.python.org/3.5/library/math.html) library. And this +[`math`](https://docs.python.org/3/library/math.html) library. And this might be tempting, because it does look quite a lot like what you might type into Matlab. @@ -334,8 +329,8 @@ view of the array. > <sup>2</sup> Python, being an object-oriented language, distinguishes -> between _functions_ and _methods_. Hopefully we all know what a function is -> - a _method_ is simply the term used to refer to a function that is +> between _functions_ and _methods_. Hopefully we all know what a function +> is - a _method_ is simply the term used to refer to a function that is > associated with a specific object. Similarly, the term _attribute_ is used > to refer to some piece of information that is attached to an object, such as > `z.shape`, or `z.dtype`. @@ -611,7 +606,7 @@ like what you might expect from Matlab. You can find a brief overview of the ### Broadcasting -One of the coolest features of Numpy is _broadcasting_<sup>3</sup>. +One of the coolest features of Numpy is *broadcasting*<sup>3</sup>. Broadcasting allows you to perform element-wise operations on arrays which have a different shape. For each axis in the two arrays, Numpy will implicitly expand the shape of the smaller axis to match the shape of the larger one. You @@ -963,9 +958,9 @@ correct: > <sup>4</sup> Even though these are FLIRT transforms, this is just a toy > example. Look -> [here](https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FLIRT/FAQ#What_is_the_format_of_the_matrix_used_by_FLIRT.2C_and_how_does_it_relate_to_the_transformation_parameters.3F) +> [here](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/fsl.transform.flirt.html) > and -> [here](https://git.fmrib.ox.ac.uk/fsl/fslpy/blob/1.6.2/fsl/utils/transform.py#L537) +> [here](https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FLIRT/FAQ#What_is_the_format_of_the_matrix_used_by_FLIRT.2C_and_how_does_it_relate_to_the_transformation_parameters.3F) > if you actually need to work with FLIRT transforms. diff --git a/getting_started/05_nifti.ipynb b/getting_started/05_nifti.ipynb index 0379ccf60db6ab2e28fc6cd2f25c026cc5a829e6..9d8551e0970ce313c6801143e06d5b4859db3b2d 100644 --- a/getting_started/05_nifti.ipynb +++ b/getting_started/05_nifti.ipynb @@ -6,7 +6,17 @@ "source": [ "# NIfTI images and python\n", "\n", - "The [nibabel](http://nipy.org/nibabel/) module is used to read and write NIfTI images and also some other medical imaging formats (e.g., ANALYZE, GIFTI, MINC, MGH). This module is included within the FSL python environment.\n", + "The [`nibabel`](http://nipy.org/nibabel/) module is used to read and write NIfTI\n", + "images and also some other medical imaging formats (e.g., ANALYZE, GIFTI,\n", + "MINC, MGH). `nibabel` is included within the FSL python environment.\n", + "\n", + "\n", + "Building upon `nibabel`, the\n", + "[`fslpy`](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/) library\n", + "contains a number of FSL-specific classes and functions which you may find\n", + "useful. But let's start with `nibabel` - `fslpy` is introduced in a different\n", + "practical (`advanced_topics/08_fslpy.ipynb`).\n", + "\n", "\n", "## Contents\n", "\n", @@ -36,10 +46,12 @@ "import os.path as op\n", "filename = op.expandvars('${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz')\n", "imobj = nib.load(filename, mmap=False)\n", + "\n", "# display header object\n", "imhdr = imobj.header\n", - "# extract data (as an numpy array)\n", - "imdat = imobj.get_data().astype(float)\n", + "\n", + "# extract data (as a numpy array)\n", + "imdat = imobj.get_fdata()\n", "print(imdat.shape)" ] }, @@ -47,29 +59,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Make sure you use the full filename, including the .nii.gz extension.\n", + "> Make sure you use the full filename, including the `.nii.gz` extension.\n", + "> `fslpy` provides FSL-like automatic file suffix detection though.\n", "\n", + "> We use the `expandvars()` function above to insert the FSLDIR\n", + "> environmental variable into our string. This function is\n", + "> discussed more fully in the file management practical.\n", "\n", - "> We use the expandvars() function above to insert the FSLDIR\n", - ">environmental variable into our string. This function is\n", - ">discussed more fully in the file management practical.\n", - " \n", - "Reading the data off the disk is not done until `get_data()` is called.\n", + "Reading the data off the disk is not done until `get_fdata()` is called.\n", "\n", "> Pitfall:\n", ">\n", - "> The option `mmap=False`is necessary as turns off memory mapping, which otherwise would be invoked for uncompressed NIfTI files but not for compressed files. Since some functionality behaves differently on memory mapped objects, it is advisable to turn this off.\n", + "> The option `mmap=False` disables memory mapping, which would otherwise be\n", + "> invoked for uncompressed NIfTI files but not for compressed files. Since\n", + "> some functionality behaves differently on memory mapped objects, it is\n", + "> advisable to turn this off unless you specifically want it.\n", "\n", "Once the data is read into a numpy array then it is easily manipulated.\n", "\n", - "> We recommend converting it to float at the start to avoid problems with integer arithmetic and overflow, though this is not compulsory.\n", + "> The `get_fdata` method will return floating point data, regardless of the\n", + "> underlying image data type. If you want the image data in the type that it\n", + "> is stored (e.g. integer ROI labels), then use\n", + "> `imdat = np.asanyarray(imobj.dataobj)` instead.\n", "\n", "---\n", "\n", "<a class=\"anchor\" id=\"header-info\"></a>\n", "## Header info\n", "\n", - "There are many methods available on the header object - for example, look at `dir(imhdr)` or `help(imhdr)` or the [nibabel webpage about NIfTI images](http://nipy.org/nibabel/nifti_images.html)\n", + "There are many methods available on the header object - for example, look at\n", + "`dir(imhdr)` or `help(imhdr)` or the [nibabel webpage about NIfTI\n", + "images](http://nipy.org/nibabel/nifti_images.html)\n", "\n", "<a class=\"anchor\" id=\"voxel-sizes\"></a>\n", "### Voxel sizes\n", @@ -137,7 +157,11 @@ "<a class=\"anchor\" id=\"writing-images\"></a>\n", "## Writing images\n", "\n", - "If you have created a modified image by making or modifying a numpy array then you need to put this into a NIfTI image object in order to save it to a file. The easiest way to do this is to copy all the header info from an existing image like this:" + "\n", + "If you have created a modified image by making or modifying a numpy array then\n", + "you need to put this into a NIfTI image object in order to save it to a file.\n", + "The easiest way to do this is to copy all the header info from an existing\n", + "image like this:" ] }, { @@ -156,7 +180,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "where `newdata` is the numpy array (the above is a random example only) and `imhdr` is the existing image header (as above).\n", + "where `newdata` is the numpy array (the above is a random example only) and\n", + "`imhdr` is the existing image header (as above).\n", "\n", "> It is possible to also just pass in an affine matrix rather than a\n", "> copied header, but we *strongly* recommend against this if you are\n", @@ -167,15 +192,24 @@ "> whenever possible, and just use the affine matrix option if you are\n", "> creating an entirely separate image, like a simulation.\n", "\n", - "If the voxel size of the image is different, then extra modifications will be required. For this, or for building an image from scratch, see the [nibabel documentation](http://nipy.org/nibabel/nifti_images.html) on NIfTI images.\n", + "If the voxel size of the image is different, then extra modifications will be\n", + "required. Take a look at the `fslpy` practical for some extra image\n", + "manipulation options, including cropping and resampling\n", + "(`advanced_topics/08_fslpy.ipynb`).\n", "\n", "---\n", "\n", - "<a class=\"anchor\" id=\"exercise\"></a>\n", + "\n", + "<a class=\"anchor\" id=\"exercises\"></a>\n", "## Exercise\n", "\n", - "Write some code to read in a 4D fMRI image (you can find one [here] if\n", - "you don't have one handy), calculate the tSNR and then save the 3D result." + "\n", + "Write some code to read in a 4D fMRI image (you can find one\n", + "[here](http://www.fmrib.ox.ac.uk/~mark/files/av.nii.gz) if you don't have one\n", + "handy), calculate the tSNR and then save the 3D result.\n", + "\n", + "> The tSNR of a time series signal is simply its mean divided by its standard\n", + "> deviation." ] }, { diff --git a/getting_started/05_nifti.md b/getting_started/05_nifti.md index 5e554469539e111084f5ae87aa29ad8c9f534316..67139c538b3f79da2dd24057f8e82acaae4cebe7 100644 --- a/getting_started/05_nifti.md +++ b/getting_started/05_nifti.md @@ -1,6 +1,16 @@ # NIfTI images and python -The [nibabel](http://nipy.org/nibabel/) module is used to read and write NIfTI images and also some other medical imaging formats (e.g., ANALYZE, GIFTI, MINC, MGH). This module is included within the FSL python environment. +The [`nibabel`](http://nipy.org/nibabel/) module is used to read and write NIfTI +images and also some other medical imaging formats (e.g., ANALYZE, GIFTI, +MINC, MGH). `nibabel` is included within the FSL python environment. + + +Building upon `nibabel`, the +[`fslpy`](https://users.fmrib.ox.ac.uk/~paulmc/fsleyes/fslpy/latest/) library +contains a number of FSL-specific classes and functions which you may find +useful. But let's start with `nibabel` - `fslpy` is introduced in a different +practical (`advanced_topics/08_fslpy.ipynb`). + ## Contents @@ -24,36 +34,46 @@ import nibabel as nib import os.path as op filename = op.expandvars('${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz') imobj = nib.load(filename, mmap=False) + # display header object imhdr = imobj.header -# extract data (as an numpy array) -imdat = imobj.get_data().astype(float) + +# extract data (as a numpy array) +imdat = imobj.get_fdata() print(imdat.shape) ``` -> Make sure you use the full filename, including the .nii.gz extension. +> Make sure you use the full filename, including the `.nii.gz` extension. +> `fslpy` provides FSL-like automatic file suffix detection though. +> We use the `expandvars()` function above to insert the FSLDIR +> environmental variable into our string. This function is +> discussed more fully in the file management practical. -> We use the expandvars() function above to insert the FSLDIR ->environmental variable into our string. This function is ->discussed more fully in the file management practical. - -Reading the data off the disk is not done until `get_data()` is called. +Reading the data off the disk is not done until `get_fdata()` is called. > Pitfall: > -> The option `mmap=False`is necessary as turns off memory mapping, which otherwise would be invoked for uncompressed NIfTI files but not for compressed files. Since some functionality behaves differently on memory mapped objects, it is advisable to turn this off. +> The option `mmap=False` disables memory mapping, which would otherwise be +> invoked for uncompressed NIfTI files but not for compressed files. Since +> some functionality behaves differently on memory mapped objects, it is +> advisable to turn this off unless you specifically want it. Once the data is read into a numpy array then it is easily manipulated. -> We recommend converting it to float at the start to avoid problems with integer arithmetic and overflow, though this is not compulsory. +> The `get_fdata` method will return floating point data, regardless of the +> underlying image data type. If you want the image data in the type that it +> is stored (e.g. integer ROI labels), then use +> `imdat = np.asanyarray(imobj.dataobj)` instead. --- <a class="anchor" id="header-info"></a> ## Header info -There are many methods available on the header object - for example, look at `dir(imhdr)` or `help(imhdr)` or the [nibabel webpage about NIfTI images](http://nipy.org/nibabel/nifti_images.html) +There are many methods available on the header object - for example, look at +`dir(imhdr)` or `help(imhdr)` or the [nibabel webpage about NIfTI +images](http://nipy.org/nibabel/nifti_images.html) <a class="anchor" id="voxel-sizes"></a> ### Voxel sizes @@ -91,7 +111,11 @@ print(affine, code) <a class="anchor" id="writing-images"></a> ## Writing images -If you have created a modified image by making or modifying a numpy array then you need to put this into a NIfTI image object in order to save it to a file. The easiest way to do this is to copy all the header info from an existing image like this: + +If you have created a modified image by making or modifying a numpy array then +you need to put this into a NIfTI image object in order to save it to a file. +The easiest way to do this is to copy all the header info from an existing +image like this: ``` newdata = imdat * imdat @@ -99,7 +123,9 @@ newhdr = imhdr.copy() newobj = nib.nifti1.Nifti1Image(newdata, None, header=newhdr) nib.save(newobj, "mynewname.nii.gz") ``` -where `newdata` is the numpy array (the above is a random example only) and `imhdr` is the existing image header (as above). + +where `newdata` is the numpy array (the above is a random example only) and +`imhdr` is the existing image header (as above). > It is possible to also just pass in an affine matrix rather than a > copied header, but we *strongly* recommend against this if you are @@ -110,17 +136,25 @@ where `newdata` is the numpy array (the above is a random example only) and `imh > whenever possible, and just use the affine matrix option if you are > creating an entirely separate image, like a simulation. -If the voxel size of the image is different, then extra modifications will be required. For this, or for building an image from scratch, see the [nibabel documentation](http://nipy.org/nibabel/nifti_images.html) on NIfTI images. +If the voxel size of the image is different, then extra modifications will be +required. Take a look at the `fslpy` practical for some extra image +manipulation options, including cropping and resampling +(`advanced_topics/08_fslpy.ipynb`). --- -<a class="anchor" id="exercise"></a> + +<a class="anchor" id="exercises"></a> ## Exercise -Write some code to read in a 4D fMRI image (you can find one [here](http://www.fmrib.ox.ac.uk/~mark/files/av.nii.gz) if -you don't have one handy), calculate the tSNR and then save the 3D result. + +Write some code to read in a 4D fMRI image (you can find one +[here](http://www.fmrib.ox.ac.uk/~mark/files/av.nii.gz) if you don't have one +handy), calculate the tSNR and then save the 3D result. + +> The tSNR of a time series signal is simply its mean divided by its standard +> deviation. ``` # Calculate tSNR ``` - diff --git a/getting_started/06_plotting.ipynb b/getting_started/06_plotting.ipynb index cb00bc0a683e41a774668a0c5b05660d2604d340..447ff90cc5f5cb354107d49a3027bf228cec92ff 100644 --- a/getting_started/06_plotting.ipynb +++ b/getting_started/06_plotting.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -59,30 +59,9 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x119885748>" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11b4c7908>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -114,27 +93,9 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#348ABD\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x1197cacf8>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "hdl = plt.plot(x, cosx)\n", "print(hdl[0].get_color())\n", @@ -158,20 +119,9 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11a23c128>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "r = np.random.rand(1000)\n", "n,bins,_ = plt.hist((r-0.5)**2, bins=30)" @@ -194,30 +144,9 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.legend.Legend at 0x11a50dfd0>" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x119def588>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "samp1 = r[0:10]\n", "samp2 = r[10:20]\n", @@ -241,34 +170,13 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.1039996137295216, 0.96287533552434978)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFdCAYAAAB1gNVOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xt8XFW99/HPb5I0bdKLYLAttpqUagsqV+kBsT0c+lC8VI4I50EGRFIhqKECj/Z4a0uP4lPUI9oLHFoPj609XkCjL7VVQYhKFVNEpVURSmq5BEqhFWjpJG0yWc8fMwm5tpnJ7Nl77Xzfr1demp29Z35f19i99t5rrTHnHCIiIjKyJMIuQERERIpPHQAREZERSB0AERGREUgdABERkRFIHQAREZERSB0AERGREUgdABERkRGoNOwCBnLvvfe+GjgPeBxoC7caERERr4wGqoG75s6du3ewnSLZASBz8v9W2EUUUmNjI+ecc07YZRSccvlFufyiXP6JWLZLgW8P9keL4kqA995779uA31ZXVzN69OiwyymI2tpavvGNb4RdRsEpl1+Uyy9xyHXgAJSUQM9/yuOQazBFz5ZOU9bQwOjbb4eDBwHYd+65PHrhhQBnzZ079/7BDo3qHYA2gNGjR1NRURF2LQVRUlISmyw9KZdflMsvPufavdt48MFSHn88QWmp48QT05x4YprKSr9zHUkxsyV27KDymmso3bKle1u6uprU/Pldvx72EboGARbJ7t27wy4hEMrlF+Xyi6+59u2DjRvL+POfS9i/33jhhQS//nUpTU2Za05fcw1FUbKl05TfeivjZ8/udfJvq6tj3+bNpE86aUgvE9U7ALGza9eusEsIhHL5Rbn84muulpYEzz9vfbYa27aVcNJJHd7mGopiZCt58EEqFi/u/j1dXU1q9Wo63va2zIZUakivozsARXLyySeHXUIglMsvyuUXX3MdOGBA3w5A5hF1W5t5m2soipEt/U//xMHLLwdeuervPvnnQHcAiuTCzICM2FEuvyiXX3zNdfTRnZg5nOvdCRg/HsaPd97mGopiZUt97nMcuvhiOs48M+/XiOosgFOBP8ycOTO2A0VEROLq4EG4++4y/vrXBF13AkpKHOee28HJJ6fDLW4ESKVSPPLIIwCnzZ0794+D7ac7ACIiUlDl5XDOOe3U1CT4+99LKC93vOENaaqro3fBGVmtrTBmTKBvoTEARVJfXx92CYFQLr8ol198zlVZCW9+cyfnn9/Oeed1MG2aI5E9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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11b481630>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = plt.subplots()\n", "# setup some sizes for each point (arbitrarily example here)\n", - "ssize = 100*abs(samp1-samp2) + 10 \n", + "ssize = 100*abs(samp1-samp2) + 10\n", "ax.scatter(samp1, samp2, s=ssize, alpha=0.5)\n", "# now add the y=x line\n", "allsamps = np.hstack((samp1,samp2))\n", @@ -298,30 +206,9 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.text.Text at 0x119d32a90>" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x11a5331d0>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.subplot(2, 1, 1)\n", "plt.plot(x,cosx, '.-')\n", @@ -345,30 +232,43 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x1197ca390>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import nibabel as nib\n", "import os.path as op\n", "nim = nib.load(op.expandvars('${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz'), mmap=False)\n", "imdat = nim.get_data().astype(float)\n", - "plt.imshow(imdat[:,:,70], cmap=plt.cm.gray)\n", + "imslc = imdat[:,:,70]\n", + "plt.imshow(imslc, cmap=plt.cm.gray)\n", "plt.colorbar()\n", "plt.grid('off')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that matplotlib will use the **voxel data orientation**, and that\n", + "configuring the plot orientation is **your responsibility**. To rotate a\n", + "slice, simply transpose the data (`.T`). To invert the data along along an\n", + "axis, you don't need to modify the data - simply swap the axis limits around:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.imshow(imslc.T, cmap=plt.cm.gray)\n", + "plt.xlim(reversed(plt.xlim()))\n", + "plt.ylim(reversed(plt.ylim()))\n", + "plt.colorbar()\n", + "plt.grid('off')\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -379,30 +279,9 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<mpl_toolkits.mplot3d.art3d.Line3DCollection at 0x11b74afd0>" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<matplotlib.figure.Figure at 0x1197d75f8>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Taken from https://matplotlib.org/gallery/mplot3d/wire3d.html#sphx-glr-gallery-mplot3d-wire3d-py\n", "\n", @@ -453,47 +332,15 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Make up some data and do the funky plot" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/getting_started/06_plotting.md b/getting_started/06_plotting.md index 00e8e695c15c7f934da66b76f72a0d481a6f9753..ddcd7ecb70dd1a6da5369ace7a0e270ad4de55a7 100644 --- a/getting_started/06_plotting.md +++ b/getting_started/06_plotting.md @@ -109,7 +109,7 @@ there is also an alternative: `scatter()` ``` fig, ax = plt.subplots() # setup some sizes for each point (arbitrarily example here) -ssize = 100*abs(samp1-samp2) + 10 +ssize = 100*abs(samp1-samp2) + 10 ax.scatter(samp1, samp2, s=ssize, alpha=0.5) # now add the y=x line allsamps = np.hstack((samp1,samp2)) @@ -153,11 +153,28 @@ import nibabel as nib import os.path as op nim = nib.load(op.expandvars('${FSLDIR}/data/standard/MNI152_T1_1mm.nii.gz'), mmap=False) imdat = nim.get_data().astype(float) -plt.imshow(imdat[:,:,70], cmap=plt.cm.gray) +imslc = imdat[:,:,70] +plt.imshow(imslc, cmap=plt.cm.gray) plt.colorbar() plt.grid('off') ``` +Note that matplotlib will use the **voxel data orientation**, and that +configuring the plot orientation is **your responsibility**. To rotate a +slice, simply transpose the data (`.T`). To invert the data along along an +axis, you don't need to modify the data - simply swap the axis limits around: + + +``` +plt.imshow(imslc, cmap=plt.cm.gray) +plt.xlim(reversed(plt.xlim())) +plt.ylim(reversed(plt.ylim())) +plt.colorbar() +plt.grid('off') + +``` + + <a class="anchor" id="3D-plots"></a> ### 3D plots @@ -208,5 +225,3 @@ example code from the docs). ``` # Make up some data and do the funky plot ``` - - diff --git a/getting_started/07_jupyter.ipynb b/getting_started/07_jupyter.ipynb index d80ba601db7dd834af4c3d36c9b56055f3565e63..4cabf6b81bfef791ee40f0cc93d2517e51fe5d64 100644 --- a/getting_started/07_jupyter.ipynb +++ b/getting_started/07_jupyter.ipynb @@ -5,14 +5,27 @@ "metadata": {}, "source": [ "# Jupyter notebook and IPython\n", - "Our main interaction with python so far has been through the [Jupyter notebook](http://jupyter.org/).\n", - "These notebooks are extremely popular these days within the python scientific community, however they support many more languages, such as R and octave (and even matlab with the right [plugin](https://github.com/Calysto/matlab_kernel)).\n", - "They allow for interactive analysis of your data interspersed by explanatory notes (including LaTeX) with inline plotting.\n", - "However, they can not be called as scripts on the command line or be imported from other python code, which makes them rather stand-alone.\n", - "This makes them more useful for analysis that needs to be reproducible, but does not need to be replicated on different datasets (e.g., making a plot for a paper).\n", "\n", - "For more ad-hoc analysis it can be useful to just use the command line (i.e., a REPL).\n", - "We strongly recommend to use the IPython (available as `ipython` or `fslipython`) rather than default python REPL (available through `python` or `fslpython`)\n", + "Our main interaction with python so far has been through the [Jupyter\n", + "notebook](http://jupyter.org/). These notebooks are extremely popular these\n", + "days within the python scientific community, however they support many more\n", + "languages, such as R and octave (and even matlab with the right\n", + "[plugin](https://github.com/Calysto/matlab_kernel)). They allow for\n", + "interactive analysis of your data interspersed by explanatory notes (including\n", + "LaTeX) with inline plotting. However, they can not be called as scripts on\n", + "the command line or be imported from other python code, which makes them\n", + "rather stand-alone. This makes them more useful for analysis that needs to be\n", + "reproducible, but does not need to be replicated on different datasets (e.g.,\n", + "making a plot for a paper).\n", + "\n", + "For more ad-hoc analysis it can be useful to just use the command line (i.e.,\n", + "a REPL<sup>*</sup>). We strongly recommend to use the IPython (available as\n", + "`fslipython` or `ipython`) rather than default python REPL (available through\n", + "`fslpython` or `python`), as IPython is much more user-friendly.\n", + "\n", + "> <sup>*</sup>REPL = **R**ead-**E**val-**P**rint-**L**oop - the geeky term for\n", + "> an interactive prompt. You may hear younger generations using the term\n", + "> [ESRR](https://www.youtube.com/watch?v=wBoRkg5-Ieg) instead.\n", "\n", "Both Ipython and the jupyter notebook offer a whole range of magic commands, which all start with a `%` sign.\n", "* A magic command starting with a single `%` sign will only affect the single line.\n", diff --git a/getting_started/07_jupyter.md b/getting_started/07_jupyter.md index d5e9de6bada6166e8dd93e0c0d8a1b40251983dc..221d1f951797cbecf8df8a5db9eddd768156b101 100644 --- a/getting_started/07_jupyter.md +++ b/getting_started/07_jupyter.md @@ -1,12 +1,25 @@ # Jupyter notebook and IPython -Our main interaction with python so far has been through the [Jupyter notebook](http://jupyter.org/). -These notebooks are extremely popular these days within the python scientific community, however they support many more languages, such as R and octave (and even matlab with the right [plugin](https://github.com/Calysto/matlab_kernel)). -They allow for interactive analysis of your data interspersed by explanatory notes (including LaTeX) with inline plotting. -However, they can not be called as scripts on the command line or be imported from other python code, which makes them rather stand-alone. -This makes them more useful for analysis that needs to be reproducible, but does not need to be replicated on different datasets (e.g., making a plot for a paper). -For more ad-hoc analysis it can be useful to just use the command line (i.e., a REPL). -We strongly recommend to use the IPython (available as `ipython` or `fslipython`) rather than default python REPL (available through `python` or `fslpython`) +Our main interaction with python so far has been through the [Jupyter +notebook](http://jupyter.org/). These notebooks are extremely popular these +days within the python scientific community, however they support many more +languages, such as R and octave (and even matlab with the right +[plugin](https://github.com/Calysto/matlab_kernel)). They allow for +interactive analysis of your data interspersed by explanatory notes (including +LaTeX) with inline plotting. However, they can not be called as scripts on +the command line or be imported from other python code, which makes them +rather stand-alone. This makes them more useful for analysis that needs to be +reproducible, but does not need to be replicated on different datasets (e.g., +making a plot for a paper). + +For more ad-hoc analysis it can be useful to just use the command line (i.e., +a REPL<sup>*</sup>). We strongly recommend to use the IPython (available as +`fslipython` or `ipython`) rather than default python REPL (available through +`fslpython` or `python`), as IPython is much more user-friendly. + +> <sup>*</sup>REPL = **R**ead-**E**val-**P**rint-**L**oop - the geeky term for +> an interactive prompt. You may hear younger generations using the term +> [ESRR](https://www.youtube.com/watch?v=wBoRkg5-Ieg) instead. Both Ipython and the jupyter notebook offer a whole range of magic commands, which all start with a `%` sign. * A magic command starting with a single `%` sign will only affect the single line. @@ -206,4 +219,3 @@ We can now run this script You can access the full history of your session using `%history`. To save the history to a file use `%history -f <filename>`. You will probably have to clean a lot of erroneous commands you typed from that file before you are able to run it as a script. - diff --git a/getting_started/08_scripts.ipynb b/getting_started/08_scripts.ipynb index 16faa7ec08486151715108408828cb714ff3908a..2fa5d9d389cec346c1b77011b25f604861b43bf2 100644 --- a/getting_started/08_scripts.ipynb +++ b/getting_started/08_scripts.ipynb @@ -6,10 +6,19 @@ "source": [ "# Callable scripts in python\n", "\n", - "In this tutorial we will cover how to write simple stand-alone scripts in python that can be used as alternatives to bash scripts.\n", + "In this tutorial we will cover how to write simple stand-alone scripts in\n", + "python that can be used as alternatives to bash scripts.\n", "\n", - "There are some code blocks within this webpage, but for this practical we _**strongly\n", - "recommend that you write the code in an IDE or editor**_ instead and then run the scripts from a terminal.\n", + "**Important**: Throughout this series of practicals we have been working\n", + "entirely within the Jupyter notebook environment. But it's now time to\n", + "graduate to writing *real* Python scripts, and running them within a\n", + "*real* enviromnent.\n", + "\n", + "So within this practical there are some code blocks, but instead of running\n", + "them inside the notebook we **strongly recommend that you write the code in\n", + "an IDE or editor**,and then run the scripts from a terminal. [Don't\n", + "panic](https://www.youtube.com/watch?v=KojYatpLPSE), we're right here,\n", + "ready to help.\n", "\n", "## Contents\n", "\n", @@ -73,6 +82,7 @@ "outputs": [], "source": [ "import subprocess as sp\n", + "import shlex\n", "sp.run(['ls', '-la'])" ] }, @@ -80,6 +90,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "> Passing the arguments as a list is good practice and improves the safety of\n", + "> the call.\n", + "\n", "To suppress the output do this:" ] }, @@ -105,7 +118,7 @@ "metadata": {}, "outputs": [], "source": [ - "spobj = sp.run('ls -la'.split(), stdout = sp.PIPE)\n", + "spobj = sp.run(shlex.split('ls -la'), stdout = sp.PIPE)\n", "sout = spobj.stdout.decode('utf-8')\n", "print(sout)" ] @@ -114,7 +127,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> Note that the `decode` call in the middle line converts the string from a byte string to a normal string. In Python 3 there is a distinction between strings (sequences of characters, possibly using multiple bytes to store each character) and bytes (sequences of bytes). The world has moved on from ASCII, so in this day and age, this distinction is absolutely necessary, and Python does a fairly good job of it.\n", + "> shlex.split and shlex.quote are functions designed to break up and quote\n", + "> (respectively) shell command lines and arguments. Quoting of user provided\n", + "> arguments helps to prevent unintended consequences from inappropriate inputs.\n", + ">\n", + "> Note that the `decode` call in the middle line converts the string from a byte\n", + "> string to a normal string. In Python 3 there is a distinction between strings\n", + "> (sequences of characters, possibly using multiple bytes to store each\n", + "> character) and bytes (sequences of bytes). The world has moved on from ASCII,\n", + "> so in this day and age, this distinction is absolutely necessary, and Python\n", + "> does a fairly good job of it.\n", "\n", "If the output is numerical then this can be extracted like this:" ] @@ -129,8 +151,9 @@ "fsldir = os.getenv('FSLDIR')\n", "spobj = sp.run([fsldir+'/bin/fslstats', fsldir+'/data/standard/MNI152_T1_1mm_brain', '-V'], stdout = sp.PIPE)\n", "sout = spobj.stdout.decode('utf-8')\n", - "vol_vox = float(sout.split()[0])\n", - "vol_mm = float(sout.split()[1])\n", + "results = sout.split()\n", + "vol_vox = float(results[0])\n", + "vol_mm = float(results[1])\n", "print('Volumes are: ', vol_vox, ' in voxels and ', vol_mm, ' in mm')" ] }, @@ -147,6 +170,7 @@ "metadata": {}, "outputs": [], "source": [ + "import shlex\n", "commands = \"\"\"\n", "{fsldir}/bin/fslmaths {t1} -bin {t1_mask}\n", "{fsldir}/bin/fslmaths {t2} -mas {t1_mask} {t2_masked}\n", @@ -156,10 +180,10 @@ "commands = commands.format(t1 = 't1.nii.gz', t1_mask = 't1_mask', t2 = 't2', t2_masked = 't2_masked', fsldir = fsldirpath)\n", "\n", "sout=[]\n", - "for cmd in commands.split('\\n'):\n", + "for cmd in commands.splitlines():\n", " if cmd: # avoids empty strings getting passed to sp.run()\n", " print('Running command: ', cmd)\n", - " spobj = sp.run(cmd.split(), stdout = sp.PIPE)\n", + " spobj = sp.run(shlex.split(cmd), stdout = sp.PIPE)\n", " sout.append(spobj.stdout.decode('utf-8'))" ] }, @@ -167,6 +191,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "> Don't be tempted to use the shell=True argument to subprocess.run, especially\n", + "> if you are dealing with user input - if the user gave\n", + "> *myfile; rm -f ~*\n", + "> as a file name and you called the command with shell=True **and** you\n", + "> passed the command in as a string then bad things happen!\n", + ">\n", + "> The safe way to use these kinds of inputs is to pass them through shlex.quote()\n", + "> before sending.\n", + ">\n", + "> ```a = shlex.quote('myfile; rm -f ~')\n", + "> cmd = \"ls {}\".format(a)\n", + "> sp.run(shlex.split(cmd))```\n", + "\n", + "\n", + "> If you're calling lots of FSL tools, the `fslpy` library has a number of\n", + "> *wrapper* functions, which can be used to call an FSL command directly\n", + "> from Python - check out `advanced_topics/08_fslpy.ipynb`.\n", + "\n", "<a class=\"anchor\" id=\"command-line-arguments\"></a>\n", "## Command line arguments\n", "\n", @@ -190,6 +232,8 @@ "source": [ "For more sophisticated argument parsing you can use `argparse` - good documentation and examples of this can be found on the web.\n", "\n", + "> argparse can automatically produce help text for the user, validate input etc., so it is strongly recommended.\n", + "\n", "---\n", "\n", "<a class=\"anchor\" id=\"example-script\"></a>\n", @@ -213,7 +257,7 @@ "outfile=$2\n", "# mask input image with MNI\n", "$FSLDIR/bin/fslmaths $infile -mas $FSLDIR/data/standard/MNI152_T1_1mm_brain $outfile\n", - "# calculate volumes of masked image \n", + "# calculate volumes of masked image\n", "vv=`$FSLDIR/bin/fslstats $outfile -V`\n", "vol_vox=`echo $vv | awk '{ print $1 }'`\n", "vol_mm=`echo $vv | awk '{ print $2 }'`\n", @@ -244,11 +288,12 @@ "outfile = sys.argv[2]\n", "# mask input image with MNI\n", "spobj = sp.run([fsldir+'/bin/fslmaths', infile, '-mas', fsldir+'/data/standard/MNI152_T1_1mm_brain', outfile], stdout = sp.PIPE)\n", - "# calculate volumes of masked image \n", + "# calculate volumes of masked image\n", "spobj = sp.run([fsldir+'/bin/fslstats', outfile, '-V'], stdout = sp.PIPE)\n", "sout = spobj.stdout.decode('utf-8')\n", - "vol_vox = float(sout.split()[0])\n", - "vol_mm = float(sout.split()[1])\n", + "results = sout.split()\n", + "vol_vox = float(results[0])\n", + "vol_mm = float(results[1])\n", "print('Volumes are: ', vol_vox, ' in voxels and ', vol_mm, ' in mm')" ] }, @@ -275,25 +320,7 @@ ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/getting_started/08_scripts.md b/getting_started/08_scripts.md index ec759f3f5b655e1c3d32ab881f1bc74b8e5dce32..ab06a61c8777523ff59d7596091eb63070142b52 100644 --- a/getting_started/08_scripts.md +++ b/getting_started/08_scripts.md @@ -1,9 +1,18 @@ # Callable scripts in python -In this tutorial we will cover how to write simple stand-alone scripts in python that can be used as alternatives to bash scripts. +In this tutorial we will cover how to write simple stand-alone scripts in +python that can be used as alternatives to bash scripts. -There are some code blocks within this webpage, but for this practical we _**strongly -recommend that you write the code in an IDE or editor**_ instead and then run the scripts from a terminal. +**Important**: Throughout this series of practicals we have been working +entirely within the Jupyter notebook environment. But it's now time to +graduate to writing *real* Python scripts, and running them within a +*real* enviromnent. + +So within this practical there are some code blocks, but instead of running +them inside the notebook we **strongly recommend that you write the code in +an IDE or editor**,and then run the scripts from a terminal. [Don't +panic](https://www.youtube.com/watch?v=KojYatpLPSE), we're right here, +ready to help. ## Contents @@ -63,10 +72,10 @@ print(sout) > arguments helps to prevent unintended consequences from inappropriate inputs. > > Note that the `decode` call in the middle line converts the string from a byte -> string to a normal string. In Python 3 there is a distinction between strings -> (sequences of characters, possibly using multiple bytes to store each -> character) and bytes (sequences of bytes). The world has moved on from ASCII, -> so in this day and age, this distinction is absolutely necessary, and Python +> string to a normal string. In Python 3 there is a distinction between strings +> (sequences of characters, possibly using multiple bytes to store each +> character) and bytes (sequences of bytes). The world has moved on from ASCII, +> so in this day and age, this distinction is absolutely necessary, and Python > does a fairly good job of it. If the output is numerical then this can be extracted like this: @@ -100,7 +109,7 @@ for cmd in commands.splitlines(): sout.append(spobj.stdout.decode('utf-8')) ``` -> Don't be tempted to use the shell=True argument to subprocess.run, especially +> Don't be tempted to use the shell=True argument to subprocess.run, especially > if you are dealing with user input - if the user gave > *myfile; rm -f ~* > as a file name and you called the command with shell=True **and** you @@ -113,6 +122,11 @@ for cmd in commands.splitlines(): > cmd = "ls {}".format(a) > sp.run(shlex.split(cmd))``` + +> If you're calling lots of FSL tools, the `fslpy` library has a number of +> *wrapper* functions, which can be used to call an FSL command directly +> from Python - check out `advanced_topics/08_fslpy.ipynb`. + <a class="anchor" id="command-line-arguments"></a> ## Command line arguments @@ -144,7 +158,7 @@ infile=$1 outfile=$2 # mask input image with MNI $FSLDIR/bin/fslmaths $infile -mas $FSLDIR/data/standard/MNI152_T1_1mm_brain $outfile -# calculate volumes of masked image +# calculate volumes of masked image vv=`$FSLDIR/bin/fslstats $outfile -V` vol_vox=`echo $vv | awk '{ print $1 }'` vol_mm=`echo $vv | awk '{ print $2 }'` @@ -166,7 +180,7 @@ infile = sys.argv[1] outfile = sys.argv[2] # mask input image with MNI spobj = sp.run([fsldir+'/bin/fslmaths', infile, '-mas', fsldir+'/data/standard/MNI152_T1_1mm_brain', outfile], stdout = sp.PIPE) -# calculate volumes of masked image +# calculate volumes of masked image spobj = sp.run([fsldir+'/bin/fslstats', outfile, '-V'], stdout = sp.PIPE) sout = spobj.stdout.decode('utf-8') results = sout.split() @@ -186,4 +200,3 @@ mean or a _sum_ (and hence can do something that fslstats cannot!) ``` # Don't write anything here - do it in a standalone script! ``` - diff --git a/getting_started/09_pandas.ipynb b/getting_started/09_pandas.ipynb index 7c50300ad7b5eb18280f746acaff9e0e8bd4ec39..4c330f68381c403eadc97b50e1fe56c5cef716ff 100644 --- a/getting_started/09_pandas.ipynb +++ b/getting_started/09_pandas.ipynb @@ -4,21 +4,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Pandas" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas is a data analysis library focussed on the cleaning and exploration of tabular data.\n", + "# Pandas\n", + "\n", + "Pandas is a data analysis library focused on the cleaning and exploration of\n", + "tabular data.\n", "\n", "Some useful links are:\n", "- [main website](https://pandas.pydata.org)\n", "- [documentation](http://pandas.pydata.org/pandas-docs/stable/)<sup>1</sup>\n", - "- [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/)<sup>1</sup> by Jake van der Plas\n", + "- [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/)<sup>1</sup> by\n", + " Jake van der Plas\n", "\n", - "<sup>1</sup> This tutorial borrows heavily from the pandas documentation and the Python Data Science Handbook" + "<sup>1</sup> This tutorial borrows heavily from the pandas documentation and\n", + "the Python Data Science Handbook" ] }, { @@ -29,6 +27,7 @@ "source": [ "%pylab inline\n", "import pandas as pd # pd is the usual abbreviation for pandas\n", + "import matplotlib.pyplot as plt # matplotlib for plotting\n", "import seaborn as sns # seaborn is the main plotting library for Pandas\n", "import statsmodels.api as sm # statsmodels fits linear models to pandas data\n", "import statsmodels.formula.api as smf\n", @@ -40,22 +39,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Loading in data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas supports a wide range of I/O tools to load from text files, binary files, and SQL databases. You can find a table with all formats [here](http://pandas.pydata.org/pandas-docs/stable/io.html)." + "> We will mostly be using `seaborn` instead of `matplotlib` for\n", + "> visualisation. But `seaborn` is actually an extension to `matplotlib`, so we\n", + "> are still using the latter under the hood.\n", + "\n", + "## Loading in data\n", + "\n", + "Pandas supports a wide range of I/O tools to load from text files, binary files,\n", + "and SQL databases. You can find a table with all formats\n", + "[here](http://pandas.pydata.org/pandas-docs/stable/io.html)." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv')\n", @@ -66,9 +64,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This loads the data into a [DataFrame](https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.html) object, which is the main object we will be interacting with in pandas. It represents a table of data.\n", - "\n", - "The other file formats all start with `pd.read_{format}`. Note that we can provide the URL to the dataset, rather than download it beforehand.\n", + "This loads the data into a\n", + "[`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)\n", + "object, which is the main object we will be interacting with in pandas. It\n", + "represents a table of data. The other file formats all start with\n", + "`pd.read_{format}`. Note that we can provide the URL to the dataset, rather\n", + "than download it beforehand.\n", "\n", "We can write out the dataset using `dataframe.to_{format}(<filename)`:" ] @@ -76,9 +77,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.to_csv('titanic_copy.csv', index=False) # we set index to False to prevent pandas from storing the row names" @@ -88,7 +87,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you can not connect to the internet, you can run the command below to load this locally stored titanic dataset" + "If you can not connect to the internet, you can run the command below to load\n", + "this locally stored titanic dataset" ] }, { @@ -105,15 +105,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the titanic dataset was also available to us as one of the standard datasets included with seaborn. We could load it from there using" + "Note that the titanic dataset was also available to us as one of the standard\n", + "datasets included with seaborn. We could load it from there using" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.load_dataset('titanic')" @@ -123,15 +122,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dataframes can also be created from other python objects, using pd.DataFrame.from_{other type}. The most useful of these is from_dict, which converts a mapping of the columns to a pandas DataFrame (i.e., table).\n" + "`Dataframes` can also be created from other python objects, using\n", + "`pd.DataFrame.from_{other type}`. The most useful of these is `from_dict`,\n", + "which converts a mapping of the columns to a pandas `DataFrame` (i.e., table)." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "pd.DataFrame.from_dict({\n", @@ -147,15 +146,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For many applications (e.g., ICA, machine learning input) you might want to extract your data as a numpy array. The underlying numpy array can be accessed using the `values` attribute" + "For many applications (e.g., ICA, machine learning input) you might want to\n", + "extract your data as a numpy array. The underlying numpy array can be accessed\n", + "using the `values` attribute" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.values" @@ -165,15 +164,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the type of the returned array is the most common type (in this case object). If you just want the numeric parts of the table you can use `select_dtype`, which selects specific columns based on their dtype:" + "Note that the type of the returned array is the most common type (in this case\n", + "object). If you just want the numeric parts of the table you can use\n", + "`select_dtypes`, which selects specific columns based on their dtype:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.select_dtypes(include=np.number).values" @@ -184,16 +183,14 @@ "metadata": {}, "source": [ "Note that the numpy array has no information on the column names or row indices.\n", - "\n", - "Alternatively, when you want to include the categorical variables in your later analysis (e.g., for machine learning), you can extract dummy variables using: " + "Alternatively, when you want to include the categorical variables in your later\n", + "analysis (e.g., for machine learning), you can extract dummy variables using:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "pd.get_dummies(titanic)" @@ -203,36 +200,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Accessing parts of the data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Documentation on indexing](http://pandas.pydata.org/pandas-docs/stable/indexing.html)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Selecting columns by name" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "## Accessing parts of the data\n", + "\n", + "[Documentation on indexing](http://pandas.pydata.org/pandas-docs/stable/indexing.html)\n", + "\n", + "### Selecting columns by name\n", + "\n", "Single columns can be selected using the normal python indexing:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic['embark_town']" @@ -242,15 +222,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If the column names are simple strings (not required) we can also access it directly as an attribute" + "If the column names are simple strings (not required) we can also access it\n", + "directly as an attribute" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.embark_town" @@ -260,17 +239,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this returns a pandas [Series](https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Series.html) rather than a DataFrame object. A Series is simply a 1-dimensional array representing a single column.\n", - "\n", - "Multiple columns can be returned by providing a list of columns names. This will return a DataFrame:" + "Note that this returns a pandas\n", + "[`Series`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html)\n", + "rather than a `DataFrame` object. A `Series` is simply a 1-dimensional array\n", + "representing a single column. Multiple columns can be returned by providing a\n", + "list of columns names. This will return a `DataFrame`:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic[['class', 'alive']]" @@ -280,15 +259,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that you have to provide a list here (square brackets). If you provide a tuple (round brackets) pandas will think you are trying to access a single column that has that tuple as a name:" + "Note that you have to provide a list here (square brackets). If you provide a\n", + "tuple (round brackets) pandas will think you are trying to access a single\n", + "column that has that tuple as a name:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic[('class', 'alive')]" @@ -298,29 +277,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this case there is no column called ('class', 'alive') leading to an error. Later on we will see some uses to having columns named like this." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Indexing rows by name or integer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Individual rows can be accessed based on their name (i.e., the index) or integer (i.e., which row it is in). In our current table this will give the same results. To ensure that these are different, let's sort our titanic dataset based on the passenger fare:" + "In this case there is no column called `('class', 'alive')` leading to an\n", + "error. Later on we will see some uses to having columns named like this.\n", + "\n", + "### Indexing rows by name or integer\n", + "\n", + "Individual rows can be accessed based on their name (i.e., the index) or integer\n", + "(i.e., which row it is in). In our current table this will give the same\n", + "results. To ensure that these are different, let's sort our titanic dataset\n", + "based on the passenger fare:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted = titanic.sort_values('fare')\n", @@ -331,17 +302,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the re-sorting did not change the values in the index (i.e., left-most column).\n", + "Note that the re-sorting did not change the values in the index (i.e., left-most\n", + "column).\n", "\n", - "We can select the first row of this newly sorted table using iloc" + "We can select the first row of this newly sorted table using `iloc`" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.iloc[0]" @@ -357,9 +327,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.loc[0]" @@ -369,15 +337,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this gives the same passenger as the first row of the initial table before sorting" + "Note that this gives the same passenger as the first row of the initial table\n", + "before sorting" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.iloc[0]" @@ -387,15 +354,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Another common way to access the first or last N rows of a table is using the head/tail methods" + "Another common way to access the first or last N rows of a table is using the\n", + "head/tail methods" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.head(3)" @@ -404,9 +370,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.tail(3)" @@ -416,15 +380,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that nearly all methods in pandas return a new Dataframe, which means that we can easily call another method on them" + "Note that nearly all methods in pandas return a new `Dataframe`, which means\n", + "that we can easily call another method on them" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.tail(10).head(5) # select the first 5 of the last 10 passengers in the database" @@ -433,9 +396,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic_sorted.iloc[-10:-5] # alternative way to get the same passengers" @@ -445,15 +406,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Exercise: use sorting and tail/head or indexing to find the 10 youngest passengers on the titanic. Try to do this on a single line by chaining calls to the titanic dataframe object" + "**Exercise**: use sorting and tail/head or indexing to find the 10 youngest\n", + "passengers on the titanic. Try to do this on a single line by chaining calls\n", + "to the titanic `DataFrame` object" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.sort_values..." @@ -463,22 +424,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Indexing rows by value" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "### Indexing rows by value\n", + "\n", "One final way to select specific columns is by their value" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic[titanic.sex == 'female'] # selects all females" @@ -487,9 +441,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# select all passengers older than 60 who departed from Southampton\n", @@ -500,17 +452,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this required typing \"titanic\" quite often. A quicker way to get the same result is using the `query` method, which is described in detail [here](http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-query-method) (note that using the `query` method is also faster and uses a lot less memory).\n", + "Note that this required typing `titanic` quite often. A quicker way to get the\n", + "same result is using the `query` method, which is described in detail\n", + "[here](http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-query-method)\n", + "(note that using the `query` method is also faster and uses a lot less\n", + "memory).\n", "\n", - "> You may have trouble using the query method with columns which have a name that cannot be used as a Python identifier." + "> You may have trouble using the `query` method with columns which have\n", + "a name that cannot be used as a Python identifier." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.query('(age > 60) & (embark_town == \"Southampton\")')" @@ -520,15 +475,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Particularly useful when selecting data like this is the `isna` method which finds all missing data" + "Particularly useful when selecting data like this is the `isna` method which\n", + "finds all missing data" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic[~titanic.age.isna()] # select first few passengers whose age is not N/A" @@ -544,9 +498,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.dropna() # drops all passengers that have some datapoint missing" @@ -555,9 +507,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.dropna(subset=['age', 'fare']) # Only drop passengers with missing ages or fares" @@ -567,15 +517,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Exercise: use sorting, indexing by value, dropna and tail/head or indexing to find the 10 oldest female passengers on the titanic. Try to do this on a single line by chaining calls to the titanic dataframe object" + "**Exercise**: use sorting, indexing by value, `dropna` and `tail`/`head` or\n", + "indexing to find the 10 oldest female passengers on the titanic. Try to do\n", + "this on a single line by chaining calls to the titanic `DataFrame` object" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic..." @@ -585,24 +535,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Plotting the data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before we start analyzing the data, let's play around with visualizing it. \n", + "## Plotting the data\n", "\n", + "Before we start analyzing the data, let's play around with visualizing it.\n", "Pandas does have some basic built-in plotting options:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.fare.hist(bins=20, log=True)" @@ -611,9 +553,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.age.plot()" @@ -623,15 +563,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Individual columns are essentially 1D arrays, so we can use them as such in matplotlib" + "Individual columns are essentially 1D arrays, so we can use them as such in\n", + "`matplotlib`" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "plt.scatter(titanic.age, titanic.fare)" @@ -641,17 +580,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "However, for most purposes much nicer plots can be obtained using [Seaborn](https://seaborn.pydata.org). Seaborn has support to produce plots showing the [univariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-univariate-distributions) or [bivariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-bivariate-distributions) distribution of data in a single or a grid of plots.\n", - "\n", - "Most of the seaborn plotting functions expect to get a pandas dataframe (although they will work with Numpy arrays as well). So we can plot age vs. fare like:" + "However, for most purposes much nicer plots can be obtained using\n", + "[Seaborn](https://seaborn.pydata.org). Seaborn has support to produce plots\n", + "showing the\n", + "[univariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-univariate-distributions)\n", + "or\n", + "[bivariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-bivariate-distributions)\n", + "distribution of data in a single or a grid of plots. Most of the seaborn\n", + "plotting functions expect to get a pandas `DataFrame` (although they will work\n", + "with Numpy arrays as well). So we can plot age vs. fare like:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.jointplot('age', 'fare', data=titanic)" @@ -661,15 +604,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Exercise: check the documentation from `sns.jointplot` (hover the mouse over the text \"jointplot\" and press shift-tab) to find out how to turn the scatter plot into a density (kde) map" + "**Exercise**: check the documentation from `sns.jointplot` (hover the mouse\n", + "over the text `jointplot` and press shift-tab) to find out how to turn the\n", + "scatter plot into a density (kde) map" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.jointplot('age', 'fare', data=titanic, ...)" @@ -679,15 +622,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here is just a brief example of how we can use multiple columns to illustrate the data in more detail" + "Here is just a brief example of how we can use multiple columns to illustrate\n", + "the data in more detail" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.relplot(x='age', y='fare', col='class', hue='sex', data=titanic,\n", @@ -698,15 +640,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Exercise: Split the plot above into two rows with the first row including the passengers who survived and the second row those who did not (you might have to check the documentation again by using shift-tab while overing the mouse over `relplot`) " + "**Exercise**: Split the plot above into two rows with the first row including\n", + "the passengers who survived and the second row those who did not (you might\n", + "have to check the documentation again by using shift-tab while overing the\n", + "mouse over `relplot`)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.relplot(x='age', y='fare', col='class', hue='sex', data=titanic,\n", @@ -717,19 +660,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "One of the nice thing of Seaborn is how easy it is to update how these plots look. You can read more about that [here](https://seaborn.pydata.org/tutorial/aesthetics.html). For example, to increase the font size to get a plot more approriate for a talk, you can use:" + "One of the nice thing of Seaborn is how easy it is to update how these plots\n", + "look. You can read more about that\n", + "[here](https://seaborn.pydata.org/tutorial/aesthetics.html). For example, to\n", + "increase the font size to get a plot more approriate for a talk, you can use:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.set_context('talk')\n", - "sns.violinplot(x='class', y='age', hue='sex', data=titanic, split=True, \n", + "sns.violinplot(x='class', y='age', hue='sex', data=titanic, split=True,\n", " order=('First', 'Second', 'Third'))" ] }, @@ -737,22 +681,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Summarizing the data (mean, std, etc.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are a large number of built-in methods to summarize the observations in a Pandas dataframe. Most of these will return a Series with the columns names as index:" + "## Summarizing the data (mean, std, etc.)\n", + "\n", + "There are a large number of built-in methods to summarize the observations in\n", + "a Pandas `DataFrame`. Most of these will return a `Series` with the columns\n", + "names as index:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.mean()" @@ -761,9 +700,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.quantile(0.75)" @@ -773,15 +710,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "One very useful one is `describe`, which gives an overview of many common summary measures" + "One very useful one is `describe`, which gives an overview of many common\n", + "summary measures" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.describe()" @@ -793,21 +729,20 @@ "source": [ "Note that non-numeric columns are ignored when summarizing data in this way.\n", "\n", - "We can also define our own functions to apply to the columns (in this case we have to explicitly set the data types)." + "We can also define our own functions to apply to the columns (in this case we\n", + "have to explicitly set the data types)." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def mad(series):\n", " \"\"\"\n", " Computes the median absolute deviatation (MAD)\n", - " \n", + "\n", " This is a outlier-resistant measure of the standard deviation\n", " \"\"\"\n", " no_nan = series.dropna()\n", @@ -820,15 +755,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can also provide multiple functions to the `apply` method (note that functions can be provided as strings)" + "We can also provide multiple functions to the `apply` method (note that\n", + "functions can be provided as strings)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.select_dtypes(np.number).apply(['mean', np.median, np.std, mad])" @@ -838,22 +772,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Grouping by" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One of the more powerful features of is `groupby`, which splits the dataset on a categorical variable. The book contains a clear tutorial on that feature [here](https://jakevdp.github.io/PythonDataScienceHandbook/03.08-aggregation-and-grouping.html). You can check the pandas documentation [here](http://pandas.pydata.org/pandas-docs/stable/groupby.html) for a more formal introduction. One simple use is just to put it into a loop" + "### Grouping by\n", + "\n", + "One of the more powerful features of is `groupby`, which splits the dataset on\n", + "a categorical variable. The book contains a clear tutorial on that feature\n", + "[here](https://jakevdp.github.io/PythonDataScienceHandbook/03.08-aggregation-and-grouping.html). You\n", + "can check the pandas documentation\n", + "[here](http://pandas.pydata.org/pandas-docs/stable/groupby.html) for a more\n", + "formal introduction. One simple use is just to put it into a loop" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "for cls, part_table in titanic.groupby('class'):\n", @@ -864,7 +796,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "However, it is more often combined with one of the aggregation functions discussed above as illustrated in this figure from the [Python data science handbook](https://jakevdp.github.io/PythonDataScienceHandbook/06.00-figure-code.html#Split-Apply-Combine)\n", + "However, it is more often combined with one of the aggregation functions\n", + "discussed above as illustrated in this figure from the [Python data science\n", + "handbook](https://jakevdp.github.io/PythonDataScienceHandbook/06.00-figure-code.html#Split-Apply-Combine)\n", "\n", "" ] @@ -872,9 +806,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby('class').mean()" @@ -890,9 +822,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby(['class', 'survived']).mean() # as always in pandas supply multiple column names as lists, not tuples" @@ -902,15 +832,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "When grouping it can help to use the `cut` method to split a continuous variable into a categorical one" + "When grouping it can help to use the `cut` method to split a continuous variable\n", + "into a categorical one" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby(['class', pd.cut(titanic.age, bins=(0, 18, 50, np.inf))]).mean()" @@ -926,9 +855,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby(['class', 'survived']).aggregate((np.median, mad))" @@ -938,17 +865,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that both the index (on the left) and the column names (on the top) now have multiple levels. Such a multi-level index is referred to as `MultiIndex`. This does complicate selecting specific columns/rows. You can read more of using `MultiIndex` [here](http://pandas.pydata.org/pandas-docs/stable/advanced.html).\n", - "\n", - "The short version is that columns can be selected using direct indexing (as discussed above)" + "Note that both the index (on the left) and the column names (on the top) now\n", + "have multiple levels. Such a multi-level index is referred to as `MultiIndex`.\n", + "This does complicate selecting specific columns/rows. You can read more of using\n", + "`MultiIndex` [here](http://pandas.pydata.org/pandas-docs/stable/advanced.html).\n", + "The short version is that columns can be selected using direct indexing (as\n", + "discussed above)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full = titanic.groupby(['class', 'survived']).aggregate((np.median, mad))" @@ -957,9 +885,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full[('age', 'median')] # selects median age column; note that the round brackets are optional" @@ -968,9 +894,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full['age'] # selects both age columns" @@ -980,15 +904,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Remember that indexing based on the index was done through `loc`. The rest is the same as for the columns above" + "Remember that indexing based on the index was done through `loc`. The rest is\n", + "the same as for the columns above" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full.loc[('First', 0)]" @@ -997,9 +920,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full.loc['First']\n" @@ -1015,9 +936,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_full.xs(0, level='survived') # selects all the zero's from the survived index" @@ -1026,34 +945,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "df_full.xs('mad', axis=1, level=1) # selects mad from the second level in the columns (i.e., axis=1) " - ] - }, - { - "cell_type": "markdown", "metadata": {}, + "outputs": [], "source": [ - "## Reshaping tables" + "df_full.xs('mad', axis=1, level=1) # selects mad from the second level in the columns (i.e., axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If we were interested in how the survival rate depends on the class and sex of the passengers we could simply use a groupby:" + "## Reshaping tables\n", + "\n", + "If we were interested in how the survival rate depends on the class and sex of\n", + "the passengers we could simply use a groupby:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby(['class', 'sex']).survived.mean()" @@ -1063,7 +974,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "However, this single-column table is difficult to read. The reason for this is that the indexing is multi-leveled (called `MultiIndex` in pandas), while there is only a single column. We would like to move one of the levels in the index to the columns. This can be done using `stack`/`unstack`:\n", + "However, this single-column table is difficult to read. The reason for this is\n", + "that the indexing is multi-leveled (called `MultiIndex` in pandas), while there\n", + "is only a single column. We would like to move one of the levels in the index to\n", + "the columns. This can be done using `stack`/`unstack`:\n", + "\n", "- `unstack`: Moves one levels in the index to the columns\n", "- `stack`: Moves one of levels in the columns to the index" ] @@ -1071,9 +986,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.groupby(['class', 'sex']).survived.mean().unstack('sex')" @@ -1083,7 +996,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The former table, where the different groups are defined in different rows, is often referred to as long-form. After unstacking the table is often referred to as wide-form as the different group (sex in this case) is now represented as different columns. In pandas some operations are easier on long-form tables (e.g., `groupby`) while others require wide_form tables (e.g., making scatter plots of two variables). You can go back and forth using `unstack` or `stack` as illustrated above, but as this is a crucial part of pandas there are many alternatives, such as `pivot_table`, `melt`, and `wide_to_long`, which we will discuss below.\n", + "The former table, where the different groups are defined in different rows, is\n", + "often referred to as long-form. After unstacking the table is often referred to\n", + "as wide-form as the different group (sex in this case) is now represented as\n", + "different columns. In pandas some operations are easier on long-form tables\n", + "(e.g., `groupby`) while others require wide_form tables (e.g., making scatter\n", + "plots of two variables). You can go back and forth using `unstack` or `stack` as\n", + "illustrated above, but as this is a crucial part of pandas there are many\n", + "alternatives, such as `pivot_table`, `melt`, and `wide_to_long`, which we will\n", + "discuss below.\n", "\n", "We can prettify the table further using seaborn" ] @@ -1091,12 +1012,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "ax = sns.heatmap(titanic.groupby(['class', 'sex']).survived.mean().unstack('sex'), \n", + "ax = sns.heatmap(titanic.groupby(['class', 'sex']).survived.mean().unstack('sex'),\n", " annot=True)\n", "ax.set_title('survival rate')" ] @@ -1105,22 +1024,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that there are also many ways to produce prettier tables in pandas (e.g., color all the negative values). This is documented [here](http://pandas.pydata.org/pandas-docs/stable/style.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Because this stacking/unstacking is fairly common after a groupby operation, there is a shortcut for it: `pivot_table`" + "Note that there are also many ways to produce prettier tables in pandas (e.g.,\n", + "color all the negative values). This is documented\n", + "[here](http://pandas.pydata.org/pandas-docs/stable/style.html).\n", + "\n", + "Because this stacking/unstacking is fairly common after a groupby operation,\n", + "there is a shortcut for it: `pivot_table`" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "titanic.pivot_table('survived', 'class', 'sex')" @@ -1136,9 +1051,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.heatmap(titanic.pivot_table('survived', ['class', 'embark_town'], ['sex', pd.cut(titanic.age, (0, 18, np.inf))]), annot=True)" @@ -1154,12 +1067,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "sns.heatmap(titanic.pivot_table('survived', ['class', 'embark_town'], ['sex', pd.cut(titanic.age, (0, 18, np.inf))], \n", + "sns.heatmap(titanic.pivot_table('survived', ['class', 'embark_town'], ['sex', pd.cut(titanic.age, (0, 18, np.inf))],\n", " aggfunc='count'), annot=True)" ] }, @@ -1167,7 +1078,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As in `groupby` the aggregation function can be a string of a common aggregation function, or any function that should be applied.\n", + "As in `groupby` the aggregation function can be a string of a common aggregation\n", + "function, or any function that should be applied.\n", "\n", "We can even apply different aggregate functions to different columns" ] @@ -1175,12 +1087,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "titanic.pivot_table(index='class', columns='sex', \n", + "titanic.pivot_table(index='class', columns='sex',\n", " aggfunc={'survived': 'count', 'fare': np.mean}) # compute number of survivors and mean fare\n" ] }, @@ -1188,15 +1098,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The opposite of `pivot_table` is `melt`. This can be used to change a wide-form table into a long-form table. This is not particularly useful on the titanic dataset, so let's create a new table where this might be useful. Let's say we have a dataset listing the FA and MD values in various WM tracts:" + "The opposite of `pivot_table` is `melt`. This can be used to change a wide-form\n", + "table into a long-form table. This is not particularly useful on the titanic\n", + "dataset, so let's create a new table where this might be useful. Let's say we\n", + "have a dataset listing the FA and MD values in various WM tracts:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "tracts = ('Corpus callosum', 'Internal capsule', 'SLF', 'Arcuate fasciculus')\n", @@ -1211,15 +1122,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This wide-form table (i.e., all the information is in different columns) makes it hard to select just all the FA values or only the values associated with the SLF. For this it would be easier to lismt all the values in a single column. Most of the tools discussed above (e.g., `group_by` or `seaborn` plotting) work better with long-form data, which we can obtain from `melt`: " + "This wide-form table (i.e., all the information is in different columns) makes\n", + "it hard to select just all the FA values or only the values associated with the\n", + "SLF. For this it would be easier to list all the values in a single column.\n", + "Most of the tools discussed above (e.g., `group_by` or `seaborn` plotting) work\n", + "better with long-form data, which we can obtain from `melt`:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_long = df_wide.melt('subject', var_name='measurement', value_name='dti_value')\n", @@ -1230,15 +1143,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can see that `melt` took all the columns (we could also have specified a specific sub-set) and returned each measurement as a seperate row. We probably want to seperate the measurement column into the measurement type (FA or MD) and the tract name. Many string manipulation function are available in the `DataFrame` object under `DataFrame.str` ([tutorial](http://pandas.pydata.org/pandas-docs/stable/text.html))" + "We can see that `melt` took all the columns (we could also have specified a\n", + "specific sub-set) and returned each measurement as a seperate row. We probably\n", + "want to seperate the measurement column into the measurement type (FA or MD) and\n", + "the tract name. Many string manipulation function are available in the\n", + "`DataFrame` object under `DataFrame.str`\n", + "([tutorial](http://pandas.pydata.org/pandas-docs/stable/text.html))" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_long['variable'] = df_long.measurement.str.slice(0, 2) # first two letters correspond to FA or MD\n", @@ -1250,17 +1166,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Finally we probably do want the FA and MD variables as different columns. \n", + "Finally we probably do want the FA and MD variables as different columns.\n", "\n", - "*Exercise*: Use `pivot_table` or `stack`/`unstack` to create a column for MD and FA." + "**Exercise**: Use `pivot_table` or `stack`/`unstack` to create a column for MD\n", + "and FA." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "df_unstacked = df_long." @@ -1270,15 +1185,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now use the tools discussed above to visualize the table (`seaborn`) or to group the table based on tract (`groupby` or `pivot_table`)." + "We can now use the tools discussed above to visualize the table (`seaborn`) or\n", + "to group the table based on tract (`groupby` or `pivot_table`)." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# feel free to analyze this random data in more detail" @@ -1288,15 +1202,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In general pandas is better at handling long-form than wide-form data, although for better visualization of the data an intermediate format is often best. One exception is calculating a covariance (`DataFrame.cov`) or correlation (`DataFrame.corr`) matrices which computes the correlation between each column:" + "In general pandas is better at handling long-form than wide-form data, although\n", + "for better visualization of the data an intermediate format is often best. One\n", + "exception is calculating a covariance (`DataFrame.cov`) or correlation\n", + "(`DataFrame.corr`) matrices which computes the correlation between each column:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "sns.heatmap(df_wide.corr(), cmap=sns.diverging_palette(240, 10, s=99, n=300), )" @@ -1306,24 +1221,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Linear fitting (statsmodels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Linear fitting between the different columns is available through the [statsmodels](https://www.statsmodels.org/stable/index.html) library. A nice way to play around with a wide variety of possible models is to use R-style functions. The usage of the functions in stastmodels is described [here](https://www.statsmodels.org/dev/example_formulas.html). You can find a more detailed description of the R-style functions [here](https://patsy.readthedocs.io/en/latest/formulas.html#the-formula-language). \n", + "## Linear fitting (`statsmodels`)\n", + "\n", + "Linear fitting between the different columns is available through the\n", + "[`statsmodels`](https://www.statsmodels.org/stable/index.html) library. A nice\n", + "way to play around with a wide variety of possible models is to use R-style\n", + "functions. The usage of the functions in `statsmodels` is described\n", + "[here](https://www.statsmodels.org/dev/example_formulas.html). You can find a\n", + "more detailed description of the R-style functions\n", + "[here](https://patsy.readthedocs.io/en/latest/formulas.html#the-formula-\n", + "language).\n", "\n", - "In short these functions describe the linear model as a string. For example, \"y ~ x + a + x * a\" fits the variable `y` as a function of `x`, `a`, and the interaction between `x` and `a`. The intercept is included by default (you can add \"+ 0\" to remove it)." + "In short these functions describe the linear model as a string. For example,\n", + "`\"y ~ x + a + x * a\"` fits the variable `y` as a function of `x`, `a`, and the\n", + "interaction between `x` and `a`. The intercept is included by default (you can\n", + "add `\"+ 0\"` to remove it)." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "result = smf.logit('survived ~ age + sex + age * sex', data=titanic).fit()\n", @@ -1334,17 +1252,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that statsmodels understands categorical variables and automatically replaces them with dummy variables.\n", + "Note that `statsmodels` understands categorical variables and automatically\n", + "replaces them with dummy variables.\n", "\n", - "Above we used logistic regression, which is appropriate for the binary survival rate. A wide variety of linear models are available. Let's try a GLM, but assume that the fare is drawn from a Gamma distribution:" + "Above we used logistic regression, which is appropriate for the binary\n", + "survival rate. A wide variety of linear models are available. Let's try a GLM,\n", + "but assume that the fare is drawn from a Gamma distribution:" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "age_dmean = titanic.age - titanic.age.mean()\n", @@ -1359,66 +1278,32 @@ "Cherbourg passengers clearly paid a lot more...\n", "\n", "\n", - "Note that we did not actually add the age_dmean to the dataframe. Statsmodels (or more precisely the underlying [patsy](https://patsy.readthedocs.io/en/latest/) library) automatically extracted this from our environment. This can lead to confusing behaviour..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# More reading" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "Note that we did not actually add the `age_dmean` to the\n", + "`DataFrame`. `statsmodels` (or more precisely the underlying\n", + "[patsy](https://patsy.readthedocs.io/en/latest/) library) automatically\n", + "extracted this from our environment. This can lead to confusing behaviour...\n", + "\n", + "# More reading\n", + "\n", "Other useful features\n", - "- [Concatenating](https://jakevdp.github.io/PythonDataScienceHandbook/03.06-concat-and-append.html) and [merging](https://jakevdp.github.io/PythonDataScienceHandbook/03.07-merge-and-join.html) of tables\n", - "- [Lots of](http://pandas.pydata.org/pandas-docs/stable/basics.html#dt-accessor) [time](http://pandas.pydata.org/pandas-docs/stable/timeseries.html) [series](http://pandas.pydata.org/pandas-docs/stable/timedeltas.html) support\n", - "- [Rolling Window functions](http://pandas.pydata.org/pandas-docs/stable/computation.html#window-functions) for after you have meaningfully sorted your data\n", + "\n", + "- [Concatenating](https://jakevdp.github.io/PythonDataScienceHandbook/03.06-concat-and-append.html)\n", + " and\n", + " [merging](https://jakevdp.github.io/PythonDataScienceHandbook/03.07-merge-and-join.html)\n", + " of tables\n", + "- [Lots\n", + " of](http://pandas.pydata.org/pandas-docs/stable/basics.html#dt-accessor)\n", + " [time](http://pandas.pydata.org/pandas-docs/stable/timeseries.html)\n", + " [series](http://pandas.pydata.org/pandas-docs/stable/timedeltas.html)\n", + " support\n", + "- [Rolling Window\n", + " functions](http://pandas.pydata.org/pandas-docs/stable/computation.html#window-\n", + " functions) for after you have meaningfully sorted your data\n", "- and much, much more" ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - }, - "toc": { - "colors": { - "hover_highlight": "#DAA520", - "running_highlight": "#FF0000", - "selected_highlight": "#FFD700" - }, - "moveMenuLeft": true, - "nav_menu": { - "height": "225px", - "width": "252px" - }, - "navigate_menu": true, - "number_sections": true, - "sideBar": true, - "threshold": 4, - "toc_cell": false, - "toc_section_display": "block", - "toc_window_display": false - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/getting_started/09_pandas.md b/getting_started/09_pandas.md new file mode 100644 index 0000000000000000000000000000000000000000..bb99481ef0d52ff8b996fec024b56e496bfe7af5 --- /dev/null +++ b/getting_started/09_pandas.md @@ -0,0 +1,658 @@ +# Pandas + +Pandas is a data analysis library focused on the cleaning and exploration of +tabular data. + +Some useful links are: +- [main website](https://pandas.pydata.org) +- [documentation](http://pandas.pydata.org/pandas-docs/stable/)<sup>1</sup> +- [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/)<sup>1</sup> by + Jake van der Plas + +<sup>1</sup> This tutorial borrows heavily from the pandas documentation and +the Python Data Science Handbook + +``` +%pylab inline +import pandas as pd # pd is the usual abbreviation for pandas +import matplotlib.pyplot as plt # matplotlib for plotting +import seaborn as sns # seaborn is the main plotting library for Pandas +import statsmodels.api as sm # statsmodels fits linear models to pandas data +import statsmodels.formula.api as smf +from IPython.display import Image +sns.set() # use the prettier seaborn plotting settings rather than the default matplotlib one +``` + +> We will mostly be using `seaborn` instead of `matplotlib` for +> visualisation. But `seaborn` is actually an extension to `matplotlib`, so we +> are still using the latter under the hood. + +## Loading in data + +Pandas supports a wide range of I/O tools to load from text files, binary files, +and SQL databases. You can find a table with all formats +[here](http://pandas.pydata.org/pandas-docs/stable/io.html). + +``` +titanic = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv') +titanic +``` + +This loads the data into a +[`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) +object, which is the main object we will be interacting with in pandas. It +represents a table of data. The other file formats all start with +`pd.read_{format}`. Note that we can provide the URL to the dataset, rather +than download it beforehand. + +We can write out the dataset using `dataframe.to_{format}(<filename)`: + +``` +titanic.to_csv('titanic_copy.csv', index=False) # we set index to False to prevent pandas from storing the row names +``` + +If you can not connect to the internet, you can run the command below to load +this locally stored titanic dataset + +``` +titanic = pd.read_csv('09_pandas/titanic.csv') +titanic +``` + +Note that the titanic dataset was also available to us as one of the standard +datasets included with seaborn. We could load it from there using + +``` +sns.load_dataset('titanic') +``` + +`Dataframes` can also be created from other python objects, using +`pd.DataFrame.from_{other type}`. The most useful of these is `from_dict`, +which converts a mapping of the columns to a pandas `DataFrame` (i.e., table). + +``` +pd.DataFrame.from_dict({ + 'random numbers': np.random.rand(5), + 'sequence (int)': np.arange(5), + 'sequence (float)': np.linspace(0, 5, 5), + 'letters': list('abcde'), + 'constant_value': 'same_value' +}) +``` + +For many applications (e.g., ICA, machine learning input) you might want to +extract your data as a numpy array. The underlying numpy array can be accessed +using the `values` attribute + +``` +titanic.values +``` + +Note that the type of the returned array is the most common type (in this case +object). If you just want the numeric parts of the table you can use +`select_dtypes`, which selects specific columns based on their dtype: + +``` +titanic.select_dtypes(include=np.number).values +``` + +Note that the numpy array has no information on the column names or row indices. +Alternatively, when you want to include the categorical variables in your later +analysis (e.g., for machine learning), you can extract dummy variables using: + +``` +pd.get_dummies(titanic) +``` + +## Accessing parts of the data + +[Documentation on indexing](http://pandas.pydata.org/pandas-docs/stable/indexing.html) + +### Selecting columns by name + +Single columns can be selected using the normal python indexing: + +``` +titanic['embark_town'] +``` + +If the column names are simple strings (not required) we can also access it +directly as an attribute + +``` +titanic.embark_town +``` + +Note that this returns a pandas +[`Series`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html) +rather than a `DataFrame` object. A `Series` is simply a 1-dimensional array +representing a single column. Multiple columns can be returned by providing a +list of columns names. This will return a `DataFrame`: + +``` +titanic[['class', 'alive']] +``` + +Note that you have to provide a list here (square brackets). If you provide a +tuple (round brackets) pandas will think you are trying to access a single +column that has that tuple as a name: + +``` +titanic[('class', 'alive')] +``` + +In this case there is no column called `('class', 'alive')` leading to an +error. Later on we will see some uses to having columns named like this. + +### Indexing rows by name or integer + +Individual rows can be accessed based on their name (i.e., the index) or integer +(i.e., which row it is in). In our current table this will give the same +results. To ensure that these are different, let's sort our titanic dataset +based on the passenger fare: + +``` +titanic_sorted = titanic.sort_values('fare') +titanic_sorted +``` + +Note that the re-sorting did not change the values in the index (i.e., left-most +column). + +We can select the first row of this newly sorted table using `iloc` + +``` +titanic_sorted.iloc[0] +``` + +We can select the row with the index 0 using + +``` +titanic_sorted.loc[0] +``` + +Note that this gives the same passenger as the first row of the initial table +before sorting + +``` +titanic.iloc[0] +``` + +Another common way to access the first or last N rows of a table is using the +head/tail methods + +``` +titanic_sorted.head(3) +``` + +``` +titanic_sorted.tail(3) +``` + +Note that nearly all methods in pandas return a new `Dataframe`, which means +that we can easily call another method on them + +``` +titanic_sorted.tail(10).head(5) # select the first 5 of the last 10 passengers in the database +``` + +``` +titanic_sorted.iloc[-10:-5] # alternative way to get the same passengers +``` + +**Exercise**: use sorting and tail/head or indexing to find the 10 youngest +passengers on the titanic. Try to do this on a single line by chaining calls +to the titanic `DataFrame` object + +```{.python .input} +titanic.sort_values... +``` + +### Indexing rows by value + +One final way to select specific columns is by their value + +``` +titanic[titanic.sex == 'female'] # selects all females +``` + +``` +# select all passengers older than 60 who departed from Southampton +titanic[(titanic.age > 60) & (titanic['embark_town'] == 'Southampton')] +``` + +Note that this required typing `titanic` quite often. A quicker way to get the +same result is using the `query` method, which is described in detail +[here](http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-query-method) +(note that using the `query` method is also faster and uses a lot less +memory). + +> You may have trouble using the `query` method with columns which have +a name that cannot be used as a Python identifier. + +``` +titanic.query('(age > 60) & (embark_town == "Southampton")') +``` + +Particularly useful when selecting data like this is the `isna` method which +finds all missing data + +``` +titanic[~titanic.age.isna()] # select first few passengers whose age is not N/A +``` + +This removing of missing numbers is so common that it has is own method + +``` +titanic.dropna() # drops all passengers that have some datapoint missing +``` + +``` +titanic.dropna(subset=['age', 'fare']) # Only drop passengers with missing ages or fares +``` + +**Exercise**: use sorting, indexing by value, `dropna` and `tail`/`head` or +indexing to find the 10 oldest female passengers on the titanic. Try to do +this on a single line by chaining calls to the titanic `DataFrame` object + +``` +titanic... +``` + +## Plotting the data + +Before we start analyzing the data, let's play around with visualizing it. +Pandas does have some basic built-in plotting options: + +``` +titanic.fare.hist(bins=20, log=True) +``` + +``` +titanic.age.plot() +``` + +Individual columns are essentially 1D arrays, so we can use them as such in +`matplotlib` + +``` +plt.scatter(titanic.age, titanic.fare) +``` + +However, for most purposes much nicer plots can be obtained using +[Seaborn](https://seaborn.pydata.org). Seaborn has support to produce plots +showing the +[univariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-univariate-distributions) +or +[bivariate](https://seaborn.pydata.org/tutorial/distributions.html#plotting-bivariate-distributions) +distribution of data in a single or a grid of plots. Most of the seaborn +plotting functions expect to get a pandas `DataFrame` (although they will work +with Numpy arrays as well). So we can plot age vs. fare like: + +``` +sns.jointplot('age', 'fare', data=titanic) +``` + +**Exercise**: check the documentation from `sns.jointplot` (hover the mouse +over the text `jointplot` and press shift-tab) to find out how to turn the +scatter plot into a density (kde) map + +``` +sns.jointplot('age', 'fare', data=titanic, ...) +``` + +Here is just a brief example of how we can use multiple columns to illustrate +the data in more detail + +``` +sns.relplot(x='age', y='fare', col='class', hue='sex', data=titanic, + col_order=('First', 'Second', 'Third')) +``` + +**Exercise**: Split the plot above into two rows with the first row including +the passengers who survived and the second row those who did not (you might +have to check the documentation again by using shift-tab while overing the +mouse over `relplot`) + +``` +sns.relplot(x='age', y='fare', col='class', hue='sex', data=titanic, + col_order=('First', 'Second', 'Third')...) +``` + +One of the nice thing of Seaborn is how easy it is to update how these plots +look. You can read more about that +[here](https://seaborn.pydata.org/tutorial/aesthetics.html). For example, to +increase the font size to get a plot more approriate for a talk, you can use: + +``` +sns.set_context('talk') +sns.violinplot(x='class', y='age', hue='sex', data=titanic, split=True, + order=('First', 'Second', 'Third')) +``` + +## Summarizing the data (mean, std, etc.) + +There are a large number of built-in methods to summarize the observations in +a Pandas `DataFrame`. Most of these will return a `Series` with the columns +names as index: + +``` +titanic.mean() +``` + +``` +titanic.quantile(0.75) +``` + +One very useful one is `describe`, which gives an overview of many common +summary measures + +``` +titanic.describe() +``` + +Note that non-numeric columns are ignored when summarizing data in this way. + +We can also define our own functions to apply to the columns (in this case we +have to explicitly set the data types). + +``` +def mad(series): + """ + Computes the median absolute deviatation (MAD) + + This is a outlier-resistant measure of the standard deviation + """ + no_nan = series.dropna() + return np.median(abs(no_nan - np.nanmedian(no_nan))) + +titanic.select_dtypes(np.number).apply(mad) +``` + +We can also provide multiple functions to the `apply` method (note that +functions can be provided as strings) + +``` +titanic.select_dtypes(np.number).apply(['mean', np.median, np.std, mad]) +``` + +### Grouping by + +One of the more powerful features of is `groupby`, which splits the dataset on +a categorical variable. The book contains a clear tutorial on that feature +[here](https://jakevdp.github.io/PythonDataScienceHandbook/03.08-aggregation-and-grouping.html). You +can check the pandas documentation +[here](http://pandas.pydata.org/pandas-docs/stable/groupby.html) for a more +formal introduction. One simple use is just to put it into a loop + +``` +for cls, part_table in titanic.groupby('class'): + print(f'Mean fare in {cls.lower()} class: {part_table.fare.mean()}') +``` + +However, it is more often combined with one of the aggregation functions +discussed above as illustrated in this figure from the [Python data science +handbook](https://jakevdp.github.io/PythonDataScienceHandbook/06.00-figure-code.html#Split-Apply-Combine) + + + +``` +titanic.groupby('class').mean() +``` + +We can also group by multiple variables at once + +``` +titanic.groupby(['class', 'survived']).mean() # as always in pandas supply multiple column names as lists, not tuples +``` + +When grouping it can help to use the `cut` method to split a continuous variable +into a categorical one + +``` +titanic.groupby(['class', pd.cut(titanic.age, bins=(0, 18, 50, np.inf))]).mean() +``` + +We can use the `aggregate` method to apply a different function to each series + +``` +titanic.groupby(['class', 'survived']).aggregate((np.median, mad)) +``` + +Note that both the index (on the left) and the column names (on the top) now +have multiple levels. Such a multi-level index is referred to as `MultiIndex`. +This does complicate selecting specific columns/rows. You can read more of using +`MultiIndex` [here](http://pandas.pydata.org/pandas-docs/stable/advanced.html). +The short version is that columns can be selected using direct indexing (as +discussed above) + +``` +df_full = titanic.groupby(['class', 'survived']).aggregate((np.median, mad)) +``` + +``` +df_full[('age', 'median')] # selects median age column; note that the round brackets are optional +``` + +``` +df_full['age'] # selects both age columns +``` + +Remember that indexing based on the index was done through `loc`. The rest is +the same as for the columns above + +``` +df_full.loc[('First', 0)] +``` + +``` +df_full.loc['First'] + +``` + +More advanced use of the `MultiIndex` is possible through `xs`: + +``` +df_full.xs(0, level='survived') # selects all the zero's from the survived index +``` + +``` +df_full.xs('mad', axis=1, level=1) # selects mad from the second level in the columns (i.e., axis=1) +``` + +## Reshaping tables + +If we were interested in how the survival rate depends on the class and sex of +the passengers we could simply use a groupby: + +``` +titanic.groupby(['class', 'sex']).survived.mean() +``` + +However, this single-column table is difficult to read. The reason for this is +that the indexing is multi-leveled (called `MultiIndex` in pandas), while there +is only a single column. We would like to move one of the levels in the index to +the columns. This can be done using `stack`/`unstack`: + +- `unstack`: Moves one levels in the index to the columns +- `stack`: Moves one of levels in the columns to the index + +``` +titanic.groupby(['class', 'sex']).survived.mean().unstack('sex') +``` + +The former table, where the different groups are defined in different rows, is +often referred to as long-form. After unstacking the table is often referred to +as wide-form as the different group (sex in this case) is now represented as +different columns. In pandas some operations are easier on long-form tables +(e.g., `groupby`) while others require wide_form tables (e.g., making scatter +plots of two variables). You can go back and forth using `unstack` or `stack` as +illustrated above, but as this is a crucial part of pandas there are many +alternatives, such as `pivot_table`, `melt`, and `wide_to_long`, which we will +discuss below. + +We can prettify the table further using seaborn + +``` +ax = sns.heatmap(titanic.groupby(['class', 'sex']).survived.mean().unstack('sex'), + annot=True) +ax.set_title('survival rate') +``` + +Note that there are also many ways to produce prettier tables in pandas (e.g., +color all the negative values). This is documented +[here](http://pandas.pydata.org/pandas-docs/stable/style.html). + +Because this stacking/unstacking is fairly common after a groupby operation, +there is a shortcut for it: `pivot_table` + +``` +titanic.pivot_table('survived', 'class', 'sex') +``` + +As usual in pandas, where we can also provide multiple column names + +``` +sns.heatmap(titanic.pivot_table('survived', ['class', 'embark_town'], ['sex', pd.cut(titanic.age, (0, 18, np.inf))]), annot=True) +``` + +We can also change the function to be used to aggregate the data + +``` +sns.heatmap(titanic.pivot_table('survived', ['class', 'embark_town'], ['sex', pd.cut(titanic.age, (0, 18, np.inf))], + aggfunc='count'), annot=True) +``` + +As in `groupby` the aggregation function can be a string of a common aggregation +function, or any function that should be applied. + +We can even apply different aggregate functions to different columns + +``` +titanic.pivot_table(index='class', columns='sex', + aggfunc={'survived': 'count', 'fare': np.mean}) # compute number of survivors and mean fare + +``` + +The opposite of `pivot_table` is `melt`. This can be used to change a wide-form +table into a long-form table. This is not particularly useful on the titanic +dataset, so let's create a new table where this might be useful. Let's say we +have a dataset listing the FA and MD values in various WM tracts: + +``` +tracts = ('Corpus callosum', 'Internal capsule', 'SLF', 'Arcuate fasciculus') +df_wide = pd.DataFrame.from_dict(dict({'subject': list('ABCDEFGHIJ')}, **{ + f'FA({tract})': np.random.rand(10) for tract in tracts }, **{ + f'MD({tract})': np.random.rand(10) * 1e-3 for tract in tracts +})) +df_wide +``` + +This wide-form table (i.e., all the information is in different columns) makes +it hard to select just all the FA values or only the values associated with the +SLF. For this it would be easier to list all the values in a single column. +Most of the tools discussed above (e.g., `group_by` or `seaborn` plotting) work +better with long-form data, which we can obtain from `melt`: + +``` +df_long = df_wide.melt('subject', var_name='measurement', value_name='dti_value') +df_long.head(12) +``` + +We can see that `melt` took all the columns (we could also have specified a +specific sub-set) and returned each measurement as a seperate row. We probably +want to seperate the measurement column into the measurement type (FA or MD) and +the tract name. Many string manipulation function are available in the +`DataFrame` object under `DataFrame.str` +([tutorial](http://pandas.pydata.org/pandas-docs/stable/text.html)) + +``` +df_long['variable'] = df_long.measurement.str.slice(0, 2) # first two letters correspond to FA or MD +df_long['tract'] = df_long.measurement.str.slice(3, -1) # fourth till the second-to-last letter correspond to the tract +df_long.head(12) +``` + +Finally we probably do want the FA and MD variables as different columns. + +**Exercise**: Use `pivot_table` or `stack`/`unstack` to create a column for MD +and FA. + +``` +df_unstacked = df_long. +``` + +We can now use the tools discussed above to visualize the table (`seaborn`) or +to group the table based on tract (`groupby` or `pivot_table`). + +``` +# feel free to analyze this random data in more detail +``` + +In general pandas is better at handling long-form than wide-form data, although +for better visualization of the data an intermediate format is often best. One +exception is calculating a covariance (`DataFrame.cov`) or correlation +(`DataFrame.corr`) matrices which computes the correlation between each column: + +``` +sns.heatmap(df_wide.corr(), cmap=sns.diverging_palette(240, 10, s=99, n=300), ) +``` + +## Linear fitting (`statsmodels`) + +Linear fitting between the different columns is available through the +[`statsmodels`](https://www.statsmodels.org/stable/index.html) library. A nice +way to play around with a wide variety of possible models is to use R-style +functions. The usage of the functions in `statsmodels` is described +[here](https://www.statsmodels.org/dev/example_formulas.html). You can find a +more detailed description of the R-style functions +[here](https://patsy.readthedocs.io/en/latest/formulas.html#the-formula- +language). + +In short these functions describe the linear model as a string. For example, +`"y ~ x + a + x * a"` fits the variable `y` as a function of `x`, `a`, and the +interaction between `x` and `a`. The intercept is included by default (you can +add `"+ 0"` to remove it). + +``` +result = smf.logit('survived ~ age + sex + age * sex', data=titanic).fit() +print(result.summary()) +``` + +Note that `statsmodels` understands categorical variables and automatically +replaces them with dummy variables. + +Above we used logistic regression, which is appropriate for the binary +survival rate. A wide variety of linear models are available. Let's try a GLM, +but assume that the fare is drawn from a Gamma distribution: + +``` +age_dmean = titanic.age - titanic.age.mean() +result = smf.glm('fare ~ age_dmean + embark_town', data=titanic).fit() +print(result.summary()) +``` + +Cherbourg passengers clearly paid a lot more... + + +Note that we did not actually add the `age_dmean` to the +`DataFrame`. `statsmodels` (or more precisely the underlying +[patsy](https://patsy.readthedocs.io/en/latest/) library) automatically +extracted this from our environment. This can lead to confusing behaviour... + +# More reading + +Other useful features + +- [Concatenating](https://jakevdp.github.io/PythonDataScienceHandbook/03.06-concat-and-append.html) + and + [merging](https://jakevdp.github.io/PythonDataScienceHandbook/03.07-merge-and-join.html) + of tables +- [Lots + of](http://pandas.pydata.org/pandas-docs/stable/basics.html#dt-accessor) + [time](http://pandas.pydata.org/pandas-docs/stable/timeseries.html) + [series](http://pandas.pydata.org/pandas-docs/stable/timedeltas.html) + support +- [Rolling Window + functions](http://pandas.pydata.org/pandas-docs/stable/computation.html#window- + functions) for after you have meaningfully sorted your data +- and much, much more