{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#GLACINDIA Workshop\n", "##Part 6: Numpy arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nikolay Koldunov\n", "\n", "koldunovn@gmail.com" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- a powerful N-dimensional array object\n", "- sophisticated (broadcasting) functions\n", "- tools for integrating C/C++ and Fortran code\n", "- useful linear algebra, Fourier transform, and random number capabilities\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.set_printoptions(precision=3 , suppress= True) # this is just to make the output look better" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We going to work with data from [GHCN (Global Historical Climatology Network)-Daily](http://www.ncdc.noaa.gov/oa/climate/ghcn-daily/) data.\n", "\n", "Convinient way to select data from there is to use [KNMI Climatological Service](http://climexp.knmi.nl/selectdailyseries.cgi?id)\n", "\n", "Load data in to a variable (Delhi daily air temperatures):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "05_numpy.ipynb \u001b[0m\u001b[01;35manatomyarray.png\u001b[0m DelhiTmax.txt temp_only_values.csv\r\n" ] } ], "source": [ "ls" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "temp = np.loadtxt('DelhiTmax.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We load data in to the spetiall variable called `numpy array`. This is homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type. Numpy arrays are basic elements of almost all python based scientific software." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(temp)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1944. , 1. , 1. , 22.2],\n", " [ 1944. , 1. , 3. , 23.9],\n", " [ 1944. , 1. , 4. , 22.2],\n", " ..., \n", " [ 2015. , 2. , 26. , 27.6],\n", " [ 2015. , 2. , 27. , 27.6],\n", " [ 2015. , 2. , 28. , 29.2]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shape of the array can be viewed as a `size of the table` that contain data:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(15436, 4)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However this `tables` can have 3 and more dimentions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So it's a *row-major* order. Matlab and Fortran use *column-major* order for arrays." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy arrays are statically typed, which allow faster operations" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp.dtype" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can't assign value of different type to element of the numpy array:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ValueError", "evalue": "could not convert string to float: Year", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtemp\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'Year'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mValueError\u001b[0m: could not convert string to float: Year" ] } ], "source": [ "temp[0,0] = 'Year'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Slicing works similarly to Matlab:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1944. , 1. , 1. , 22.2],\n", " [ 1944. , 1. , 3. , 23.9],\n", " [ 1944. , 1. , 4. , 22.2],\n", " [ 1944. , 1. , 6. , 22.8],\n", " [ 1944. , 1. , 7. , 22.2]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[0:5,:]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2015. , 2. , 24. , 28.6],\n", " [ 2015. , 2. , 25. , 28.6],\n", " [ 2015. , 2. , 26. , 27.6],\n", " [ 2015. , 2. , 27. , 27.6]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[-5:-1,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can look at the data. This is done by matplotlib module:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "CvOP/w9Bt4l9nQgCxgAAAABJRU5ErkJggg==\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pylab as plt\n", "plt.plot(temp[:,3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Index slicing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In general it is similar to Matlab" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First 12 elements of **second** column (months). Remember that indexing starts with 0:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[0:12,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First raw:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1944. , 1. , 1. , 22.2],\n", " [ 1944. , 1. , 3. , 23.9],\n", " [ 1944. , 1. , 4. , 22.2],\n", " [ 1944. , 1. , 6. , 22.8],\n", " [ 1944. , 1. , 7. , 22.2],\n", " [ 1944. , 1. , 8. , 16.7],\n", " [ 1944. , 1. , 9. , 20.6],\n", " [ 1944. , 1. , 11. , 21.1],\n", " [ 1944. , 1. , 15. , 20. ],\n", " [ 1944. , 1. , 19. , 24.4]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[:10,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercise\n", "\n", " - Plot only first 1000 values\n", " - Plot last 1000 values\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can create mask, selecting all raws where values in third raw (days) equals 10:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "mask = (temp[:,2]==10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we apply this mask and show only first 5 raws of the array:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1944. , 3. , 10. , 31.7],\n", " [ 1944. , 4. , 10. , 35.6],\n", " [ 1944. , 6. , 10. , 42.2],\n", " [ 1944. , 7. , 10. , 30.6],\n", " [ 1944. , 10. , 10. , 30.6],\n", " [ 1944. , 11. , 10. , 31.7],\n", " [ 1944. , 12. , 10. , 26.1],\n", " [ 1945. , 2. , 10. , 22.8],\n", " [ 1945. , 3. , 10. , 29.4],\n", " [ 1945. , 4. , 10. , 32.2],\n", " [ 1945. , 6. , 10. , 45. ],\n", " [ 1945. , 7. , 10. , 38.3],\n", " [ 1945. , 8. , 10. , 40. ],\n", " [ 1945. , 10. , 10. , 33.9],\n", " [ 1945. , 11. , 10. , 30. ],\n", " [ 1946. , 1. , 10. , 21.7],\n", " [ 1946. , 2. , 10. , 27.8],\n", " [ 1957. , 1. , 10. , 15. ],\n", " [ 1957. , 8. , 10. , 36.1],\n", " [ 1957. , 9. , 10. , 33.9]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[mask][:20,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You don't have to create separate variable for mask, but apply it directly. Here instead of first five rows I show five last rows:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2014. , 10. , 10. , 34.6],\n", " [ 2014. , 11. , 10. , 29.5],\n", " [ 2014. , 12. , 10. , 28.9],\n", " [ 2015. , 1. , 10. , 18.3],\n", " [ 2015. , 2. , 10. , 24.3]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[temp[:,2]==10][-5:,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can combine conditions. In this case we select days from 10 to 12 (only first 10 elements are shown):" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1944. , 1. , 11. , 21.1],\n", " [ 1944. , 2. , 12. , 23.9],\n", " [ 1944. , 3. , 10. , 31.7],\n", " [ 1944. , 3. , 11. , 32.2],\n", " [ 1944. , 3. , 12. , 30.6],\n", " [ 1944. , 4. , 10. , 35.6],\n", " [ 1944. , 4. , 12. , 36.1],\n", " [ 1944. , 5. , 11. , 41.7],\n", " [ 1944. , 5. , 12. , 40.6],\n", " [ 1944. , 6. , 10. , 42.2]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp[(temp[:,2]>=10)&(temp[:,2]<=12)][0:10,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercise\n", "\n", " Select only summer months\n", " Select only first half of the year\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create example array from first 12 values of second column and perform some basic operations:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 3., 4., 6., 7., 8., 9., 11., 15., 19., 20.,\n", " 21.])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days = temp[0:12,2]\n", "days" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 11., 13., 14., 16., 17., 18., 19., 21., 25., 29., 30.,\n", " 31.])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days+10" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 20., 60., 80., 120., 140., 160., 180., 220., 300.,\n", " 380., 400., 420.])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days*20" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 9., 16., 36., 49., 64., 81., 121., 225.,\n", " 361., 400., 441.])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days*days" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.841, 0.141, -0.757, -0.279, 0.657, 0.989, 0.412, -1. ,\n", " 0.65 , 0.15 , 0.913, 0.837])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sin(days)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercise\n", "\n", "- Create new array that will contain only temperatures\n", "\n", "- Convert all temperatures to deg F\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic statistics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create *temp_values* that will contain only data values:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 22.2, 23.9, 22.2, ..., 27.6, 27.6, 29.2])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values = temp[:,3]\n", "temp_values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple statistics:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "9.8000000000000007" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values.min()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "47.899999999999999" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values.max()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "31.402131381186834" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values.mean()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "6.7398926653583944" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values.std()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "484723.29999999999" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_values.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also use *sum* function:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "484723.29999999999" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(temp_values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can make operations on the subsets:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercise\n", "\n", " Calculate mean for first 1000 values of temperature\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Saving data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can save your data as a text file" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.savetxt('temp_only_values.csv',temp[:, 3], fmt='%.4f')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercises\n", "\n", "* Select and plot only data for October\n", "* Calculate monthly means for years from 1990 to 1999 and plot them" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }