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 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