{ "metadata": { "name": "", "signature": "sha256:32f8d4ee4543dfc826d90b82aeb6c8bc54261cca021ef8b264f3a1fa8dabd362" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Reading CTD data with PySeabird" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Author: Guilherme Castel\u00e3o" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pySeabird is a package to parse/load CTD data files. It should be an easy task but the problem is that the format have been changing along the time. Work with multiple ships/cruises data requires first to understand each file, to normalize it into a common format for only than start your analysis. That can still be done with few general regular expression rules, but I would rather use strict rules. If I'm loading hundreds or thousands of profiles, I want to be sure that no mistake passed by. I rather ignore a file in doubt and warn it, than belive that it was loaded right and be part of my analysis.\n", "\n", "With that in mind, I wrote this package with the ability to load multiple rules, so new rules can be added without change the main engine.\n", "\n", "For more information, check the documentatio" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "\n", "from seabird.cnv import fCNV\n", "from gsw import z_from_p" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first download an example file with some CTD data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!wget https://raw.githubusercontent.com/castelao/seabird/master/tests/test_data/dPIRX003.cnv.OK" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "--2015-02-20 18:49:22-- https://raw.githubusercontent.com/castelao/seabird/master/tests/test_data/dPIRX003.cnv.OK\r\n", "Resolving raw.githubusercontent.com... " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "199.27.79.133\r\n", "Connecting to raw.githubusercontent.com|199.27.79.133|:443... connected.\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "HTTP request sent, awaiting response... 200 OK\r\n", "Length: 47291 (46K) [text/plain]\r\n", "Saving to: 'dPIRX003.cnv.OK'\r\n", "\r\n", "\r", "dPIRX003.cnv.OK 0%[ ] 0 --.-KB/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "dPIRX003.cnv.OK 100%[=====================>] 46.18K --.-KB/s in 0.08s \r\n", "\r\n", "2015-02-20 18:49:22 (560 KB/s) - 'dPIRX003.cnv.OK' saved [47291/47291]\r\n", "\r\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "profile = fCNV('dPIRX003.cnv.OK')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Using rules from: cnv.yaml\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The profile dPIRX003.cnv.OK was loaded with the default rule cnv.yaml" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Header: %s\" % profile.attributes.keys()\n", "print \"Data: %s\" % profile.keys()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Header: ['file_type', 'seasave', 'start_time', 'nquan', 'longitude', 'datetime', 'bad_flag', 'nvalues', 'latitude', 'filename', 'md5']\n", "Data: ['timeS', 'pressure', 'temperature', 'temperature2', 'conductivity', 'conductivity2', 'potemperature', 'potemperature2', 'salinity', 'salinity2', 'flag']\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have latitude in the header, and pressure in the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "z = z_from_p(profile['pressure'], profile.attributes['latitude'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "from matplotlib import pyplot as plt\n", "\n", "plt.plot(profile['temperature'], z,'b')\n", "plt.plot(profile['temperature2'], z,'g')\n", "plt.xlabel('temperature')\n", "plt.ylabel('depth')\n", "plt.title(profile.attributes['filename'])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nZP8PMOzHFSGX2UYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 6 } ], "metadata": {} } ] }