{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 2.18 Programming for Geoscientists class test - 12th December 2013" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sample solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Test instructions\n", "\n", "I have added some additional comments in red\n", "\n", "* This test contains **5** questions each of which should be answered. The way I structure the exam is to give 5 questions that are worth 20% each. They increase in difficulty as you move from 1 through to 5 - it only makes sense that the last 20% is harder to obtain then the first 20%. Because of the clear cut nature of the questions it is possible to get 100%, and every year a few students manage just that.\n", "* Write your program in a Python cell just under each question.\n", "* You can write an explanation of your solution as comments in your code. There can never be too many comments. Make sure you explain everything. Do not leave me guessing. Even if you make an error in the code I may give you the benefit of the doubt if you have expained what you were trying to do in your comments.\n", "* In each case your solution program must fulfil all of the instructions - please check the instructions carefully and double check that your program fulfils all of the given instructions.Read this line again. And go back and read it again! So that an exam is marked objectively I have to partition a portion of the marks for each item asked for in the question. If you skip something then I cannot give you marks for the bit your missing - period. So read the question carefully and make sure you do everything that is asked. \n", "* Save your work regularly. The autosave is good - but you should make sure that your work is saved regularly. Lots of unusual things can happen and you do not want to be caught out.\n", "* At the end of the test you should email your IPython notebook document (i.e. this document) to [Gerard J. Gorman](http://www.imperial.ac.uk/people/g.gorman) at g.gorman@imperial.ac.uk Only some of you tested this.In 2013 2 people sent me blank documents...you have been warned." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**1.** Correct the 5 errors in the following program." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sin(1)=0.841471\n", "45.5555555556\n", "Growth = 4.2\n", "The year the data was collected was 1977\n", "[1.56, 1.67, 1.97, 1.43, 1.81]\n" ] } ], "source": [ "# Part a\n", "\n", "# Fix: Using sin without having importing math.\n", "from math import *\n", "x=1\n", "print \"sin(%g)=%g\" % (x, sin(x))\n", "\n", "# Part b\n", "\n", "# Fix: Avoided integer division.\n", "F = 114\n", "print 5./9*(F-32)\n", "\n", "# Part c\n", "\n", "# Fix:\n", "# 1. \"%\" cannot be converted to a float because it is an invalid literal. Remove it.\n", "# 2. The multiplication needs to be within its own brackets. \n", "interest = \"0.1%\"\n", "print \"Growth = %g\" % (42.0*float(interest[:-1]))\n", "\n", "# Part d\n", "\n", "# Fix:\n", "# 1. Clearly the programmer intended to extract column 4 rather than the 4th letter. We use split to fix this.\n", "# 2. However, this was also a weak solution because the Survey Name may have one or more words in its name.\n", "# To get around this we can count from the end.\n", "# 3. Finally the programmer clearly intended to use a formatted print statement so we need to add the slot\n", "# and convert to an integer (could also have changed %d to %s).\n", "# Table header:\n", "# Survey Name USGS ID Contributor Year Number of Tracklines KMS Shot\n", "line = \"Beaufort Sea W-62-77-AR WesternGeco 1977 69 4,987\"\n", "print \"The year the data was collected was %d\"% int(line.split()[-3])\n", "\n", "# Part e\n", "\n", "# Fix: You cannot append to a tuple. Change this to a list - i.e. change () to [].\n", "heights = [1.56, 1.67, 1.97, 1.43]\n", "heights.append(1.81)\n", "print heights" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**2.** The equation $s=ut-\\frac{1}{2}gt^2$ can be used to describe the height of a ball thrown vertically, where $s$ is the height, $u$ is the initial velocity, $t$ is the time and $g$ is acceleration (assumed here to be $9.81ms^{-2}$). \n", "\n", "* Assuming that the initial velocity is $2ms^{-1}$, plot a graph showing how the height varies from $t=0$ to the time it hits the ground, $t=\\frac{2u}{g}$.\n", "* Use 100 data points to generate your plot.\n", "* Label both the $x$ and $y$ axis appropriately." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: pylab import has clobbered these variables: ['cosh', 'ldexp', 'hypot', 'tan', 'isnan', 'log', 'fabs', 'floor', 'sqrt', 'frexp', 'degrees', 'pi', 'log10', 'sin', 'modf', 'copysign', 'expm1', 'ceil', 'isinf', 'sinh', 'trunc', 'cos', 'e', 'tanh', 'radians', 'fmod', 'exp', 'log1p', 'gamma']\n", "`%matplotlib` prevents importing * from pylab and numpy\n" ] }, { "data": { "image/png": "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\nH0kWLNkl4vtZAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Remember to inline pylab so that the graphs are part of the notebook and not a seperate window.\n", "%pylab inline\n", "\n", "from pylab import *\n", "\n", "# Define a function that calculates the height.\n", "def calc_height(u, t, g=9.81):\n", " return u*t-0.5*g*t**2\n", "\n", "# Define a function to calculate the landing time.\n", "def landing_time(u, g=9.81):\n", " return 2*u/g\n", "\n", "# Initialise variables.\n", "u_initial = 2.0 \n", "t_start = 0\n", "t_end = landing_time(u_initial)\n", "\n", "# Create 100 data points for time.\n", "time = linspace(0, t_end, 100)\n", "\n", "# Calculate 100 corresponding data points for height.\n", "height = calc_height(u_initial, time)\n", "\n", "# Basic plot with axes labeled.\n", "plot(time, height)\n", "xlabel(\"Time/seconds\")\n", "ylabel(\"Height/meters\")\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**3.** The Gaussian function can be defined as:\n", "$$g(x) = ae^{\\frac{(x-b)^2}{2c^2}}-d.$$\n", "\n", "* Implement a Python function that evaluates this expression for a given input for x.\n", "* The parameters $a$, $b$, $c$ and $d$ should be optional arguments to the function with default values 1.0, 0, 1.0 and 0.0 respectively.\n", "* Use NumPy to create an array of 101 $x$ values uniformly spaced in the range [−1, 1].\n", "* Use the function you created in the first part to create an array of Gaussian values.\n", "* Plot the result." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy import *\n", "\n", "# Define the Gaussian function\n", "def gaussian(x, a=1.0, b=0.0, c=1.0, d=0.0):\n", " return a*exp((x-b)**2/(2*c**2)) - d\n", "\n", "# Use numpy's linspace to create 101 points in the range [-1, 1]. It is an odd\n", "# number so we can have a point centred on 0.\n", "x = linspace(-1.0, 1.0, 101)\n", "\n", "# Calculate the corresponding values for the Gaussian function.\n", "g_x = gaussian(x)\n", "\n", "# Plot graph\n", "plot(x, g_x)\n", "\n", "# We were not asked but out if habit I cannot resist adding labels\n", "# on the axis - no matter how trivial. MathJax is thrown in just \n", "# for fun so you can see that it is possible to have beautyful\n", "# looking equations.\n", "xlabel(r\"$x$\")\n", "ylabel(r\"$a e^{\\frac{(x-b)^2}{2 c^2}} - d$\")\n", "\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**4.** The file *hpip\\_yakutsk\\_borehole\\_data.txt* (provided with this IPython notebook file) contains permafrost borehole temperature data (in degrees Celsius) for January between the years 1915 and 2000. By looking at the header of the text file you can see that the 2$^{nd}$ column contains the temperatures at a depth of 0.80m, the 3$^{rd}$ column contains the temperatures at a depth of 3.20m and the 4$^{th}$ column gives the surface temperatures taken from the *World Monthly Surface Climatology dataset (ds570.0)*. A temperature value of \"-999\" indicates that the data value is missing.\n", "\n", "* Write a program that reads in this data and plots each of the temperature profiles against the year.\n", "* Any year that contains missing temperature data (*i.e.* has a value of -999) should be skipped.\n", "* Label the *x* and *y* axis clearly.\n", "* Provide a legend and locate it in the best position for the plot." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Open the file in read mode.\n", "infile = open(\"hpip_yakutsk_borehole_data.txt\", \"r\")\n", "\n", "year = []\n", "temperature = {\"Surface temperature\":[], \"0.80m\":[], \"3.20m\":[]}\n", "\n", "for line in infile:\n", " # Instructions are to skip any data that has a value of -999. So lets\n", " # check this condition first.\n", " if \"-999.0\" in line:\n", " continue\n", "\n", " # Start to splitting into columns\n", " words = line.split()\n", " \n", " # Use a try/except block to do the reading concisely. We will raise an \n", " # exception any time something something unexpected occures.\n", " try:\n", " lyear = int(words[0])\n", " ldepth1 = float(words[1])\n", " ldepth2 = float(words[2])\n", " ldepth0 = float(words[3])\n", " \n", " year.append(lyear)\n", " temperature[\"Surface temperature\"].append(ldepth0)\n", " temperature[\"0.80m\"].append(ldepth1)\n", " temperature[\"3.20m\"].append(ldepth2)\n", " \n", " except:\n", " continue\n", "\n", "# Add the three plots\n", "plot(year, temperature[\"Surface temperature\"])\n", "plot(year, temperature[\"0.80m\"])\n", "plot(year, temperature[\"3.20m\"])\n", "\n", "# Label the axis\n", "xlabel(\"Year\")\n", "ylabel(\"Temperature/Celsius\")\n", "\n", "# Add a legend to explain the three plots - notice the use of loc to specify the\n", "# location of the legend box\n", "legend((\"Surface temperature\", \"0.80m\", \"3.20m\"), loc=\"best\")\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**5.** Create a Python class for *Igneous Rocks*.\n", "\n", "* The class should have the following attributes: *Rock Type*, *Grain Size*, *Usual Colour*, *Composition*, and *Notes*.\n", "* Add a class method to initialise the class.\n", "* Add a class method to print out a description of an object of this class.\n", "* Demonstrate the functionality of the class using the rock *Obsidian* where the grain size is *fine*, the usual colour is *dark*, the composition is *lava glass* and we note that it has a *glassy appearance*.\n", "* Use the class member function to print out the rock description." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rock type: Obsidian\n", "Grain size: fine\n", "Usual colour: dark\n", "Composition: Lava glass\n", "Notes: It has a glassy appearance\n" ] } ], "source": [ "class IgneousRocks:\n", " # Initialise the attributes. Using the convention that a name starting with \"_\"\n", " # should be treated as a private.\n", " def __init__(self, rock_type=None, grain_size=None, usual_colour=None, composition=None, notes=None):\n", " self._rock_type=rock_type\n", " self._grain_size=grain_size\n", " self._usual_colour=usual_colour\n", " self._composition=composition\n", " self._notes=notes\n", " \n", " # Define the string that should be printed if we try to print an instance of the class.\n", " def __str__(self):\n", " return \"\"\"Rock type: %s\n", "Grain size: %s\n", "Usual colour: %s\n", "Composition: %s\n", "Notes: %s\"\"\"%(self._rock_type, self._grain_size, self._usual_colour, self._composition, self._notes)\n", "\n", "# Demonstrate the class on some old rock.\n", "some_old_rock = IgneousRocks(rock_type=\"Obsidian\", grain_size=\"fine\", \\\n", " usual_colour=\"dark\", composition=\"Lava glass\", \\\n", " notes=\"It has a glassy appearance\")\n", "\n", "# Show the __str__ in action.\n", "print some_old_rock" ] }, { "cell_type": "code", "execution_count": 5, "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.11" } }, "nbformat": 4, "nbformat_minor": 0 }