Last active
August 29, 2015 14:18
-
-
Save dkerkow/2222f110197373e9f183 to your computer and use it in GitHub Desktop.
Parsing and Plotting StratiJSON in Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Visualizing stratigraphic data from Stratigy in Python\n", | |
| "\n", | |
| "This is a short tutorial on what you can do with data from Stratigy\n", | |
| "\n", | |
| "At first, we get us some Python libraries. simplejson is for parsing JSON formatted data, pandas is for dataframes, urllib2 talks HTTP and matplotlib does the plotting." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Populating the interactive namespace from numpy and matplotlib\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import simplejson as json\n", | |
| "import pandas as pd\n", | |
| "import urllib2\n", | |
| "%pylab inline\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Now we define where to get the data from. We specify the side id and the API Endpoint. Use localhost with port number if you have Stratigy running locally in development mode or `http://stratigy.danielkerkow.de/data/` if you want to get data from the demo server." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "site_id = '44'\n", | |
| "api_endpoint = 'http://localhost:5000/data/'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Now we construct the URL with the site id and API endpoint and get the data from the server. We also load the JSON response into a native python dictionary:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "url = api_endpoint + site_id\n", | |
| "response_json = urllib2.urlopen(url)\n", | |
| "site_data = json.load(response_json)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Let's have a look inside:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'geometry': {'coordinates': [13, 43], 'type': 'Point'},\n", | |
| " 'properties': {'description': 'Description Placeholder',\n", | |
| " 'marker-size': 'large',\n", | |
| " 'strat_units': {'78': {'depth': 1,\n", | |
| " 'loi': 0.8925787,\n", | |
| " 'lower_boundary': 1,\n", | |
| " 'upper_boundary': 1},\n", | |
| " '79': {'depth': 2,\n", | |
| " 'loi': 0.10485864,\n", | |
| " 'lower_boundary': 2,\n", | |
| " 'upper_boundary': 2},\n", | |
| " '80': {'depth': 3,\n", | |
| " 'loi': 0.05788331,\n", | |
| " 'lower_boundary': 3,\n", | |
| " 'upper_boundary': 3},\n", | |
| " '81': {'depth': 4,\n", | |
| " 'loi': 0.72363725,\n", | |
| " 'lower_boundary': 4,\n", | |
| " 'upper_boundary': 4},\n", | |
| " '82': {'depth': 5,\n", | |
| " 'loi': 0.87343967,\n", | |
| " 'lower_boundary': 5,\n", | |
| " 'upper_boundary': 5},\n", | |
| " '83': {'depth': 6,\n", | |
| " 'loi': 0.02176066,\n", | |
| " 'lower_boundary': 6,\n", | |
| " 'upper_boundary': 6},\n", | |
| " '84': {'depth': 7,\n", | |
| " 'loi': 0.39986422,\n", | |
| " 'lower_boundary': 7,\n", | |
| " 'upper_boundary': 7},\n", | |
| " '85': {'depth': 8,\n", | |
| " 'loi': 0.34846959,\n", | |
| " 'lower_boundary': 8,\n", | |
| " 'upper_boundary': 8},\n", | |
| " '86': {'depth': 9,\n", | |
| " 'loi': 0.90826686,\n", | |
| " 'lower_boundary': 9,\n", | |
| " 'upper_boundary': 9},\n", | |
| " '87': {'depth': 10,\n", | |
| " 'loi': 0.80576194,\n", | |
| " 'lower_boundary': 10,\n", | |
| " 'upper_boundary': 10}},\n", | |
| " 'title': 'Site Name'},\n", | |
| " 'type': 'Feature'}" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "site_data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "You can see that the response is a valid geojson. But for the moment, we are interested in the stratigraphic data nested inside the geojson. We can simply strip it out of the dictionary by selecting the `strat_units` key inside the `properties` dictionary:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'78': {'depth': 1,\n", | |
| " 'loi': 0.8925787,\n", | |
| " 'lower_boundary': 1,\n", | |
| " 'upper_boundary': 1},\n", | |
| " '79': {'depth': 2,\n", | |
| " 'loi': 0.10485864,\n", | |
| " 'lower_boundary': 2,\n", | |
| " 'upper_boundary': 2},\n", | |
| " '80': {'depth': 3,\n", | |
| " 'loi': 0.05788331,\n", | |
| " 'lower_boundary': 3,\n", | |
| " 'upper_boundary': 3},\n", | |
| " '81': {'depth': 4,\n", | |
| " 'loi': 0.72363725,\n", | |
| " 'lower_boundary': 4,\n", | |
| " 'upper_boundary': 4},\n", | |
| " '82': {'depth': 5,\n", | |
| " 'loi': 0.87343967,\n", | |
| " 'lower_boundary': 5,\n", | |
| " 'upper_boundary': 5},\n", | |
| " '83': {'depth': 6,\n", | |
| " 'loi': 0.02176066,\n", | |
| " 'lower_boundary': 6,\n", | |
| " 'upper_boundary': 6},\n", | |
| " '84': {'depth': 7,\n", | |
| " 'loi': 0.39986422,\n", | |
| " 'lower_boundary': 7,\n", | |
| " 'upper_boundary': 7},\n", | |
| " '85': {'depth': 8,\n", | |
| " 'loi': 0.34846959,\n", | |
| " 'lower_boundary': 8,\n", | |
| " 'upper_boundary': 8},\n", | |
| " '86': {'depth': 9,\n", | |
| " 'loi': 0.90826686,\n", | |
| " 'lower_boundary': 9,\n", | |
| " 'upper_boundary': 9},\n", | |
| " '87': {'depth': 10,\n", | |
| " 'loi': 0.80576194,\n", | |
| " 'lower_boundary': 10,\n", | |
| " 'upper_boundary': 10}}" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "strat_data = site_data['properties']['strat_units']\n", | |
| "strat_data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "As you can see, we now have a dictionary containing only records and its properties. We can get a list of the record ids by taking the dictionaries keys:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['86', '84', '82', '83', '80', '81', '85', '87', '79', '78']" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "strat_data.keys()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Now we want to get an overview of the stratigraphic data itself. For further analysis and plotting it is better to have that in a table. So we construct a DataFrame from it:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>depth</th>\n", | |
| " <th>loi</th>\n", | |
| " <th>lower_boundary</th>\n", | |
| " <th>upper_boundary</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>78</th>\n", | |
| " <td> 1</td>\n", | |
| " <td> 0.892579</td>\n", | |
| " <td> 1</td>\n", | |
| " <td> 1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>79</th>\n", | |
| " <td> 2</td>\n", | |
| " <td> 0.104859</td>\n", | |
| " <td> 2</td>\n", | |
| " <td> 2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>80</th>\n", | |
| " <td> 3</td>\n", | |
| " <td> 0.057883</td>\n", | |
| " <td> 3</td>\n", | |
| " <td> 3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>81</th>\n", | |
| " <td> 4</td>\n", | |
| " <td> 0.723637</td>\n", | |
| " <td> 4</td>\n", | |
| " <td> 4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>82</th>\n", | |
| " <td> 5</td>\n", | |
| " <td> 0.873440</td>\n", | |
| " <td> 5</td>\n", | |
| " <td> 5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>83</th>\n", | |
| " <td> 6</td>\n", | |
| " <td> 0.021761</td>\n", | |
| " <td> 6</td>\n", | |
| " <td> 6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>84</th>\n", | |
| " <td> 7</td>\n", | |
| " <td> 0.399864</td>\n", | |
| " <td> 7</td>\n", | |
| " <td> 7</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>85</th>\n", | |
| " <td> 8</td>\n", | |
| " <td> 0.348470</td>\n", | |
| " <td> 8</td>\n", | |
| " <td> 8</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>86</th>\n", | |
| " <td> 9</td>\n", | |
| " <td> 0.908267</td>\n", | |
| " <td> 9</td>\n", | |
| " <td> 9</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>87</th>\n", | |
| " <td> 10</td>\n", | |
| " <td> 0.805762</td>\n", | |
| " <td> 10</td>\n", | |
| " <td> 10</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " depth loi lower_boundary upper_boundary\n", | |
| "78 1 0.892579 1 1\n", | |
| "79 2 0.104859 2 2\n", | |
| "80 3 0.057883 3 3\n", | |
| "81 4 0.723637 4 4\n", | |
| "82 5 0.873440 5 5\n", | |
| "83 6 0.021761 6 6\n", | |
| "84 7 0.399864 7 7\n", | |
| "85 8 0.348470 8 8\n", | |
| "86 9 0.908267 9 9\n", | |
| "87 10 0.805762 10 10" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df = pd.DataFrame.from_dict(strat_data, orient='index')\n", | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We could now go further with analysis of the table data, but I won't cover this here for now. Let's go ahead and plot the data." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Plotting\n", | |
| "\n", | |
| "When working with stratigraphic data, it is very common to plot measured data against the depth on the inverted y-axis, so you look on the plot like you would look on an outcrop, measuring depth from the top to the bottom. With this kind of plot you can visualize measurement curves, categorial layer segments or parallel comparisons. \n", | |
| "\n", | |
| "For now, I just want to plot the loss on ignition measurement agains the depth. Therefore we create a figure with a size of (2,6) and select the data. Here we just select `df['loi']` for the x-axis and `df['depth']` for the y-axis. The y-axis is inverted with `plt.gca().invert_yaxis()` and the rest is just a little bit of cosmetics.\n", | |
| "\n", | |
| "Now we have a nice little plot for data retrieved from the Stratigy database!" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": [ | |
| "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\n" | |
| ], | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7fca99c346d0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig = plt.figure(figsize=(2, 6))\n", | |
| "plt.plot(df['loi'], df['depth'], 'ro-')\n", | |
| "plt.gca().invert_yaxis()\n", | |
| "plt.title('TOC (LOI)')\n", | |
| "plt.xlabel('%')\n", | |
| "plt.ylabel('Depth [m]')\n", | |
| "plt.grid(True)\n", | |
| "plt.show()" | |
| ] | |
| } | |
| ], | |
| "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.6" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment