{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python xarray seminar\n", "\n", "## Index\n", "\n", "* [Before start](#start)\n", "* [Python syntax crash course](#syntax)\n", "* [Why xarray?](#why)\n", "* [Dataset and DataArray](#datasets)\n", "* [Examples](#examples)\n", " * [Example 1: Extracting and manipulating time series](#example1)\n", " * [Example 2: Grouping, averaging and plotting maps](#example2)\n", " * [Example 3: Dealing with ensembles of forecasts](#example3)\n", "* [Conclusions](#conclusions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Before start\n", "\n", "\n", "* The goal of this seminar is to demonstrate some of the capabilities of the xarray and pandas python packages.\n", "\n", "* To be able to use these packages, only a very superficial knowledge of the python syntax is needed.\n", "\n", "* Most of you already know Matlab or R. For you, learning python is going to be easy if you want. Try resources as [Think Python](http://greenteapress.com/wp/think-python/) and [Python for Data Analysis](http://shop.oreilly.com/product/0636920023784.do).\n", "\n", "* Now we will see a very brief crash course of python syntax for those of you that see it for the first time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Python syntax crash course\n", "\n", "* In python we always deal with objects. The \"=\" is the assignation operator, as \"<-\" in R. \n", "\n", "* Python is designed to be readable and intuitive:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello world\n" ] } ], "source": [ "text = \"Hello world\"\n", "print(text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* There are different types of objects, and the user can define its own kinds of objects, this is, classes.\n", "\n", "* The most important built-in classes are String (like the text in the previous example), Tuple, Set, List and Dictionary.\n", "\n", "* More interestingly, there are high-level packages, like pandas and xarray, that define custom classes to easily deal with structured data as time series, data frames and netCDFs.\n", "\n", "* We will be skipping the introduction to basic python classes, and see an example with the pandas package." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### import statement\n", "\n", "We use the import statement to get the pandas package into our namespace. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* All the pandas functions will be available under the \"pd\" name. We don't use the full pandas name to keep the names shorter.\n", "\n", "* For example the read_csv function, which we can use to read data from comma sepparated ASCII files, is called typing pd.read_csv(arguments). \n", "\n", "* In python, parentheses () are used always to call functions.\n", "\n", "* We are going to open the famous [iris flower dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " | SepalLength | \n", "SepalWidth | \n", "PetalLength | \n", "PetalWidth | \n", "Name | \n", "
---|---|---|---|---|---|
0 | \n", "5.1 | \n", "3.5 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
1 | \n", "4.9 | \n", "3.0 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
2 | \n", "4.7 | \n", "3.2 | \n", "1.3 | \n", "0.2 | \n", "Iris-setosa | \n", "
3 | \n", "4.6 | \n", "3.1 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
4 | \n", "5.0 | \n", "3.6 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
5 | \n", "5.4 | \n", "3.9 | \n", "1.7 | \n", "0.4 | \n", "Iris-setosa | \n", "
6 | \n", "4.6 | \n", "3.4 | \n", "1.4 | \n", "0.3 | \n", "Iris-setosa | \n", "
7 | \n", "5.0 | \n", "3.4 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
8 | \n", "4.4 | \n", "2.9 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
9 | \n", "4.9 | \n", "3.1 | \n", "1.5 | \n", "0.1 | \n", "Iris-setosa | \n", "
10 | \n", "5.4 | \n", "3.7 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
11 | \n", "4.8 | \n", "3.4 | \n", "1.6 | \n", "0.2 | \n", "Iris-setosa | \n", "
12 | \n", "4.8 | \n", "3.0 | \n", "1.4 | \n", "0.1 | \n", "Iris-setosa | \n", "
13 | \n", "4.3 | \n", "3.0 | \n", "1.1 | \n", "0.1 | \n", "Iris-setosa | \n", "
14 | \n", "5.8 | \n", "4.0 | \n", "1.2 | \n", "0.2 | \n", "Iris-setosa | \n", "
15 | \n", "5.7 | \n", "4.4 | \n", "1.5 | \n", "0.4 | \n", "Iris-setosa | \n", "
16 | \n", "5.4 | \n", "3.9 | \n", "1.3 | \n", "0.4 | \n", "Iris-setosa | \n", "
17 | \n", "5.1 | \n", "3.5 | \n", "1.4 | \n", "0.3 | \n", "Iris-setosa | \n", "
18 | \n", "5.7 | \n", "3.8 | \n", "1.7 | \n", "0.3 | \n", "Iris-setosa | \n", "
19 | \n", "5.1 | \n", "3.8 | \n", "1.5 | \n", "0.3 | \n", "Iris-setosa | \n", "
20 | \n", "5.4 | \n", "3.4 | \n", "1.7 | \n", "0.2 | \n", "Iris-setosa | \n", "
21 | \n", "5.1 | \n", "3.7 | \n", "1.5 | \n", "0.4 | \n", "Iris-setosa | \n", "
22 | \n", "4.6 | \n", "3.6 | \n", "1.0 | \n", "0.2 | \n", "Iris-setosa | \n", "
23 | \n", "5.1 | \n", "3.3 | \n", "1.7 | \n", "0.5 | \n", "Iris-setosa | \n", "
24 | \n", "4.8 | \n", "3.4 | \n", "1.9 | \n", "0.2 | \n", "Iris-setosa | \n", "
25 | \n", "5.0 | \n", "3.0 | \n", "1.6 | \n", "0.2 | \n", "Iris-setosa | \n", "
26 | \n", "5.0 | \n", "3.4 | \n", "1.6 | \n", "0.4 | \n", "Iris-setosa | \n", "
27 | \n", "5.2 | \n", "3.5 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
28 | \n", "5.2 | \n", "3.4 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
29 | \n", "4.7 | \n", "3.2 | \n", "1.6 | \n", "0.2 | \n", "Iris-setosa | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
120 | \n", "6.9 | \n", "3.2 | \n", "5.7 | \n", "2.3 | \n", "Iris-virginica | \n", "
121 | \n", "5.6 | \n", "2.8 | \n", "4.9 | \n", "2.0 | \n", "Iris-virginica | \n", "
122 | \n", "7.7 | \n", "2.8 | \n", "6.7 | \n", "2.0 | \n", "Iris-virginica | \n", "
123 | \n", "6.3 | \n", "2.7 | \n", "4.9 | \n", "1.8 | \n", "Iris-virginica | \n", "
124 | \n", "6.7 | \n", "3.3 | \n", "5.7 | \n", "2.1 | \n", "Iris-virginica | \n", "
125 | \n", "7.2 | \n", "3.2 | \n", "6.0 | \n", "1.8 | \n", "Iris-virginica | \n", "
126 | \n", "6.2 | \n", "2.8 | \n", "4.8 | \n", "1.8 | \n", "Iris-virginica | \n", "
127 | \n", "6.1 | \n", "3.0 | \n", "4.9 | \n", "1.8 | \n", "Iris-virginica | \n", "
128 | \n", "6.4 | \n", "2.8 | \n", "5.6 | \n", "2.1 | \n", "Iris-virginica | \n", "
129 | \n", "7.2 | \n", "3.0 | \n", "5.8 | \n", "1.6 | \n", "Iris-virginica | \n", "
130 | \n", "7.4 | \n", "2.8 | \n", "6.1 | \n", "1.9 | \n", "Iris-virginica | \n", "
131 | \n", "7.9 | \n", "3.8 | \n", "6.4 | \n", "2.0 | \n", "Iris-virginica | \n", "
132 | \n", "6.4 | \n", "2.8 | \n", "5.6 | \n", "2.2 | \n", "Iris-virginica | \n", "
133 | \n", "6.3 | \n", "2.8 | \n", "5.1 | \n", "1.5 | \n", "Iris-virginica | \n", "
134 | \n", "6.1 | \n", "2.6 | \n", "5.6 | \n", "1.4 | \n", "Iris-virginica | \n", "
135 | \n", "7.7 | \n", "3.0 | \n", "6.1 | \n", "2.3 | \n", "Iris-virginica | \n", "
136 | \n", "6.3 | \n", "3.4 | \n", "5.6 | \n", "2.4 | \n", "Iris-virginica | \n", "
137 | \n", "6.4 | \n", "3.1 | \n", "5.5 | \n", "1.8 | \n", "Iris-virginica | \n", "
138 | \n", "6.0 | \n", "3.0 | \n", "4.8 | \n", "1.8 | \n", "Iris-virginica | \n", "
139 | \n", "6.9 | \n", "3.1 | \n", "5.4 | \n", "2.1 | \n", "Iris-virginica | \n", "
140 | \n", "6.7 | \n", "3.1 | \n", "5.6 | \n", "2.4 | \n", "Iris-virginica | \n", "
141 | \n", "6.9 | \n", "3.1 | \n", "5.1 | \n", "2.3 | \n", "Iris-virginica | \n", "
142 | \n", "5.8 | \n", "2.7 | \n", "5.1 | \n", "1.9 | \n", "Iris-virginica | \n", "
143 | \n", "6.8 | \n", "3.2 | \n", "5.9 | \n", "2.3 | \n", "Iris-virginica | \n", "
144 | \n", "6.7 | \n", "3.3 | \n", "5.7 | \n", "2.5 | \n", "Iris-virginica | \n", "
145 | \n", "6.7 | \n", "3.0 | \n", "5.2 | \n", "2.3 | \n", "Iris-virginica | \n", "
146 | \n", "6.3 | \n", "2.5 | \n", "5.0 | \n", "1.9 | \n", "Iris-virginica | \n", "
147 | \n", "6.5 | \n", "3.0 | \n", "5.2 | \n", "2.0 | \n", "Iris-virginica | \n", "
148 | \n", "6.2 | \n", "3.4 | \n", "5.4 | \n", "2.3 | \n", "Iris-virginica | \n", "
149 | \n", "5.9 | \n", "3.0 | \n", "5.1 | \n", "1.8 | \n", "Iris-virginica | \n", "
150 rows × 5 columns
\n", "\n", " | SepalLength | \n", "SepalWidth | \n", "PetalLength | \n", "PetalWidth | \n", "Name | \n", "
---|---|---|---|---|---|
0 | \n", "5.1 | \n", "3.5 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
1 | \n", "4.9 | \n", "3.0 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
2 | \n", "4.7 | \n", "3.2 | \n", "1.3 | \n", "0.2 | \n", "Iris-setosa | \n", "
3 | \n", "4.6 | \n", "3.1 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
4 | \n", "5.0 | \n", "3.6 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
5 | \n", "5.4 | \n", "3.9 | \n", "1.7 | \n", "0.4 | \n", "Iris-setosa | \n", "
6 | \n", "4.6 | \n", "3.4 | \n", "1.4 | \n", "0.3 | \n", "Iris-setosa | \n", "
7 | \n", "5.0 | \n", "3.4 | \n", "1.5 | \n", "0.2 | \n", "Iris-setosa | \n", "
8 | \n", "4.4 | \n", "2.9 | \n", "1.4 | \n", "0.2 | \n", "Iris-setosa | \n", "
9 | \n", "4.9 | \n", "3.1 | \n", "1.5 | \n", "0.1 | \n", "Iris-setosa | \n", "